Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D > 2D-программирование

2D-программирование Вопросы, касающиеся двумерного программирования

Ответ
 
Опции темы
Старый 27.02.2009, 18:41   #46
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Массивы

вот смотри...
ты меняеш ячейку 1 и 2. координаты i1,j1 у первой и i2,j2 у второй.
тогда эти ячейки рядом если abs(i1-i2)<2 and abs(j1-j2)<2
(Offline)
 
Ответить с цитированием
Старый 27.02.2009, 20:23   #47
Petrofan
ПроЭктировщик
 
Аватар для Petrofan
 
Регистрация: 26.08.2008
Сообщений: 149
Написано 10 полезных сообщений
(для 18 пользователей)
Ответ: Массивы

Твоя формула у меня звучит так
c=map(sx,sy)
map(sx,sy)=map(sx1,sy1)
map(sx1,sy1) = c
как к ней прикрепить запрет?
(Offline)
 
Ответить с цитированием
Старый 27.02.2009, 20:36   #48
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Массивы

уууу!!!
if abs(sx-sx1)<2 and abs(sy-sy1)<2
  c=map(sx,sy)
  map(sx,sy)=map(sx1,sy1)
  map(sx1,sy1) = c
endif
причем ячейки по диагонали тож являются соседними.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Petrofan (02.03.2009)
Старый 27.02.2009, 20:37   #49
Petrofan
ПроЭктировщик
 
Аватар для Petrofan
 
Регистрация: 26.08.2008
Сообщений: 149
Написано 10 полезных сообщений
(для 18 пользователей)
Ответ: Массивы

Вот для наглядности забабахал код без ресурсов
Graphics 800,600,32,0
SetBuffer BackBuffer() 
SeedRnd MilliSecs()

Dim Map_Grid(8,8)
For I=0 To 8
For J=0 To 8
Map_Grid(I,J)=Rnd(1,2)
Next 
Next 


While KeyDown(1)=0 
Cls
For j=0 To 7
For i=0 To 7
    If Map_Grid(i,j)=1 Then Color 0,200,200
    If Map_Grid(i,j)=2 Then Color 200,200,0
    Rect 317+i*48,113+j*48,46,46
Next
Next


For j=0 To 7
For i=0 To 7
Color 0,0,0
	If Map_Grid(i,j)>0				
	If i=sx1 And j=sy1 And selectst=1
	Rect 317+i*48,113+j*48,46,46
	EndIf
	EndIf	
Next
Next


sx=(MouseX()-318)/48
sy=(MouseY()-113)/48
	If sx>7 Then sx=7
	If sx<0 Then sx=0
	If sy>7 Then sy=0
	If sy<0 Then sy=7
	
	
	
If MouseHit(1)
FlushMouse()
If selectst=1
	
	
c=Map_Grid(sx,sy)
Map_Grid(sx,sy)=Map_Grid(sx1,sy1)
Map_Grid(sx1,sy1) = c	



selectst=2			
EndIf	
	If selectst=0
			sx1=sx
			sy1=sy
			selectst=1
	EndIf
		If selectst=2 Then selectst=0
	
EndIf
Flip 1
Wend 
End
(Offline)
 
Ответить с цитированием
Старый 27.02.2009, 20:46   #50
Petrofan
ПроЭктировщик
 
Аватар для Petrofan
 
Регистрация: 26.08.2008
Сообщений: 149
Написано 10 полезных сообщений
(для 18 пользователей)
Ответ: Массивы

Получаться что здесь перемещать можно вокруг стоящих, а надо вверх вниз влево вправо
(Offline)
 
Ответить с цитированием
Старый 27.02.2009, 20:51   #51
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Массивы

Graphics 800,600,32,2
SetBuffer BackBuffer() 
SeedRnd MilliSecs()

Dim Map_Grid(8,8)
For I=0 To 8
For J=0 To 8
Map_Grid(I,J)=Rand(1,5)
Next 
Next 


While KeyDown(1)=0 
Cls
For j=0 To 7
For i=0 To 7
    If Map_Grid(i,j)=1 Then Color 0,200,200
    If Map_Grid(i,j)=2 Then Color 200,200,0
    If Map_Grid(i,j)=3 Then Color 200,0,0
    If Map_Grid(i,j)=4 Then Color 0,200,0
    If Map_Grid(i,j)=5 Then Color 0,0,200
    
    Rect 317+i*48,113+j*48,46,46
Next
Next


For j=0 To 7
For i=0 To 7
Color 0,0,0
	If Map_Grid(i,j)>0				
	If i=sx1 And j=sy1 And selectst=1
	Rect 317+i*48,113+j*48,46,46
	EndIf
	EndIf	
Next
Next


sx=(MouseX()-318)/48
sy=(MouseY()-113)/48
	If sx>7 Then sx=7
	If sx<0 Then sx=0
	If sy>7 Then sy=0
	If sy<0 Then sy=7
	
	
	
If MouseHit(1)
FlushMouse()
If selectst=1
	
byside = 1

If Abs(sx-sx1)<2 And Abs(sy-sy1)<2
If (byside) And (Abs(sx-sx1)<>Abs(sy-sy1)) ;by side
c=Map_Grid(sx,sy)
Map_Grid(sx,sy)=Map_Grid(sx1,sy1)
Map_Grid(sx1,sy1) = c	
EndIf
EndIf


selectst=2			
EndIf	
	If selectst=0
			sx1=sx
			sy1=sy
			selectst=1
	EndIf
		If selectst=2 Then selectst=0
	
EndIf
Flip 1
Wend 
End
(Offline)
 
Ответить с цитированием
Старый 28.02.2009, 13:51   #52
Taugeshtu
scientist.alien
 
Аватар для Taugeshtu
 
Регистрация: 12.02.2007
Сообщений: 2,098
Написано 1,030 полезных сообщений
(для 2,593 пользователей)
Ответ: Массивы

if (abs(sx-sx1)<2 and sy=sy1) Or (sx=sx1 and abs(sy-sy1)<2)
  c=map(sx,sy)
  map(sx,sy)=map(sx1,sy1)
  map(sx1,sy1) = c
endif
Догадайся с трех раз что делает первая строка и чем она отличается от предложенного ранее примера.
//ЗЫ, ты выбрал какой-то неправильный метод освоения программирования, тебе нужна удочка, а ты все время клянчишь рыбу.
__________________
Public service announcement: вы можете заблокировать отображение сообщений определённого пользователя, добавив его ник в список игнорируемых.
Tau lab.
We LOVE you. We MADE you.
(Offline)
 
Ответить с цитированием
Эти 3 пользователя(ей) сказали Спасибо Taugeshtu за это полезное сообщение:
ABTOMAT (28.02.2009), avel (01.03.2009), Petrofan (02.03.2009)
Старый 02.03.2009, 16:47   #53
Petrofan
ПроЭктировщик
 
Аватар для Petrofan
 
Регистрация: 26.08.2008
Сообщений: 149
Написано 10 полезных сообщений
(для 18 пользователей)
Ответ: Массивы

Как сделать перебор массива и найти три или больше одинаковых значений и удалить их?
(Offline)
 
Ответить с цитированием
Старый 02.03.2009, 18:49   #54
NitE
злобный флудер
 
Регистрация: 10.07.2007
Сообщений: 2,585
Написано 789 полезных сообщений
(для 1,476 пользователей)
Ответ: Массивы

for i=1 to 100
if mass(i)=5 then mass(i)=0
next
(Offline)
 
Ответить с цитированием
Старый 02.03.2009, 19:30   #55
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Массивы

способ 1. Без дополнительного массива. примерно квадратичная сложность.
for i = 1 to n
 cnt = 0

 if a(i)<>0
  for j = i+1 to n step -1
   if a(j) = a(i) then cnt = cnt +1
  next
 endif

 if cnt >= 3
  val = a(i)
  for j=n to i
   if a(j) = a(i) then a(j)=0
  next
 endif

next
писал в браузере - мог где нибудь накосячить

если число значений элементов массива не слишком большое. например 0..10, то можно использовать спецмассив (массив временных значений)

Способ 2. С дополнительным массивом. примерно линейная сложность.
for i = 1 to cntvals
tempcnt(i) = 0
next

for i = 1 to n
tempcnt(a(i)) = tempcnt(a(i)) + 1
next

for i = 1 to cntvals
 if tempcnt(i) >=3
  for j = 1 to n
   if a(j) = i then a(j)=0
  next
 endif
next
первый способ имеет квадратичную сложность, второй линейную. т.е. с большими массивами второй способ предпочтительнее (разумеется, если комбинация из 3х и более одинаковых значений мало)

Последний раз редактировалось HolyDel, 02.03.2009 в 20:38.
(Offline)
 
Ответить с цитированием
Старый 02.03.2009, 20:14   #56
Petrofan
ПроЭктировщик
 
Аватар для Petrofan
 
Регистрация: 26.08.2008
Сообщений: 149
Написано 10 полезных сообщений
(для 18 пользователей)
Ответ: Массивы

Что получаться надо заводить новый массив (одномерный)
Или я что то не понял?
(Offline)
 
Ответить с цитированием
Старый 02.03.2009, 20:24   #57
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Массивы

см. предыдущий пост.
(Offline)
 
Ответить с цитированием
Старый 02.03.2009, 20:33   #58
Petrofan
ПроЭктировщик
 
Аватар для Petrofan
 
Регистрация: 26.08.2008
Сообщений: 149
Написано 10 полезных сообщений
(для 18 пользователей)
Ответ: Массивы

Откуда берется а() ? Объясни мне не образованному! С этими массивами я чета так притупел.
(Offline)
 
Ответить с цитированием
Старый 02.03.2009, 20:38   #59
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Массивы

ну у тебя будет не a() а идентификатор_твоего_массива(). неужели я на самом деле так криво объясняю? да и вообще - забей на названия переменных. они не выжны. самое главное - попытайся понять алгоритм. он очень прост!
(Offline)
 
Ответить с цитированием
Старый 02.03.2009, 20:50   #60
Petrofan
ПроЭктировщик
 
Аватар для Petrofan
 
Регистрация: 26.08.2008
Сообщений: 149
Написано 10 полезных сообщений
(для 18 пользователей)
Ответ: Массивы

Я подставлял Map_Grid(i) вилазит ошибка типа недостаточно параметров
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Массивы в типе DStalk 2D-программирование 15 03.01.2010 22:45
Опять про массивы в МП. SOS! Licon Основной форум 2 17.03.2009 23:14
Про массивы. Cliffe Snake Основной форум 10 08.11.2008 12:19
Многомерные массивы записей ARV Основной форум 1 19.01.2007 10:47
Спец массивы impersonalis Полезные функции 6 30.11.2005 01:08


Часовой пояс GMT +4, время: 04:56.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com