Танчики

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Ничи
Новичок
Новичок
 
Сообщения: 45
Зарегистрирован: 24.01.2005 (Пн) 17:29
Откуда: Питер

Танчики

Сообщение Ничи » 14.03.2005 (Пн) 21:46

Как организовать проверку, находится ли танк рядом с препятствием или другим танком??? :?

Морфий
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 119
Зарегистрирован: 11.01.2005 (Вт) 18:06

Сообщение Морфий » 14.03.2005 (Пн) 21:50

у тебя танк в виде прямоугольника?
Вот оно — счастье...

Ничи
Новичок
Новичок
 
Сообщения: 45
Зарегистрирован: 24.01.2005 (Пн) 17:29
Откуда: Питер

Сообщение Ничи » 14.03.2005 (Пн) 21:55

Да. Я Пытался сравнивать координаты танка и каждого препятсвия, но при этом начинались жуткие тормоза :evil:

Bonesnapper
Постоялец
Постоялец
 
Сообщения: 434
Зарегистрирован: 12.09.2004 (Вс) 15:39

Сообщение Bonesnapper » 14.03.2005 (Пн) 23:14

на до игровое поле делать состоящее из квадратиков и загонять его в дву мерный массив и проверять что там рядом с танком

Deja-vu
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 55
Зарегистрирован: 02.11.2004 (Вт) 22:02

Сообщение Deja-vu » 15.03.2005 (Вт) 0:19

Ничи
Да. Я Пытался сравнивать координаты танка и каждого препятсвия, но при этом начинались жуткие тормоза
А если сделать так: создаешь вокруг танчика проверку в один пиксель спереди его "дула". (если он у тебя по диагонали не будет ездить, конечно). И потом даешь условие: если пиксель спереди такого-то цвета, то это препятствие, а если друго-го, то это танк, а если третьего, то это свободное пространство... ну или что-то подобное. ИМХО, если препятствия у тебя не будут сильно разноцветными или будут иметь, допустим, почти невидимую глазу каемочку, то, это будет работать на все сто... 8)

SHURUP
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 440
Зарегистрирован: 15.09.2004 (Ср) 14:24
Откуда: Ирпень, Украина

Сообщение SHURUP » 15.03.2005 (Вт) 4:57

Ничи писал(а):Как организовать проверку, находится ли танк рядом с препятствием или другим танком???

Дык, нужно в инете поискать "Справочник по военному машино-строению в картинках" :wink:
Deja-vu писал(а):А если сделать так: создаешь вокруг танчика проверку в один пиксель спереди его "дула". (если он у тебя по диагонали не будет ездить, конечно). И потом даешь условие: если пиксель спереди такого-то цвета, то это препятствие, а если друго-го, то это танк, а если третьего, то это свободное пространство... ну или что-то подобное. ИМХО, если препятствия у тебя не будут сильно разноцветными или будут иметь, допустим, почти невидимую глазу каемочку, то, это будет работать на все сто...

Нецикаво! Ибо существенно ограничивается полет фантазии автора и его художественные навыки…
Мой вариант, относительно препятствий:
Во время генерирования карты (а это, как я понимаю, будет обычная картинка) создается "зона возможных перемещений", тоесть картинка, на которой белым цветом обозначены препятствия, а черным - свободная зона, и брать пиксель не из той пикчуры, которая видна на экране, а у невидимой (черно белой). Картинку-подложку можно всегда изменить: разрушилась где-то стена после взрыва - рисуем на подложке ЧЕРНЫЙ прямоугольник на месте бывшего препятствия.
А что касается самих танчиков, то рекомендовал бы изготавливать их в виде отдельного класса - из класса делать колекцию и проверять каждый танчик на предмет столкновения с каждым сородычем через FOR EACH … IN…
А с массивом - при большой карте и маленькими танчиками - глюки будут! В противном случае (маленькая карта-большие танки) будет отчетливо наблюдаться СЕТКООБРАЗНОСТЬ карты, скачкообразность движения танков , да и играть будет неинтересно.
Нам чужого не надо, но своё мы возьмем, чьё бы оно ни было...

Костя
Обычный пользователь
Обычный пользователь
 
Сообщения: 93
Зарегистрирован: 14.02.2005 (Пн) 6:45
Откуда: Новосибирск

Сообщение Костя » 15.03.2005 (Вт) 8:36

