пятница, 9 ноября 2012 г.

Разработка TDS шутера (Часть 2)



В этом уроке мы будем продолжать разрабатывать нашу TDS игру в стиле достаточно известной игры Counter-Strike 2D. Если в прошлой части мы разрабатывали «основы основ», то теперь мы перейдем к более важным вещам, например к разработке достаточно сильных противников, а иначе говоря – ботов.

Health бар
Итак, для начала нам нужно подготовить второстепенные в этом уроке объекты и полностью оптимизировать их. Конкретно это касается пуль производимых уже ботами и небольшой изюминки – Health бара для игрока. Начнем, пожалуй, с health бара. Создайте объектhealth_bar и введите в событие Step скрипт:

x:=player.x-20
y:=player.y-20

Теперь в событие Draw скиньте блок действия Draw Health Bar() из вкладки score. В появившемся окне установите следующие обязательные значения:

x1 = x
y1 = y
x2 = x+50
y2 = y-5

Объект health_bar разместите в любой точке комнаты. Теперь за игроком будет мягко плыть показатель жизней.

Пули от enemy
Пули, выпускаемые ботом, будут иметь похожие свойства с пулями игрока. Поэтому щелкаем правой кнопкой мыши по объекту obj_bullet и нажимаем Дублировать(duplicate). Новый объект назовите так: obj_enemy_bullet. При желании вы можете немного доработать эти боеприпасы, например, установив функцию уничтожения при соприкосновении с игроком или стеной.


Доработка игрока
Когда появляются враги, появляется и возможность проиграть им. Чтобы это было не так легко давайте сделаем систему жизней для игрока (Завершение Health Бара). Для этого мы откроем объект player и для него добавим событие Столкновение с obj_enemy_bullet. В этом событии мы уменьшим жизни игрока следующим скриптом:

health-=1
 
В событие Create введем скрипт на 100 hp:


health=100
   
Чтобы игрок не был бессмертным, как какой-нибудь Кощей, нужно добавить действия для проигрыша. Для этого в событие Step, в самый конец перенесите действие TestExpression() с следующим условием:

health<=0

Следующим после данного действия к данному событию перенесите Restart Game().

Благодаря таким манипуляциям игрок сможет умереть, а точней он просто перезагрузит игру, если его пристрелят. У вас может возникнуть вопрос: «А почему нельзя просто удалить игрока, когда он умрет?». Да, конечно игрока можно удалить, ведь пока-что ботов нет. Но далее мы создадим противников и искусственный интеллект соответственно. Вся проблема в том, что планируемый «интеллект» будет использовать координаты игрока, а если игрок удалиться, то произойдет ошибка, ведь координаты исчезнут тоже.

Переходим к ботам
Ну и, в конце концов, мы дошли до того, к чему стремились изначально в этой статье, а именно к созданию ботов.
Итак, создайте объект enemy и в событие Step перенесите действие Set Variable() со значением:
Variable=image_angle и value=direction.

Перенесите еще одно такое же действие, но уже с другими параметрами:
Variable=shot_e и value= irandom(100)

Теперь перенесем еще и Test Expression() с условием:
(distance_to_object(player)<500) and  (distance_to_object(player)>100)

А ниже Test Expression воткнем действие Step Avoiding() со значениями:
x= player.x;
y= player.y;
speed=3

Все это ограничим снизу блоком ELSE, который очень напоминает Test Expression, только на нем написано ELSE 

Ниже вставим знакомый Set Variable со значениями:
Variable=direction и value=point_direction(x,y,player.x,player.y)

Ну а еще ниже скинем последнее условное действие Test Expression(если кто не запомнил то  вот оно: ):
(shot_e<5) and (distance_to_object(player)<350)

Ну и последний блок на сегодня! Переносим действие Create Moving со значениями:
Object=obj_enemy_bullet
X=x
Y=y
Speed=6
Direction=direction

 
Можете похлопать себе! Вы только что сделали собственного бота, который может преследовать игрока и стрелять в него. Правда, в дальнейшем не помешает установить жизни для них. Хотя я думаю, вы извлекли все что, вам требовалось и уже самостоятельно бегло сделаете необходимое. Удачи!
 

1 комментарий: