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

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

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

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

Ответ
 
Опции темы
Старый 02.03.2009, 21:01   #61
HolyDel
 
Регистрация: 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
avel
Бывалый
 
Аватар для avel
 
Регистрация: 12.10.2006
Сообщений: 737
Написано 131 полезных сообщений
(для 452 пользователей)
Ответ: Массивы

епть... как все запущенно-то... *многадумаю* надо будет написать туториал по массивам чтоли... да и вообще по основным алгоритмам...
(Offline)
 
Ответить с цитированием
Старый 03.03.2009, 08:28   #63
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,355
Написано 2,471 полезных сообщений
(для 6,852 пользователей)
Ответ: Массивы

и по 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
Petrofan
ПроЭктировщик
 
Аватар для Petrofan
 
Регистрация: 26.08.2008
Сообщений: 149
Написано 10 полезных сообщений
(для 18 пользователей)
Ответ: Массивы

Все равно не выходит сделать удаление ячеек можно как нибудь с комментариями для того чтоб хотя бы понять что там происходит?
(Offline)
 
Ответить с цитированием
Старый 03.03.2009, 13:30   #65
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,355
Написано 2,471 полезных сообщений
(для 6,852 пользователей)
Ответ: Массивы

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
Petrofan
ПроЭктировщик
 
Аватар для Petrofan
 
Регистрация: 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
jimon
 
Сообщений: n/a
Ответ: Массивы

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) первоначальные установки, если трёх подряд елементов нету то мы получим отрицательный индекс
i_result = -1
2) сначала заголовок цикла
for i = 1 to n-3
3) потом наше условие
if (a[i] = a[i+1]) and (a[i+1] = a[i+2]) then
4) если условие выполняется то пишем ответ
i_result = i
5) и закрываем цикл
next
получаем вот такой код
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 пользователя(ей) сказали Спасибо за это полезное сообщение:
ABTOMAT (03.03.2009), Taugeshtu (03.03.2009)
Старый 03.03.2009, 17:55   #68
Petrofan
ПроЭктировщик
 
Аватар для Petrofan
 
Регистрация: 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
jimon
 
Сообщений: n/a
Ответ: Массивы

Petrofan
можешь
 
Ответить с цитированием
Старый 03.03.2009, 19:14   #70
Petrofan
ПроЭктировщик
 
Аватар для Petrofan
 
Регистрация: 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
Petrofan
ПроЭктировщик
 
Аватар для Petrofan
 
Регистрация: 26.08.2008
Сообщений: 149
Написано 10 полезных сообщений
(для 18 пользователей)
Ответ: Массивы

То что есть другие варианты или я неправильно что то делаю ?
(Offline)
 
Ответить с цитированием
Старый 04.03.2009, 12:52   #72
HolyDel
 
Регистрация: 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
Petrofan
ПроЭктировщик
 
Аватар для Petrofan
 
Регистрация: 26.08.2008
Сообщений: 149
Написано 10 полезных сообщений
(для 18 пользователей)
Ответ: Массивы

Да не работает и все хоть волком вой. Эти массивы начинают нервировать.
(Offline)
 
Ответить с цитированием
Старый 04.03.2009, 14:21   #74
HolyDel
 
Регистрация: 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)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Petrofan (04.03.2009)
Старый 04.03.2009, 14:57   #75
Petrofan
ПроЭктировщик
 
Аватар для Petrofan
 
Регистрация: 26.08.2008
Сообщений: 149
Написано 10 полезных сообщений
(для 18 пользователей)
Ответ: Массивы

HolyDel - а ты умный спасибо за помощь !
(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, время: 03:36.


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