Представьте себе такую игру: несколько, для краткости, так сказать, юнитов. Есть игровое поле. Каждый юнит управляется отдельной программой, написанной игроком. Есть 9 вариантов поведения юнита: 4 направления движения, 4 направления "выпускания" атакующего снаряда, и вариант стояния на месте. Есть следующие фазы игры: шаг юнита, проверка всех действующих снарядов на попадание в юнитов, шаг снарядов (т.е. перемещение на следующую клетку, в соответствии с направлением движения снаряда). Я никак не могу решить, какой из "тактов" игрового процесса выбрать в качестве оптимального: 1) предположим в игре два юнита, алгоритм такой: о- юниту доставляется информация о положении дел на поле,, ну понятно в общем о- юнит делает ход (одно из 9-ти вариантов выше, в случае решения об атаке, снаряд появляется в клетке, смежной с юнитом, в соответствии с направлением, это ясно) о- проверка попадания снарядов (на случай, если юнит наступил на клетку со снарядом) о- движение снарядов в их следующие клетки о- снова проверка снарядов, на случай попадания их в игроков
плюсы данного алгоритма: + игрок не может наступить в клетку, в которую пустил снаряд в предыдущем ходу, да и вообще не может попасть на свои снаряды минусы: - со стороны программы юнита приходится в качестве клеток, нежелательных к ходу принимать не только клетку с действующим снарядом, но и учитывать, что после него будет n-1 движений снаряда, после хода остальных игроков, т.е. усложнение алгоритмов поведения юнитов, дополнительная головная боль для игрока, да и к тому же, с какой-то стороны, нелогичность в плане разницы между количеством ходов отдельного юнита и снарядов на поле, ну вы поняли
2) вторая версия: о- всем игрокам доставляется одинаковая информация о положении дел на поле, каждый принимает решение, которые мы записываем в массив о- осуществляем ход каждого юнита о- проверяем попадание снарядов в юнитов о- делаем ход всех снарядов о- снова проверяем снаряды на попадание
плюсы: + работа игрока над алгоритмом юнита становится не столько нудной, сколько чуть более интересной, т.к. тут все игроки ходят одновременно и кто его знает, что будет потом, + игроку не надо просчитывать, что будет с его юнитом спустя все ходы соперников и где будут находится летящие в разные стороны снаряды + присутствует хоть что-то похожее на риал-тайм минусов побольше чем в первом: - игрок может наступить на пущенный им в прошлом ходу снаряд (хотя и можно кинуть эту проблему на плечи игроку, мол, не стоит наступать туда, куда стреляешь) - мне кажется, что наблюдателю будет сложно усмотреть за всеми юнитами сразу, поправьте, если не прав - а этот минус скорее не минус, а временный вопрос о том, что необходимо будет ввести в игру понятие перезарядки, т.е. количество ходов, через которое можно совершить следующий выстрел, думаю это оправдано
в общем я всеми руками за второй метод, однако не могу придумать решения проблемы наступания на собственные же снаряды, поэтому решил обратиться за помощью, ну или просто послушать здравые мысли, заранее благодарю.
|