RS Game Maker Community
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

 
Расширенный поиск
  Главная  Форум   Вики Блоги FAQ Игры Статьи Примеры Войти Регистрация  
Вики
Все желающие приглашаются редактировать вики. Можете писать о своих (или чужих) играх, размещать туториалы, постить статьи - главное навесить категорию.
Страниц: 1   Вниз
  Печать  
Проблемы с ИИ.
0 Пользователей и 1 Гость смотрят эту тему.
CJIADKUU 6Y6AJIEX
Активный участник
**

Репутация: 15
Offline Offline

Сообщений: 242


СОК

16 Января 2011 в 13:50
Возникла новая проблема с кодом. Делаю ИИ бота.

В степе бота:

if !collision_line(x,y,o_player.x,o_player.y,o_wall,0,0) {target_x=o_player.x; target_y=o_player.y} else {target_x=noone; target_y=noone}
mp_potential_step (target_x,target_y,3,1)

В его создании:

target_x=noone
target_y=noone

По идее, когда бот увидел игрока, он должен идти к нему. Если игрок пропадает из виду, то бот должен идти в ту позицию, где в последний раз видел игрока. Как-то так... :D

 
Tkachov
Завсегдатай
****

Репутация: 130
Offline Offline

Награды:
За перевод справки Game Maker 8Призер конкурса ''Маляр Ниндзя''
Сообщений: 665


Ответ № 1 16 Января 2011 в 14:05
Насколько мне известно, collision_ возвращают id объекта, если пересекаются с ним. Так что проверка должна быть типа <=100000 или просто <0  :)

По идее, когда бот увидел игрока, он должен идти к нему. Если игрок пропадает из виду, то бот должен идти в ту позицию, где в последний раз видел игрока. Как-то так... :D
А ещё, мне кажется, что вообще не нужно всё после else, т.к. будет не так, как ты хочешь - если бот перестанет видеть игрока, то он обнулит переменные и не сможет идти туда, где последний раз его видел.
CJIADKUU 6Y6AJIEX
Активный участник
**

Репутация: 15
Offline Offline

Сообщений: 242


СОК

Ответ № 2 16 Января 2011 в 14:09
А можно попроссче?  :-\


Как бэ так?

...else {target_x=-1; target_y=-1}

Если так, то бот поползёт в левый верхний угол...

Tkachov
Завсегдатай
****

Репутация: 130
Offline Offline

Награды:
За перевод справки Game Maker 8Призер конкурса ''Маляр Ниндзя''
Сообщений: 665


Ответ № 3 16 Января 2011 в 14:12
if(collision_line(x,y,o_player.x,o_player.y,o_wall,0,0)<0){target_x=o_player.x;target_y=o_player.y};
mp_potential_step(target_x,target_y,3,1);
//если тебе и это непонятно, то я вообще хз как тебе объяснить  :crazy:
Йакуд
Частый посетитель
***

Репутация: 16
Offline Offline

Сообщений: 295

Ответ № 4 16 Января 2011 в 14:14
if !collision_line(x,y,o_player.x,o_player.y,o_wall,0,0) {target_x=o_player.x; target_y=o_player.y}
mp_potential_step (target_x,target_y,3,1)

По сути, вот так вот правильно будет...

Большинство хороших программистов делают свою работу не потому, что ожидают оплаты или признания, а потому что получают удовольствие от программирования.
— Linus Torvalds
CJIADKUU 6Y6AJIEX
Активный участник
**

Репутация: 15
Offline Offline

Сообщений: 242


СОК

Ответ № 5 16 Января 2011 в 14:20
Как бэ теперь мне всё ясно.  :) Но проблема не решена...

Йакуд
Частый посетитель
***

Репутация: 16
Offline Offline

Сообщений: 295

Ответ № 6 16 Января 2011 в 18:05
CJIADKUU 6Y6AJIEX, на, держи.. Как-то так)
http://rghost.ru/3959624

Большинство хороших программистов делают свою работу не потому, что ожидают оплаты или признания, а потому что получают удовольствие от программирования.
— Linus Torvalds
Lagevae
Норм
Старожил
******

Репутация: 194
Offline Offline

Награды:
За перевод справки Game Maker 8Легенда сайта
Сообщений: 2 703

Ответ № 7 16 Января 2011 в 20:33
Друзья.
Условие, по крайней мере в GM, верно если неотрицательно и неравно нулю.
Таким образом:

a=100;
if(a){show_message('Всё будет работать.');}
a=-100; //или a=0;
if(!a){show_message('Тут тоже.');}
;)

therein lies the beauty
ZitRo
GML/C/C++/C#/html/js/php
Завсегдатай
****

Репутация: 95
Offline Offline

Сообщений: 623


Ответ № 8 16 Января 2011 в 20:52
CJIADKUU 6Y6AJIEX, мне кажется вот это тебе в самый раз поможет. Там и поиск пути (причем беспроигрышный), и зачаточная система боя. + Офигенные спрайты со старкрафта :)
deathsoul
дезсоул
Ветеран форума
*****

Репутация: 548
Offline Offline

Награды:
Легенда сайта
Сообщений: 1 853


Ответ № 9 17 Января 2011 в 06:45
Условие, по крайней мере в GM, верно если неотрицательно и неравно нулю. ...
Точнее, условие верно если оно больше или равно 0.5, по крайней мере, начиная с GM 8.
Lagevae
Норм
Старожил
******

Репутация: 194
Offline Offline

Награды:
За перевод справки Game Maker 8Легенда сайта
Сообщений: 2 703

Ответ № 10 17 Января 2011 в 15:57
Ну видимо округляет. Спасибо, я не знал. O0
Только мне интересно, кто будет использовать дробные условия. :crazy:
Последнее редактирование: 17 Января 2011 в 16:03 от Lagevae

therein lies the beauty
deathsoul
дезсоул
Ветеран форума
*****

Репутация: 548
Offline Offline

Награды:
Легенда сайта
Сообщений: 1 853


Ответ № 11 17 Января 2011 в 17:38
Смысл в значении переменной. Вместо if a >= 0.5 можно просто писать if a.
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

RSGMC (gmakers.ru) © 2007—2018
Счётчик–@Mail.ru