|
2D-программирование Вопросы, касающиеся двумерного программирования |
02.03.2009, 21:01
|
#61
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Ответ: Массивы
скорее всего у тебя двумерный массив. в таком случае можно воспользоваться проекцией на одномерный. как то так:
size_x - размер поля по горизонтали
size_y - размер поля по вертикали
a - массив
n = size_x * size_y
for i = 1 to n
cnt = 0
x = i mod size_x
y = i / size_x
if a(x,y)<>0
for j = i+1 to n
x2 = j mod size_x
y2 = j / size_x
if a(x,y) = a(x2,y2) then cnt = cnt +1
next
endif
if cnt >= 3
val = a(x,y)
for j=n to i step -1
x2 = j mod size_x
y2 = j / size_x
if a(x2,y2) = a(x,y) then a(x2,y2)=0
next
endif
next
|
(Offline)
|
|
03.03.2009, 03:48
|
#62
|
Бывалый
Регистрация: 12.10.2006
Сообщений: 737
Написано 131 полезных сообщений (для 452 пользователей)
|
Ответ: Массивы
епть... как все запущенно-то... *многадумаю* надо будет написать туториал по массивам чтоли... да и вообще по основным алгоритмам...
|
(Offline)
|
|
03.03.2009, 08:28
|
#63
|
[object Object]
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,356
Написано 2,472 полезных сообщений (для 6,854 пользователей)
|
Ответ: Массивы
и по BlitzMax напиши, а то я там много чего недопонял.
хелп там не изобилует примерами.
А примеры хелпом.
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
|
(Offline)
|
|
03.03.2009, 11:18
|
#64
|
ПроЭктировщик
Регистрация: 26.08.2008
Сообщений: 149
Написано 10 полезных сообщений (для 18 пользователей)
|
Ответ: Массивы
Все равно не выходит сделать удаление ячеек можно как нибудь с комментариями для того чтоб хотя бы понять что там происходит?
|
(Offline)
|
|
03.03.2009, 13:30
|
#65
|
[object Object]
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,356
Написано 2,472 полезных сообщений (для 6,854 пользователей)
|
Ответ: Массивы
http://forum.boolean.name/showthread...9439#post99439
Я там немного пописал по теме.
Почитайте немножко ту тему по ссылке, может всё станет на свои места.
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
|
(Offline)
|
|
03.03.2009, 14:02
|
#66
|
ПроЭктировщик
Регистрация: 26.08.2008
Сообщений: 149
Написано 10 полезных сообщений (для 18 пользователей)
|
Ответ: Массивы
Это я уже знаю меня интересует вопрос перебора и удаления
Вот допустим перебором я могу считать сколько на карте одинаковых элементов
For i = 0 To 7
For j = 0 To 7
If Map(i,j)=1 Then img=img+1
next
next
Каким образом найти рядом стоящие 3 ячейки и удалить их?
|
(Offline)
|
|
03.03.2009, 16:40
|
#67
|
|
Ответ: Массивы
Petrofan
таксь, от простого к сложному
есть масив чисел 1,4,8,2,2,6,3,2,2,2,7,9,1 (размер n, индексы от 0 до n-1)
нужно определить есть ли в них три подряд одинаковых числа,
если есть то найти индекс (позицию) первого числа из этого ряда
записываем базовое условие которое надо проверить : a[i] = a[i+1] = a[i+2]
где a это наш масив, i это индекс первого елемента из трёх равных между собой елементов
решение задачи - проверить базовое условие для всех елементов масива
там где базовое условие выполняется, то по индексу i находится первый из трёх одинаковых елементов
базовые слова из решения - проверить условие для всех елементов, тоесть ЦИКЛ !
теперь определимся с границами цикла, если равные первые три то индекс первого елемента будет 0, значит левая граница 0
если равные последние три индекс третего елемента будет n-1, второго елемента n-2, первого елемента n-3
значит у нас цикл от 0 до n-3
basic и подобные языки не позволяют проверять на равенство три числа сразу, потому нам надо чтобы одновременно выполнялись 1=2 и 2=3
вот буква и и есть названием комманды - and (с англ "и")
тоесть наше условие теперь выглядит так (a[i] = a[i+1]) and (a[i+1] = a[i+2])
результат будем хранить в переменной i_result
пишем наш цикл :
1) первоначальные установки, если трёх подряд елементов нету то мы получим отрицательный индекс
2) сначала заголовок цикла
3) потом наше условие
if (a[i] = a[i+1]) and (a[i+1] = a[i+2]) then
4) если условие выполняется то пишем ответ
5) и закрываем цикл
получаем вот такой код
i_result = -1
for i = 0 to n-3
if (a[i] = a[i+1]) and (a[i+1] = a[i+2]) then i_result = i
next
в переменной i_result у нас будет индкс первого елемента из трёх равных между собой елементов
теперь задача именно тебе, найти индексы первых елементов из трёх равных между собой елементов во всех строках и столбцах 2д масива что у тебя есть
ps. я расписал так как сопли вытирают младенцу, пока не поймешь то что я написал то дальше не сможешь ничего сделать
|
|
|
Эти 2 пользователя(ей) сказали Спасибо за это полезное сообщение:
|
|
03.03.2009, 17:55
|
#68
|
ПроЭктировщик
Регистрация: 26.08.2008
Сообщений: 149
Написано 10 полезных сообщений (для 18 пользователей)
|
Ответ: Массивы
У меня двумерный массив заполнен случайными значениями. Я могу это сделать так?
If (Map(i,j) = Map(i+1,j)) And (Map(i+1,j) = Map(i+2,j)) Then i_result = i
|
(Offline)
|
|
03.03.2009, 18:10
|
#69
|
|
Ответ: Массивы
Petrofan
можешь
|
|
|
03.03.2009, 19:14
|
#70
|
ПроЭктировщик
Регистрация: 26.08.2008
Сообщений: 149
Написано 10 полезных сообщений (для 18 пользователей)
|
Ответ: Массивы
Вот так работает удаляет три одинаковых по вертикали и по горизонтали ячейки х0-х1-х2 и y0-y1-y2.
For i = 0 To 8-8
For j = 0 To 8-8
If (Map(i,j) = Map(i+1,j)) And (Map(i+1,j) = Map(i+2,j)) Then i_result = i
If (Map(i,j) = Map(i,j+1)) And (Map(i,j+1) = Map(i,j+2)) Then j_result = j
If i_result = i Then Map(i,j)=0 Map(i+1,j)=0 Map(i+1,j)=0 Map(i+2,j)=0
If j_result = j Then Map(i,j)=0 Map(i,j+1)=0 Map(i,j+1)=0 Map(i,j+2)=0
Next
Next
Этот метод по моему плохой по вертикали и по горизонтали будет очень много вариантов и все надо будет прописывать. А другого варианта нет?
|
(Offline)
|
|
04.03.2009, 12:43
|
#71
|
ПроЭктировщик
Регистрация: 26.08.2008
Сообщений: 149
Написано 10 полезных сообщений (для 18 пользователей)
|
Ответ: Массивы
То что есть другие варианты или я неправильно что то делаю ?
|
(Offline)
|
|
04.03.2009, 12:52
|
#72
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Ответ: Массивы
наверное не:
For i = 0 To 8-8
For j = 0 To 8-8
а:
For i = 0 To 8-3
For j = 0 To 8-3
|
(Offline)
|
|
04.03.2009, 13:22
|
#73
|
ПроЭктировщик
Регистрация: 26.08.2008
Сообщений: 149
Написано 10 полезных сообщений (для 18 пользователей)
|
Ответ: Массивы
Да не работает и все хоть волком вой. Эти массивы начинают нервировать.
|
(Offline)
|
|
04.03.2009, 14:21
|
#74
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Ответ: Массивы
Graphics3D 640,480,32,2
SeedRnd MilliSecs()
Dim map(8+3,8+3)
For i=0 To 7
For j=0 To 7
map(i,j)=Rand(1,3)
Next
Next
While Not KeyDown(1)
If KeyHit(57)
i_result = -1
j_result = -1
For i = 0 To 8
For j = 0 To 8
If (map(i,j) = map(i+1,j)) And (map(i+1,j) = map(i+2,j)) Then i_result = i
If (map(i,j) = map(i,j+1)) And (map(i,j+1) = map(i,j+2)) Then j_result = j
If (i_result>=0)
map(i,j)=0 map(i+1,j)=0 map(i+1,j)=0 map(i+2,j)=0
i_result = -1
EndIf
If (j_result>=0)
map(i,j)=0 map(i,j+1)=0 map(i,j+1)=0 map(i,j+2)=0
j_result = -1
EndIf
Next
Next
EndIf
For i=0 To 7
For j=0 To 7
Color (map(i,j)=1)*255,(map(i,j)=2)*255,(map(i,j)=3)*255
Rect i*32,j*32,30,30,1
Next
Next
Flip
Wend
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
04.03.2009, 14:57
|
#75
|
ПроЭктировщик
Регистрация: 26.08.2008
Сообщений: 149
Написано 10 полезных сообщений (для 18 пользователей)
|
Ответ: Массивы
HolyDel - а ты умный спасибо за помощь !
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 19:07.
|