|
2D-программирование Вопросы, касающиеся двумерного программирования |
27.02.2009, 18:41
|
#46
|
☭
Регистрация: 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
|
ПроЭктировщик
Регистрация: 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
|
☭
Регистрация: 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)
|
|
Сообщение было полезно следующим пользователям:
|
|
27.02.2009, 20:37
|
#49
|
ПроЭктировщик
Регистрация: 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
|
ПроЭктировщик
Регистрация: 26.08.2008
Сообщений: 149
Написано 10 полезных сообщений (для 18 пользователей)
|
Ответ: Массивы
Получаться что здесь перемещать можно вокруг стоящих, а надо вверх вниз влево вправо
|
(Offline)
|
|
27.02.2009, 20:51
|
#51
|
☭
Регистрация: 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
|
scientist.alien
Регистрация: 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 за это полезное сообщение:
|
|
02.03.2009, 16:47
|
#53
|
ПроЭктировщик
Регистрация: 26.08.2008
Сообщений: 149
Написано 10 полезных сообщений (для 18 пользователей)
|
Ответ: Массивы
Как сделать перебор массива и найти три или больше одинаковых значений и удалить их?
|
(Offline)
|
|
02.03.2009, 18:49
|
#54
|
злобный флудер
Регистрация: 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
|
☭
Регистрация: 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
|
ПроЭктировщик
Регистрация: 26.08.2008
Сообщений: 149
Написано 10 полезных сообщений (для 18 пользователей)
|
Ответ: Массивы
Что получаться надо заводить новый массив (одномерный)
Или я что то не понял?
|
(Offline)
|
|
02.03.2009, 20:24
|
#57
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Ответ: Массивы
см. предыдущий пост.
|
(Offline)
|
|
02.03.2009, 20:33
|
#58
|
ПроЭктировщик
Регистрация: 26.08.2008
Сообщений: 149
Написано 10 полезных сообщений (для 18 пользователей)
|
Ответ: Массивы
Откуда берется а() ? Объясни мне не образованному! С этими массивами я чета так притупел.
|
(Offline)
|
|
02.03.2009, 20:38
|
#59
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Ответ: Массивы
ну у тебя будет не a() а идентификатор_твоего_массива(). неужели я на самом деле так криво объясняю? да и вообще - забей на названия переменных. они не выжны. самое главное - попытайся понять алгоритм. он очень прост!
|
(Offline)
|
|
02.03.2009, 20:50
|
#60
|
ПроЭктировщик
Регистрация: 26.08.2008
Сообщений: 149
Написано 10 полезных сообщений (для 18 пользователей)
|
Ответ: Массивы
Я подставлял Map_Grid(i) вилазит ошибка типа недостаточно параметров
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 02:29.
|