Создание AI для командных игр спортивной направленности - Проблема - решение. GML и прочее. - Разработка игр на Game Maker (Simple Mode) - Форум Game Maker. Разработка игр.
Здравствуй Гость | Перейти на сайт

Главная | Форум | Регистрация | Войти
gmaker.net ;) [ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 212»
Форум Game Maker. Разработка игр. » Разработка игр на Game Maker (Simple Mode) » Проблема - решение. GML и прочее. » Создание AI для командных игр спортивной направленности (Мои вопросы)
Создание AI для командных игр спортивной направленности
bluebrown Дата: Пятница, 02.07.2010, 16:46 | Сообщение # 1
Разговорчивый
Группа: Проверенные
Сообщений: 104
Статус: Offline
Опять появилась куча свободного времени. Опять уселся за GM, все таки надо в код вникать... smile
Решил начать с наделения кружочков на поле искусственным интеллектом. 2D, вид сверху.

Встал такой вопрос. Есть примерный алгоритм для объекта MAN:

Если дистанция до объекта BALL > 100, то идем в точку х1 такой то и y1 такой то (допускается небольшое рандомное отклонение).
Если дистанция до объекта BALL < 100, то идем к объекту.
Если дистанция до объекта BALL < 1, то WITH_BALL истина.
Если WITH_BALL истина, то идем к x2 такому то и y2 такому то (допускается небольшое рандомное отклонение).
Если координаты x2 и y2 достигнуты (допускается небольшое рандомное отклонение), то цель достигнута.

Как это все офорить в код? smile Например, с дистанцией... И какой командой задавать передвижение объекту MAN, есть же всякие move, step и т.д...
Может кто черновой вариант накидает по быстрому? smile

 
Jeners Дата: Пятница, 02.07.2010, 18:16 | Сообщение # 2
Каждый 5й пост мой
Группа: Проверенные
Сообщений: 1618
Статус: Offline
епт чувак ты граммотно продумываешь работу алгоритма.. но не знаешь как ето реализовать на ГМ???
кури справку (русскую например) применяй в ней поиск wink


Интернет католог строителей
 
bluebrown Дата: Пятница, 02.07.2010, 20:59 | Сообщение # 3
Разговорчивый
Группа: Проверенные
Сообщений: 104
Статус: Offline
Какие алгоритмы у меня должны быть я представляю относительно хорошо, но не знаю как некоторые выразить в коде.
Допустим, я решу проблемы с дистанцией как если дистанция < && > или как там двойная эта фигня решается... Наверное будет работать. Но как перемещение реализовывать? smile Там столько вариантов как задать это перемещение...
 
Ang3L Дата: Пятница, 02.07.2010, 23:09 | Сообщение # 4
Каждый 5й пост мой
Группа: Админы
Сообщений: 2667
Статус: Offline
Quote (bluebrown)
Там столько вариантов как задать это перемещение...

В этом и фишка программирования. Выбираешь наилучший для тебя способ. Тут нет готового варианта, но есть какие-то наработки разных людей.


Blogpost
 
Druce Дата: Суббота, 03.07.2010, 00:15 | Сообщение # 5
Каждый 5й пост мой
Группа: Страж
Сообщений: 1543
Статус: Offline
Quote (bluebrown)
< && >

вот уж чего не люблю и не понимаю. Для меня много роднее and и or. В данном случае можно
Code
if distance>100 {...}
else if distance>1 {...}
else {...}

Ну действия в скобочки сам подставь какие надо.


druce.ucoz.ru|andrewsweekly.livejournal.com|А OneStep тем временем мертв.
 
Jeners Дата: Суббота, 03.07.2010, 11:59 | Сообщение # 6
Каждый 5й пост мой
Группа: Проверенные
Сообщений: 1618
Статус: Offline
Druce, функции distance в GM нету happy


Интернет католог строителей
 
SRes Дата: Суббота, 03.07.2010, 13:35 | Сообщение # 7
Каждый 5й пост мой
Группа: Страж
Сообщений: 2512
Статус: Offline
Он переменную имел ввиду.


Velociped Inc.
 
Druce Дата: Суббота, 03.07.2010, 13:36 | Сообщение # 8
Каждый 5й пост мой
Группа: Страж
Сообщений: 1543
Статус: Offline
я имел в виду задать distance=point_distance(x1,y1,x2,y2), ведь зачем пересчитывать функцию 3 раза?


druce.ucoz.ru|andrewsweekly.livejournal.com|А OneStep тем временем мертв.
 
bluebrown Дата: Суббота, 03.07.2010, 13:50 | Сообщение # 9
Разговорчивый
Группа: Проверенные
Сообщений: 104
Статус: Offline
Попинайте. Набросал так как я это понимаю. Напишите, где можно упросить и какие есть ошибки. В Create объявил переменные with_ball и go_to_ball, вот код Step:

Code
image_angle = direction
if (go_to_ball)    
{
man.speed += .3
if man.speed > 2 then man.speed = 2
}
//
if (distance_to_object(ball) <= 200 and distance_to_object(ball) > 5)  then
{
go_to_ball = true
move_towards_point(ball.x,ball.y,man.speed)
}
//
if distance_to_object(ball) < 1 then
{
with_ball = true
}
//
global.otskok = 9 * man.speed
if distance_to_object(ball) < 1 and with_ball=true
{
       with (ball)
       {     
            direction=man.direction;
            x = man.x + lengthdir_x(global.otskok,man.direction);
            y = man.y + lengthdir_y(global.otskok,man.direction);
       }
}
//
if with_ball = true then    
{
move_towards_point(240,16,man.speed)
}
//

Есть вопрос. Как сделать чтобы поворот у футболистов был плавный в ту или иную сторону, а не как сейчас резкий?



Сообщение отредактировал bluebrown - Суббота, 03.07.2010, 13:51
 
Jeners Дата: Суббота, 03.07.2010, 13:59 | Сообщение # 10
Каждый 5й пост мой
Группа: Проверенные
Сообщений: 1618
Статус: Offline
bluebrown, там есть настройки скорости поворота для функции move_towards_point (если я не ошибаюсь)
почитай справку


Интернет католог строителей
 
bluebrown Дата: Суббота, 03.07.2010, 14:07 | Сообщение # 11
Разговорчивый
Группа: Проверенные
Сообщений: 104
Статус: Offline
Quote (Jeners)
bluebrown, там есть настройки скорости поворота для функции move_towards_point (если я не ошибаюсь)
почитай справку

Извини, я выразился немного не правильно. Так то он передвигается плавно, но например, когда with_ball = true, то он должен двигаться в заданные координаты в противоложную сторону, так вот мне хотелось бы, что бы фишка футболиста в эту сторону плавно разворачивалась, а мне моментально, как сейчас. Вот. smile


Сообщение отредактировал bluebrown - Суббота, 03.07.2010, 14:09
 
Tetrider Дата: Суббота, 03.07.2010, 14:48 | Сообщение # 12
Хрен заткнешь
Группа: Проверенные
Сообщений: 281
Статус: Offline
 
bluebrown Дата: Понедельник, 05.07.2010, 14:42 | Сообщение # 13
Разговорчивый
Группа: Проверенные
Сообщений: 104
Статус: Offline
Quote (Tetrider)
Куда ближе крутиться?


Спасибо, посмотрю, что к чему. smile

Еще вот такой нюанс. Все думаю, как заставить фишки взаимодействовать между собой. В жизни вроде все просто: если рядом с игроком соперник, то смотрим как далеко партнер, есть ли рядом с ним соперник. Если партнер близко и соперника рядом с ним нет, то отдаем передачу. Так вот как сделать эту проверку? Через столкновения? Все равно не представляю... sad
И еще, ведь не всегда надо отдавать передачу, иногда можно попытаться обыграть соперника. В ГМ этот вариант надо пробовать реализовывать через планирование движения?

Добавлено (05.07.2010, 14:42)
---------------------------------------------
Блин, мужики.. А как переменной придать несколько значений? У меня есть боты a1,a2 и b1,b2, так вот я хочу b1 и b2 были какбе под переменной "враги", то есть enemy = b1, b2. Как это записать?



Сообщение отредактировал bluebrown - Понедельник, 05.07.2010, 14:45
 
WertyXBOCT Дата: Понедельник, 05.07.2010, 15:16 | Сообщение # 14
Каждый 5й пост мой
Группа: Страж
Сообщений: 2467
Статус: Offline
enemy = ds_list_create()
ds_list_add(enemy,b1)
ds_list_add(enemy,b2)

Добавлено (05.07.2010, 15:16)
---------------------------------------------
Сколько уже раз пытается одни и те же люди написать игру про футбол :), а я всегда вспоминаю Kunio Kun no Nekketsu Soccer League :). Супер игрушка была