Тормоза будут если сравнивать координаты со всеми препятствиями игровой зоны. Можно для танка создать массив, скажем, 36 ближайших полей, на которые проезд запрещён (6х6), и частично обновлять массив после того, как координаты х или у танка выйдут за границы крайнего из этих полей (перенести "переднюю" половину массива назад, затем переписать "старые" значения передней половины)... А для того, чтобы не видно было тормозов при покидании зоны, делать массив с "запасом", и совместить его обновление с перемещением по "пограничному" полю. Или, если танков много, частично обновлять массивы для всех после того, как один из танков покинет свою зону (можно сюда добавить взаимный "обмен" значениями массивов, если танки близко друг от друга)... Примерно так. По крайней мере, при работе с ЧПУ я применял примерно такой алгоритм, в результате характеристики улучшились.
Последний раз редактировалось Костя 15.03.2005 (Вт) 9:14, всего редактировалось 4 раз(а).
Всё бывает!

Костя
Обычный пользователь
Обычный пользователь
 
Сообщения: 93
Зарегистрирован: 14.02.2005 (Пн) 6:45
Откуда: Новосибирск

Сообщение Костя » 15.03.2005 (Вт) 8:58

Главное удачно подобрать размер массива.

schalexey
Обычный пользователь
Обычный пользователь
 
Сообщения: 96
Зарегистрирован: 18.02.2005 (Пт) 17:41
Откуда: Сургут

Сообщение schalexey » 15.03.2005 (Вт) 14:14

Ничи посмотри в разделе "Ваши проэкты" темка есть "Space Explorer" скачай и покапайся в сырках... там какраз я проверял столкновение объекта произвольной формы с припятсвиями... тормозов 0

sashar2
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 170
Зарегистрирован: 06.02.2005 (Вс) 19:58

Сообщение sashar2 » 15.03.2005 (Вт) 18:39

На самом деле тормозов и правда не должно быть, и так, как бы я сделал, могу даже пример попробовать написать.
Надо в самом начале сделать что-то типа секундной загрузки. В это время вот что будет происходить:
Создается массив (0 to mapMX, 0 to mapMY), где mapMX и mapMY максимальные кординаты карты. После, берется твоя картинка и сканируется, предположим на цвет точки в определенных кординатах. Потом твой массив как бы накладывается на карту и определяется значение каждого элемента массива, допустим у тебя красный цвет это будет стенка, тогда значение с 0 изменится на 1, можно так присваивать и сделать хоть миллион этих объектов и не только стенки. После, при движении, а скорее всего по нажатию на клавишу, будут определятся кординаты танка отнасительно поверхности, кординаты проверяются на тип поверхности например:
if i(x,y) = 1 then
call Stenka
end if
И уж никаких тормозов во время игры точно не будет, только может быть сложно будет не заметно (без загрузки) обработать весь массив, но если делать это не попиксельно, а по полям т.е разделить все поле на квадраты, каждый квадрат шириной 20 пикселей например, то будет все норм и загрузки не потребуется. Вот гораздо будет интересно сделать движение противника, я не имею ввиду его тыканье
в разные стенки, а реализовать нормальный алгоритм обхода препятствий. Еще бы я на твоем месте обязательно сделал генерацию карты.

Deja-vu
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 55
Зарегистрирован: 02.11.2004 (Вт) 22:02

Сообщение Deja-vu » 15.03.2005 (Вт) 20:28

SHURUP
Мне кажется, твоя идея насчет альфа канала хороша... можно даже применить ее и к танчикам! :)

Костя
Обычный пользователь
Обычный пользователь
 
Сообщения: 93
Зарегистрирован: 14.02.2005 (Пн) 6:45
Откуда: Новосибирск

Костя

Сообщение Костя » 16.03.2005 (Ср) 5:31

А ещё проще разделить всё поле на сектора, для каждого из которых будет существовать свой массив препятствий, и при перемещении танка в тот или иной сектор сравнивать его координаты с массивом этого сектора.
Всё бывает!

sashar2
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 170
Зарегистрирован: 06.02.2005 (Вс) 19:58

Сообщение sashar2 » 16.03.2005 (Ср) 7:33

Костя
Я примерно также и скзазал, только вот зачем для каждого прерятствия делать свой массив? Надо для всего поля создать массив!
И при меремещении такнка в сектор считывать информацию из массива, по значению элемента массива определять действие, допустим 0 это просто движение, 1 это стенка, 2 боеприпасы, 3 дерево, 4 зыбучие пески. Можно много чего придумать.

Костя
Обычный пользователь
Обычный пользователь
 
Сообщения: 93
Зарегистрирован: 14.02.2005 (Пн) 6:45
Откуда: Новосибирск

