Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Графика и игры
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 15.05.2014, 08:23
Sphynx55 Sphynx55 вне форума
Прохожий
 
Регистрация: 15.05.2014
Сообщения: 13
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Самопальный 2D движок RTS с картинками из RedAlert

Приветствую всех. Хочу представить мой проект начатый еще в школьные годы ( много-много лет назад ). Когда-то была у меня сонька (еще первая), и была на нее игруха RedAlert. Я был так впечатлен этой игрой, что захотел создать свою с̶ ̶б̶л̶э̶к̶д̶ж̶е̶к̶о̶м̶ ̶и̶. Как только дома появился ПК - я начал творить .
Мелочиться я не стал - карты до 2000х2000 (против 126х126 в оригинале), и соответственно таким картам до 1000000 юнитов, да да я захотел МИЛЛИОН юнитов .
Самое простое и доступное средство для меня было Delphi, и весь проект написан именно на нем. Код писал долго и упорно, периодически терял интерес и забрасывал. Собственно в таком виде он и остался по сей день - давным давно забытый и потерянный.
Что получилось на текущий момент можете оценить скачав архив. Для начала необходимо установить шрифт Visitor. Запускаться программка будет минуты 2 - попиксельно перекрашивая спрайты под разные команды . Как появится окно жмем кнопку Random, пару раз жмякнем ore, и затем MCV. Остальные кнопки не трогаем- на них может висеть все что угодно. На карте появятся 5 MCV которые начнут строить базу и танчики. Все что можно делать - это смотреть. Замес начнется минут через 5-10. Для центрирования карты, жмем по тексту Team1-Team5.
Если кого это заинтересовало, не стесняемся, спрашиваем.
Desktop.zip
Ответить с цитированием
  #2  
Старый 18.05.2014, 20:07
Sphynx55 Sphynx55 вне форума
Прохожий
 
Регистрация: 15.05.2014
Сообщения: 13
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Научился выделять и отдавать юнитам команды. Теперь возник вопрос - как работать с группами юнитов ? Может кто занимался подобным, и подскажет способы и подводные камни.
Desktop.zip
Запускается быстро (без перекраски спрайтов). Рабочие кнопки Test и ADDtank.
Ответить с цитированием
  #3  
Старый 18.05.2014, 20:51
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Хоть бы с исходником выкладывал.
Кстати, ты не пробовал из RA2 рисовать воксельных юнитов?
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #4  
Старый 19.05.2014, 08:51
Sphynx55 Sphynx55 вне форума
Прохожий
 
Регистрация: 15.05.2014
Сообщения: 13
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Было дело, много что пробовал Вопрос исключительно терпения и усидчивости, мне этого не хватило, и решил использовать самый простой вариант со спрайтами.
Так-же пробовал разные "гейм-студии" и прочие свистелки - красиво, удобно, но слишком тормознуто. Загиб начинался уже при 300-400 юнитах, что просто смехотворно при моих масштабах.
Ответить с цитированием
  #5  
Старый 20.05.2014, 09:30
phomm phomm вне форума
Новичок
 
Регистрация: 07.10.2013
Адрес: Тюмень
Сообщения: 50
Версия Delphi: 7/2007/XE+/FPC
Репутация: 22
По умолчанию

Всё круто, мои респекты автору. Билдеры строят, харвестеры собирают, танки месятся, игра живёт по известным законам.
Сам удивляюсь как оно работает на такой массе юнитов, чисто по прикидкам, при тестах было порядка пары тысяч, притормозов каких-то не заметно.
Насчёт геймстудий воможно Вы правы, но есть всё-таки разница, конструктор какой и нормальный движок для стандартных операций типа управление окном, рендеринг, звук. Логика в движке будет Ваша, а системщина - уйдёт на плечи движка, и тут не должно быть никаких тормозов.

Что мне не понравилось в демке. Залоченая карта (отображаемая область), сколько она там 20*30 клеток примерно, 500*400 примерно - очень неудобно. Это может быть продиктовано увеличением тормозов, конечно, но чисто графических тормозов, что как раз мог бы снять движок. Имхо было бы хорошо, если увеличение размера окна приводило к увеличению отображаемой области Также не понравилась система скроллинга карты, не всегда работает ожидаемо, скролит лишнее, или наоборот недостаточно отзывчиво.
Невнятно сделана функция нахождения, стоит как-то выделять найденного юнита, а то когда их много , теряешься, или надо дополнительно выделять его.

Насчет исходников, не поддержу Мэда, т.к. считаю, что автор сам это определяет, и имхо даже такой запрос как-то не айс. Но, если Вы, Sphynx55, вдруг надумаете, то было бы очень интересно изучить, т.к. исходников подобного рода очень мало в открытм доступе, и поскольку мне эта тема интересна, каждый проект позволяет чему-то да научиться, сравнить подходы (я тоже работаю по стратегиям и смежным темам).

Ну и вопрос простой, что мешает сделать готовые спрайты под все команды ? ну пусть они идентичны, места занимают всё равно немного, да и модифицировать потом легко будет.

Последний раз редактировалось phomm, 20.05.2014 в 10:07.
Ответить с цитированием
  #6  
Старый 20.05.2014, 12:10
Sphynx55 Sphynx55 вне форума
Прохожий
 