Blog:www.WeslomPo.ru
mailto: i@weslompo.ru
 
Jeners Дата: Понедельник, 05.07.2010, 15:30 | Сообщение # 15
Каждый 5й пост мой
Группа: Проверенные
Сообщений: 1618
Статус: Offline
WertyXBOCT, это еще на денди где пинацо можно было??? меня право больше хоккей их пер ))


Интернет католог строителей
 
bluebrown Дата: Понедельник, 05.07.2010, 17:03 | Сообщение # 16
Разговорчивый
Группа: Проверенные
Сообщений: 104
Статус: Offline
О пасиба)
А тот футбол на денди это просто вестч... навсегда запомнился. Редко даже поигрываю в него.)))
Мне даже сейчас не столько интересно написать футбол как таковой, мне интересно ИИ написать, чебы он тупо рубился в нечто похожее на футбол. smile
А сам я пробую второй раз. tongue Наверное, не последний cheesygrin

Добавлено (05.07.2010, 17:03)
---------------------------------------------
Блин, еще забыл спросить.
Надо бы вот задать глобальную попеременную with_ball. Ну я писал globalvar бла бла бла, но мне бы так, чтобы я мог ее использовать как enemy.with_ball, me.with_ball. Когда такой код начинаю использовать, то пишет, шо фигня... Как быть? Потому что я хочу планировать варианты развитий событий, если свои с мячом, если чужие с мячом и т.д.