Сообщение Костя » 16.03.2005 (Ср) 7:47

Не для каждого препятствия массив, а для каждого сектора массив препятствий, в этом секторе находящихся. Поле разделить на сектора. Это ускорит быстродействие, потому как размер массива уменьшится.
Последний раз редактировалось Костя 16.03.2005 (Ср) 7:56, всего редактировалось 1 раз.
Всё бывает!

Костя
Обычный пользователь
Обычный пользователь
 
Сообщения: 93
Зарегистрирован: 14.02.2005 (Пн) 6:45
Откуда: Новосибирск

Сообщение Костя » 16.03.2005 (Ср) 7:53

Допустим, сектор с координатами х1=1000, y1=1000, x2=2000,y2=2000. И в нём препятствия с координатами 1233,1450; 1101,1202; 1420,1312 и т.д. Если же препятствие будет большим, то в массив можно занести координаты его границ. Как только танк туда заехал, при каждом перемещении вызывать данные не всего игрового поля, а только этого сектора. Тогда тормозов не будет.
Последний раз редактировалось Костя 16.03.2005 (Ср) 8:01, всего редактировалось 1 раз.
Всё бывает!

sashar2
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 170
Зарегистрирован: 06.02.2005 (Вс) 19:58

Сообщение sashar2 » 16.03.2005 (Ср) 7:59

Кто тебе мешает сделать сектор меньше? Сделай эти квадраты по 50 пикселей, сделай короче сектора равные размеру самого танка. Зачем же создавать большой сектор (карту) маленький сектор(сам сектор) и потом еще препятствие? а так как ты говоришь это замучаешся, да и ради чего?
Обработка будет идти только дольше.

Костя
Обычный пользователь
Обычный пользователь
 
Сообщения: 93
Зарегистрирован: 14.02.2005 (Пн) 6:45
Откуда: Новосибирск

Сообщение Костя » 16.03.2005 (Ср) 8:03

Массив будет меньше - значит обработка его будет идти быстрее.
Всё бывает!

sashar2
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 170
Зарегистрирован: 06.02.2005 (Вс) 19:58

Сообщение sashar2 » 16.03.2005 (Ср) 8:06

Так она и так в моем способе будет идти быстро, что компьютеру тяжело будет найти в массиве кординаты (1200,1000), потом узнать его значение? А если сканировать не по пиксельно, а раз в ширину танка, например 20 пикселей, то вообще ни о каких тормозах речи и не будет идти.

sashar2
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 170
Зарегистрирован: 06.02.2005 (Вс) 19:58

Сообщение sashar2 » 16.03.2005 (Ср) 8:09

Костя
А вообще зачем спорить? Давай он сделает по одному из способов, а потом просто исправим на тот способ, который не реализовали и сраваним ? Т.е допустим он сделает твоим способом, а после я исправлю под свой и сравним?

Костя
Обычный пользователь
Обычный пользователь
 
Сообщения: 93
Зарегистрирован: 14.02.2005 (Пн) 6:45
Откуда: Новосибирск

Сообщение Костя » 16.03.2005 (Ср) 8:13

Так он твоим уже пытался, говорит, что начинались жуткие тормоза (в посте от 14.03.2005 (Пн) 21:55)
Всё бывает!

Мамонт
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 479
Зарегистрирован: 21.02.2005 (Пн) 16:48
Откуда: Ленинград

Сообщение Мамонт » 16.03.2005 (Ср) 8:35

Ребята не парьтесь над двухмерными танками! Делайте 3д танки в два раза проще!

sashar2
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 170
Зарегистрирован: 06.02.2005 (Вс) 19:58

Сообщение sashar2 » 16.03.2005 (Ср) 8:40

Костя
Он моим способом не делал, по его словам видно, что он сравнивал кординаты каждого препятствия, а как и что он там делал не сказано. Не думаю, что он делал так же, когда он выложит свой код это будет видно,а так я могу брать и поставить таймер каждые 1 мс проверять каждое препятствие... конечно тормоза пойдут, а ведь я тоже сравнилвал кординаты, понимаешь сравнивать можно по разному.
Format C:
Да ладно? :D

Костя
Обычный пользователь
Обычный пользователь
 
Сообщения: 93
Зарегистрирован: 14.02.2005 (Пн) 6:45
Откуда: Новосибирск

Сообщение Костя » 16.03.2005 (Ср) 8:56

sashar2
Ну, может быть.
FormatC:
Да, OpenGL - эт вещь! :)
Всё бывает!

Мамонт
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 479
Зарегистрирован: 21.02.2005 (Пн) 16:48
Откуда: Ленинград

Сообщение Мамонт » 16.03.2005 (Ср) 10:57

Костя кто тебе сказал что танки обязательно на OpenGl! Нати вам www.irender3d.com! 3д движок для Vb6! Русский!!! Сайт на английском но есть руский форум!! http://irender3d.com/board/
:lol:

Мамонт
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 479
Зарегистрирован: 21.02.2005 (Пн) 16:48
Откуда: Ленинград

Сообщение Мамонт » 16.03.2005 (Ср) 10:59

Не надо аваций! :lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol:

Ничи
Новичок
Новичок
 
Сообщения: 45
Зарегистрирован: 24.01.2005 (Пн) 17:29
Откуда: Питер

Сообщение Ничи » 17.03.2005 (Чт) 20:53

SHURUP писал(а):
Ничи писал(а):Как организовать проверку, находится ли танк рядом с препятствием или другим танком???

Дык, нужно в инете поискать "Справочник по военному машино-строению в картинках" :wink:
Deja-vu писал(а):А если сделать так: создаешь вокруг танчика проверку в один пиксель спереди его "дула". (если он у тебя по диагонали не будет ездить, конечно). И потом даешь условие: если пиксель спереди такого-то цвета, то это препятствие, а если друго-го, то это танк, а если третьего, то это свободное пространство... ну или что-то подобное. ИМХО, если препятствия у тебя не будут сильно разноцветными или будут иметь, допустим, почти невидимую глазу каемочку, то, это будет работать на все сто...

Нецикаво! Ибо существенно ограничивается полет фантазии автора и его художественные навыки…
Мой вариант, относительно препятствий:
Во время генерирования карты (а это, как я понимаю, будет обычная картинка) создается "зона возможных перемещений", тоесть картинка, на которой белым цветом обозначены препятствия, а черным - свободная зона, и брать пиксель не из той пикчуры, которая видна на экране, а у невидимой (черно белой). Картинку-подложку можно всегда изменить: разрушилась где-то стена после взрыва - рисуем на подложке ЧЕРНЫЙ прямоугольник на месте бывшего препятствия.
А что касается самих танчиков, то рекомендовал бы изготавливать их в виде отдельного класса - из класса делать колекцию и проверять каждый танчик на предмет столкновения с каждым сородычем через FOR EACH … IN…
А с массивом - при большой карте и маленькими танчиками - глюки будут! В противном случае (маленькая карта-большие танки) будет отчетливо наблюдаться СЕТКООБРАЗНОСТЬ карты, скачкообразность движения танков , да и играть будет неинтересно.


Сделал именно так, тормозов нет!!! :D

KDima
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 759
Зарегистрирован: 14.07.2004 (Ср) 23:14
Откуда: СПб

Сообщение KDima » 17.03.2005 (Чт) 21:17

Я уже практически написал своих ТАНЧИКОввввффф!!!
Никаких проблем не встречал...
Хороший прогер не тот, кто всё знает, хороший прогер знает, где найти знание.

Последний раз редактировалось: Administrator (15.07.2004 (Вт) 00:01), всего редактировалось 999 раз(а)

sashar2
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 170
Зарегистрирован: 06.02.2005 (Вс) 19:58

Сообщение sashar2 » 17.03.2005 (Чт) 22:56

Если я соберусь делать танчиков, то сделаю нормальный искуственный интелект, генерацию карты, сетевую игру, еще сделаю чтобы можно было нарисовать картинку и использовать ввиде мапы. Ну вот пока, что все. Но это чуть позже...

KDima
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 759
Зарегистрирован: 14.07.2004 (Ср) 23:14
Откуда: СПб

Сообщение KDima » 18.03.2005 (Пт) 11:39

sashar2

Поверь с AI не всё так просто! Точнее полная ПОДСТАВА!
Производительность алгоритма - 0! :cry:
Вот буду свой переделывать :twisted:
Хороший прогер не тот, кто всё знает, хороший прогер знает, где найти знание.

Последний раз редактировалось: Administrator (15.07.2004 (Вт) 00:01), всего редактировалось 999 раз(а)

sashar2
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 170
Зарегистрирован: 06.02.2005 (Вс) 19:58

Сообщение sashar2 » 18.03.2005 (Пт) 15:36

KDima
А это случайно не твой там тестик был :D. Точно твой... Кстати в каких единицах там выводится? На днях сам займусь этой проблемой, только ты скажи в какую сторону пахать может быть помогу.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 59

    TopList