Воскресенье, 05.05.2024, 19:46

World My Games

Меню сайта
Каталог файлов
Game Maker [7]
Битва за Олейрент: Первая война [2]
Вселенная Олейрент [1]
Терминатор [3]
-=Конструктор=-
-=Игроделу=-
-=Разное=-
  • Игры
    • Action
    • RPG / РПГ
    • Квесты
    • Симуляторы
    • Adventure
    • MMORPG
    • Shooter
    • Аддоны
    • Аркады
    • Браузерные игры
    • Гонки
    • Квест
    • Симуляторы
    • Спортивные игры
  • Софт
Наш опрос
Какой ближе вам, жанр игр?
Всего ответов: 85
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Форма входа
Вселенная Олейрент
Первая война
  • Герои
    • Силы зла
    • Силы добра
  • Воины
    • Силы добра
    • Силы зла
  • Постройки
    • Сила добра
    • Силы зла
  • Скриншоты
  • Скачать
-=Терминатор=-
Block title
Block content
Главная » Статьи » Game Maker

Простой AI
Шаг за шагом делаем простой AI противника. 

Делаем 2 спрайта. 

Спрайт противника делаем из 8 (можно другое количаство) картинок повёрнутых против часовой стрелки на 360 градусов. Делаем 2 обьекта Игрок (Igrok), Противник (Protivnik). 

Идём в обьект противника, для начала делаем так чтобы картинка менялась в зависимости от направления движения обьекта. 
В событии шага (step) кладём скрипт, там прописываем: 

image_single=direction*image_number/360 

Дальше нам надо что бы обьект двигался, в событии создания (create) кладём красную кнопу (start mooving in directions), выбираем все направления, ставим скорость 3. 
Дальше нам надо чтобы направление через какой-то промежуток времени менялось. Для этого в событии создания обьекта кладём Часы - Alarm0, интервал 70. 
В событии Alarm0 кладём нашу кладём красную кнопу (start mooving in directions), выбираем все направления, ставим скорость 3. Добавляем ещё часы Часы - Alarm0, интервал 70. У нас получился бесконечный цикл - через 70 чагов противник будет выбирать случайное направление. Если 8 стандартных направлений мало, тогда нашу красную кнопу заменяем на скрипт в котором прописываем что-то типа: 

direction=random(360) 

Делаем комнату, ставим противника, запускаем, смотрим. 

Дальше, нам наверняка не нравиться что противник иногда исчезает в неизвестных далях за краем холста, предлагаю сделать так чтобы он появлялся из за противоположного края холста. Ставим событие Intersect bounary, в нём ставим скрипт в котором прописываем: 

if (x<0) {x=room_width} 
if (x>room_width) {x=0} 

if (y<0) {y=room_height} 
if (y>room_height) {y=0} 

Надеюсь с кодом всё понятно. 

Сделаем так, чтобы при попадании снаряда игрока, противник начинал охотиться за игроком. 
Делаем спрайт снаряда (или пули), создаеём обьект снаряда. 
В событии создания противника добавляем скрипт, в котором задаём значение переменной, благодаря которой будет определяться поведение противника: 

global.battle=false 

если значение false значит мир, если true, значит война. 

Делаем спрайт пули, создаем обьект Pyla. 

Теперь настало время немного заняться игроком. 
Движение будет осуществляться с помощью стрелок, выстрел с помощью левой кнопы мыши. 
В обьекте игрока ставим 4 события нажатия стрелок клавы, в каждой ставим красную кнопу задания движения, с соответствующим направлением и скоростью. Для прикола задаём обьекту трение, кидаем в событие создания иконку трения (set the friction) со значением 0.1. 
Выстрел, он будет производиться при нажатии левой кнопки в произвольном месте экрана, пуля будет лететь в направлении от обьекта игрока к месту где была нажата мышь. 
Один из способов "поймать" клик в произвольном месте экрана состоит в создании невидимого обьекта который постоянно следует за мышью. Итак делаем спрайт, ничего на нём не рисуем, убираем у него галку прозрачности (transparent), ставим значения origin 16/16. Создаём невидимый обьект (Nevid) с этим спрайтом, отключаем галку Visible, кидаем скрипт в событие шага (step), там прописываем: 

x=mouse_x 
y=mouse_y 

Теперь делаем собственно создание пули. 
Ставим в событие Left Pressed нашего невидимки скрипт, там прописываем: 

igr_pula=instance_create(Igrok.x,Igrok.y,Pyla) 
igr_pula.speed=5 
igr_pula.direction=point_direction(Igrok.x,Igrok.y,mouse_x,mouse_y) 

Не забываем расположить этот обьект в комнате. 
Запускаем, смотрим. 

В обьекте Pyla в событии Collision event с противником, ставим сначала событие уничтожения обьекта, затем скрипт, в котором пишем: 

global.battle=true //(это обьявление войны) 

Ставим также событие Outside Room, в нём также уничтожаем обьект. 

Теперь собственно сделаем поведение нашего AI противника в состоянии войны. 
Он должен преследовать игрока и производить выстрел по ходу движения. 
Через определённый промежуток времени (допустим 1-2 секунды) противник будет менять своё направление в сторону игрока. 
Прежде всего сделаем для него пулю (PylaAI), по примеру пули игрока делаем уничтожение пули при столкновении с игроком и при выходе за пределы комнаты. 

Теперь идём в обькт противника, в событии создания добавляем таймер Alarm1 через 40 шагов. 
В событии этого таймера (Alarm1) ставим скрипт в котором прописываем: 

if(global.battle==true) 
  { 
  direction=round (point_direction (x,y,Igrok.x,Igrok.y) /45) *45 
  pr_pula=instance_create (x,y,PylaAI) 
  pr_pula.speed=5 
  pr_pula.direction=direction 
  } 

Тут всё просто за исключением строки: 
direction=round(point_direction (x,y,Igrok.x,Igrok.y) /45) *45 
В ней мы определяем направление движения, основа строки
point_direction (x,y,Igrok.x,Igrok.y), которая определяет точное направление от привника к игроку, но сложность в том, что у нас противник движеться только в 8 направлениях, если мы определили точное направление 190 градусов, двигаться надо в направлении 180 градусов. Формула такая - (ближайшее целое число от (направление/(360/количество направлений))) * 360/количество направлений. 
или 
ближайшее целое число от (направление/(360/8))) * 45. 
или 
round (point_direction (x,y,Igrok.x,Igrok.y) /45) *45
Категория: Game Maker | Добавил: Don_Alexey (19.06.2010)
Просмотров: 2312 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]