Сообщение отредактировал bluebrown - Понедельник, 05.07.2010, 17:04
 
WertyXBOCT Дата: Понедельник, 05.07.2010, 17:28 | Сообщение # 17
Каждый 5й пост мой
Группа: Страж
Сообщений: 2467
Статус: Offline
with_ball = id;
...
src isEnemyBall
{
if ds_list_find_index(myTeam,with_ball)>-1 return 1
return 0;
}


Blog:www.WeslomPo.ru
mailto: i@weslompo.ru
 
bluebrown Дата: Понедельник, 05.07.2010, 18:47 | Сообщение # 18
Разговорчивый
Группа: Проверенные
Сообщений: 104
Статус: Offline
Спасибо. smile Как все сложно, однако cry

Написал в футболисте строчку image_angle = ball.direction, футболист тупо смотрит на 0 градусов. Почему? sad

Разобрался

Code
image_angle = point_direction(x,y,ball.x,ball.y)

Хотя все равно непонятно почему первый вариант не работает...



Сообщение отредактировал bluebrown - Понедельник, 05.07.2010, 19:05
 
Ninja Дата: Понедельник, 05.07.2010, 19:44 | Сообщение # 19
Хоть палкой гони
Группа: Проверенные
Сообщений: 683
Статус: Offline
Quote (bluebrown)
image_angle = ball.direction

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


Oh, my God! You kill Kenny! You bastard!
 
bluebrown Дата: Вторник, 06.07.2010, 11:58 | Сообщение # 20
Разговорчивый
Группа: Проверенные
Сообщений: 104
Статус: Offline
Quote (Ninja)
футболист будет смотреть не на мяч, он будет повернут на тот же угол, под которым летит мяч. если для физики мяча direction не используется, то он всегда равен 0, видимо тут как раз такой случай

Вон оно как.. У меня до физика мяча еще не дошло. smile Мяч пока летает за мышкой, а я за "кроликами смотрю". Пока они у меня научились тусоваться в закрепленной за ними зоной, бегать при надобности за мячом, и если оторвались от мяча возвращаться в зону и снова тусоваться. smile Ваще, там строчек то кот наплакал, но чувствую себя мегаменом. biggrin Спасибо за помощь всем. smile

Добавлено (06.07.2010, 11:58)
---------------------------------------------
У меня новый вопрос. Сейчас, если дистанция до мяча меньше Х, футболисты одной команды начинают гнаться за ним, если кто то догнал, то второй его поддерживает, но... Никто ж не бегает так парой за мячом как у меня, я подумал, что если два футболиста бегут за мячом, то один из них (тот же защитник) должен смотреть если рядом с ним кто-то из его сокомандников (в моем случае один нападающий). Полез в справку, нашел collision_circle(xc,yc,radius,obj,prec,notme), вроде то что мне надо, по-моему, только возник вопрос, что такое prec и notme? В одном примере там было написаны значения true.



Сообщение отредактировал bluebrown - Вторник, 06.07.2010, 11:59
 
Форум Game Maker. Разработка игр. » Разработка игр на Game Maker (Simple Mode) » Проблема - решение. GML и прочее. » Создание AI для командных игр спортивной направленности (Мои вопросы)
Страница 1 из 212»
Поиск:



Сообщество Gmaker.SU 2005-2012
Используются технологии uCoz
Простой вход