2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 C++ Вопрос больше логический, нужен совет по струтуре игры.
Сообщение14.06.2013, 20:31 


01/10/12
119
ННГУ
Представьте себе такую игру: несколько, для краткости, так сказать, юнитов. Есть игровое поле. Каждый юнит управляется отдельной программой, написанной игроком. Есть 9 вариантов поведения юнита: 4 направления движения, 4 направления "выпускания" атакующего снаряда, и вариант стояния на месте. Есть следующие фазы игры: шаг юнита, проверка всех действующих снарядов на попадание в юнитов, шаг снарядов (т.е. перемещение на следующую клетку, в соответствии с направлением движения снаряда). Я никак не могу решить, какой из "тактов" игрового процесса выбрать в качестве оптимального:
1) предположим в игре два юнита, алгоритм такой:
о- юниту доставляется информация о положении дел на поле,, ну понятно в общем
о- юнит делает ход (одно из 9-ти вариантов выше, в случае решения об атаке, снаряд появляется в клетке,
смежной с юнитом, в соответствии с направлением, это ясно)
о- проверка попадания снарядов (на случай, если юнит наступил на клетку со снарядом)
о- движение снарядов в их следующие клетки
о- снова проверка снарядов, на случай попадания их в игроков

плюсы данного алгоритма:
+ игрок не может наступить в клетку, в которую пустил снаряд в предыдущем ходу, да и вообще не может
попасть на свои снаряды
минусы:
- со стороны программы юнита приходится в качестве клеток, нежелательных к ходу принимать не только клетку
с действующим снарядом, но и учитывать, что после него будет n-1 движений снаряда, после хода
остальных игроков, т.е. усложнение алгоритмов поведения юнитов, дополнительная головная боль для игрока, да
и к тому же, с какой-то стороны, нелогичность в плане разницы между количеством ходов отдельного юнита
и снарядов на поле, ну вы поняли

2) вторая версия:
о- всем игрокам доставляется одинаковая информация о положении дел на поле, каждый принимает решение,
которые мы записываем в массив
о- осуществляем ход каждого юнита
о- проверяем попадание снарядов в юнитов
о- делаем ход всех снарядов
о- снова проверяем снаряды на попадание

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

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

 Профиль  
                  
 
 Re: C++ Вопрос больше логический, нужен совет по струтуре игры.
Сообщение14.06.2013, 20:36 
Заслуженный участник
Аватара пользователя


06/10/08
6422
ИМХО, второй вариант интереснее и для игрока, и для наблюдателя.
TamaGOch в сообщении #736745 писал(а):
- игрок может наступить на пущенный им в прошлом ходу снаряд (хотя и можно кинуть эту проблему на плечи
игроку, мол, не стоит наступать туда, куда стреляешь)
Эту проблему можно решить так: юниты и снаряды ходят одновременно, юнит умирает, если он пошел навстречу снаряду или если в конце хода они оказались в одной и той же клетке

 Профиль  
                  
 
 Re: C++ Вопрос больше логический, нужен совет по струтуре игры.
Сообщение14.06.2013, 20:49 
Аватара пользователя


31/10/08
1244
TamaGOch в сообщении #736745 писал(а):
в общем я всеми руками за второй метод, однако не могу придумать решения проблемы наступания на собственные же снаряды, поэтому решил обратиться за помощью, ну или просто послушать здравые мысли, заранее благодарю.

Порождать снаряд на клетку в перёд(+1 по направлению). Тогда его догнать будет нельзя.

Я бы на 2 варианте остановился. А то в первом варианте всегда будет побеждать первый игрок, что ни честно. А во втором и ничья возможна.

 Профиль  
                  
 
 Re: C++ Вопрос больше логический, нужен совет по струтуре игры.
Сообщение14.06.2013, 20:49 


01/10/12
119
ННГУ
Xaositect,вы правы, в принципе тоже вариант, правда ради него надо будет пожертвовать таким игровым моментом: если ход на снаряд, идущий перпендикулярно движению юнита, повреждения не происходит, снаряд продолжает движение. Думаю в скором времени оформить интерфейс для программы и там графически подогнать, что в момент перемещения юнита снаряд находится на промежуточном месте между клетками
Изображение

 Профиль  
                  
 
 Re: C++ Вопрос больше логический, нужен совет по струтуре игры.
Сообщение14.06.2013, 20:57 
Заслуженный участник


27/04/09
28128
Ещё можно от момента порождения снаряда до следующего хода хранить его родителя, чтобы он не мог ему навредить, а потом очищать это поле.

 Профиль  
                  
 
 Re: C++ Вопрос больше логический, нужен совет по струтуре игры.
Сообщение14.06.2013, 20:58 


01/10/12
119
ННГУ
Pavia, ну да, я пытался это написать в пункте "снаряд появляется в клетке, смежной с юнитом, в соответствии с направлением" =))
во втором варианте так же присутствует элемент приоритетности, типа кто успел встать на клетку, тот её заблокировал для соперников, поэтому фактор порядка вызова программ игроков тоже присутствует, правда это компенсируется тем, что если уж буду проводить "битвы алгоритмов", то необходимо будет проводить несколько состязаний, в идеале n! , где n-количество игроков, вот это точно честно))

-- 14.06.2013, 21:01 --

arseniiv тоже хорошая идея, но я решил идти в направлении наибольшей простоты, чтобы и игрокам минимум информации раздавать, и игровой процесс доступно изложить

-- 14.06.2013, 21:02 --

Xaositect, Pavia, arseniiv, большое спасибо! Пойду дальше делать))

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group