Регистрация: 15.05.2014
Сообщения: 13
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Если вы тоже занимались подобным, то наверняка поняли как это пожирает время. Я с удовольствием прикрутил бы движок (сейчас вся графика рисуется через канвас ImageList'ом ) , но нужно время, которого у меня нет. Сделать все спрайты - нужно время, и тд, ну вы поняли
По поводу количества юнитов, вы меня недооцениваете . В рамке Obj, параметр o: отражает текущее число объектов. Понятие объект и юнит я разделяю, так как, к примеру, танк состоит из корпуса и башни - из 2ух зависимых объектов. Зачем я так делал не помню, возможно хотел собирать "гибриды", поскольку башню можно прикрутить к чему угодно. На моем стареньком Athlon 630@3.6 подтормаживания начинаются при ~500К объектов, но до ~800К еще терпимо. Таким образом можно рассчитывать на 300К танчегов. Это создает куда более интересные трудности: как таким количеством управлять ? Если простенький ИИ без труда сгоняет всех в кучки, то как быть с человеко-кликером ? Собственно на этих проблемах я и завис.
Ответить с цитированием
  #7  
Старый 22.05.2014, 06:39
phomm phomm вне форума
Новичок
 
Регистрация: 07.10.2013
Адрес: Тюмень
Сообщения: 50
Версия Delphi: 7/2007/XE+/FPC
Репутация: 22
По умолчанию

Времени улетает, да, будь здоров.
Просто я пилил как GDI (winapi+canvas) системы , так и на движках, и при должном подходе работа с графикой может быть абстрагирована настолько, что хоть в конфиге меняй одну строчку и рендер с харда на софт перелючается.
Про спрайты я имел ввиду перекрашеные спрайты вложить в поставку демки, чтобы и разноцветные команды были и минуты на старте не съедать, увеличится размер, но вряд ли критично добавление пары мегов.

Насчёт объектов - после своего поста (и до Вашего) ещё запускал и тогда обратил внимание на параметры в боксе с объектами, особенно когда нажал 4tnks кнопку В итоге да, впечатляет, полагаю есть какие-то хитрые оптимизации в коде работы с объектами и аи, что-то может типа автомата плюс динамические списки, возможно даже бинаризация пространства какая-то. Без классов и циклов проверок клеток за каждого юнита. А вот многопоточки нет (насколько говорит диспетчер), загружает одно ядро на полную при большом колве танков, на многоядерниках вынести аи во второй поток дало бы прирост, думаю. В первом оставить пересчёт всяких координат и т.п. по графике.

Как быть с человеком - а что, обычный подход в стратегиях - "выделить всех кого хочешь и отправить на покорение" не подходит ? Есть ещё всякие "найти незанятый задачей юнит" "общий сбор" и т.п. , думаю, не вам рассказывать
Ответить с цитированием
  #8  
Старый 25.05.2014, 19:22
Sphynx55 Sphynx55 вне форума
Прохожий
 
Регистрация: 15.05.2014
Сообщения: 13
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Получилось собрать простецкую игрульку. Чем-то напоминает BattleCity
Desktop.zip
Ответить с цитированием
  #9  
Старый 26.05.2014, 19:39
Аватар для Admin
Admin Admin вне форума
Администратор
 
Регистрация: 03.10.2005
Адрес: Россия, Москва
Сообщения: 1,533
Версия Delphi: Delphi 7
Репутация: выкл
По умолчанию

Цитата:
Сообщение от Sphynx55
Получилось собрать простецкую игрульку. Чем-то напоминает BattleCity
Вложение 4318
А чего, скриншоты можно выложить в тему, что бы не заморачиваться с исходниками?
Ответить с цитированием
  #10  
Старый 26.05.2014, 21:59
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Цитата:
Сообщение от Admin
А чего, скриншоты можно выложить в тему, что бы не заморачиваться с исходниками?
Бинарники там.

Неслабо так-то оперативки жрет программа.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #11  
Старый 15.01.2015, 15:57
home284 home284 вне форума
Прохожий
 
Регистрация: 15.01.2015
Сообщения: 1
Версия Delphi: Delphi XE2
Репутация: 10
По умолчанию

У меня дурацкий вопрос. Нигде не могу найти информацию про одновременную работу нескольких объектов, например в стратегиях. Каждый танк это отдельный поток? Есть свой класс который отвечает за столкновение объектов (например не больше одного объекта в клетке)?
И может вы подскажите какие-нибудь статьи о принципах построения таких вот игрушек?
В основном интересует как раз несколько юнитов на карте.
Ответить с цитированием
  #12  
Старый 15.01.2015, 21:57
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Можно и одним потоком разруливать.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #13  
Старый 15.01.2015, 22:51
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Цитата:
У меня дурацкий вопрос. Нигде не могу найти информацию про одновременную работу нескольких объектов, например в стратегиях. Каждый танк это отдельный поток? Есть свой класс который отвечает за столкновение объектов (например не больше одного объекта в клетке)?
И может вы подскажите какие-нибудь статьи о принципах построения таких вот игрушек?
В основном интересует как раз несколько юнитов на карте.
Много потоков создадут много проблем, потому что потребуют синхронизации. Самый простой (и, думаю, самый применяемый метод) - сделать список динамических объектов, и каждую итерацию главного цикла игры проходить по списку и обрабатывать все действия.
Есть 2 турели. Обе в массиве. Обрабатываться они будут по очереди. Каждая будет анализировать состояние окружающей среды на предмет наличия врагов в зоне досягаемости, поворачиваться и стрелять. Разумеется, важно не делать все действия сразу, а разбить на атомарные. Грубо говоря, поворот на N градусов будет обработан за N проходов цикла, и в каждый проход будет поворот на 1 градус. Выстрел - тоже не мгновенная смерть: нужно создать "пулю" и добавить ее в список обработки. Пуля в свою очередь будет перемещаться на X метров за каждый проход. Если при обработке пули выяснилось, что пуля столкнулась с объектом - наносим повреждения и удаляем пулю.
Разбиение же на много потоков нагрузит систему и при этом не принесет никаких реальных отличий: если у процессора меньше ядер, чем одновременно запущенных потоков, то все равно они будут обрабатываться по очереди.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 12:18.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter