| Создание AI для командных игр спортивной направленности |
|
bluebrown
| Дата: Пятница, 02.07.2010, 16:46 | Сообщение # 1 |
Разговорчивый
Группа: Проверенные
Сообщений: 104
Статус: Offline
|
Опять появилась куча свободного времени. Опять уселся за GM, все таки надо в код вникать... Решил начать с наделения кружочков на поле искусственным интеллектом. 2D, вид сверху. Встал такой вопрос. Есть примерный алгоритм для объекта MAN: Если дистанция до объекта BALL > 100, то идем в точку х1 такой то и y1 такой то (допускается небольшое рандомное отклонение). Если дистанция до объекта BALL < 100, то идем к объекту. Если дистанция до объекта BALL < 1, то WITH_BALL истина. Если WITH_BALL истина, то идем к x2 такому то и y2 такому то (допускается небольшое рандомное отклонение). Если координаты x2 и y2 достигнуты (допускается небольшое рандомное отклонение), то цель достигнута. Как это все офорить в код? Например, с дистанцией... И какой командой задавать передвижение объекту MAN, есть же всякие move, step и т.д... Может кто черновой вариант накидает по быстрому?
|
| |
| | |
|
Jeners
| Дата: Пятница, 02.07.2010, 18:16 | Сообщение # 2 |
Каждый 5й пост мой
Группа: Проверенные
Сообщений: 1618
Статус: Offline
|
епт чувак ты граммотно продумываешь работу алгоритма.. но не знаешь как ето реализовать на ГМ??? кури справку (русскую например) применяй в ней поиск
Интернет католог строителей
|
| |
| | |
|
bluebrown
| Дата: Пятница, 02.07.2010, 20:59 | Сообщение # 3 |
Разговорчивый
Группа: Проверенные
Сообщений: 104
Статус: Offline
|
Какие алгоритмы у меня должны быть я представляю относительно хорошо, но не знаю как некоторые выразить в коде. Допустим, я решу проблемы с дистанцией как если дистанция < && > или как там двойная эта фигня решается... Наверное будет работать. Но как перемещение реализовывать?  Там столько вариантов как задать это перемещение...
|
| |
| | |
|
Ang3L
| Дата: Пятница, 02.07.2010, 23:09 | Сообщение # 4 |
Каждый 5й пост мой
Группа: Админы
Сообщений: 2667
Статус: Offline
|
Quote (bluebrown) Там столько вариантов как задать это перемещение... В этом и фишка программирования. Выбираешь наилучший для тебя способ. Тут нет готового варианта, но есть какие-то наработки разных людей.
Blogpost
|
| |
| | |
|
Druce
| Дата: Суббота, 03.07.2010, 00:15 | Сообщение # 5 |
Каждый 5й пост мой
Группа: Страж
Сообщений: 1543
Статус: Offline
|
вот уж чего не люблю и не понимаю. Для меня много роднее 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 нету
Интернет католог строителей
|
| |
| | |
|
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, то он должен двигаться в заданные координаты в противоложную сторону, так вот мне хотелось бы, что бы фишка футболиста в эту сторону плавно разворачивалась, а мне моментально, как сейчас. Вот.
Сообщение отредактировал bluebrown - Суббота, 03.07.2010, 14:09 |
| |
| | |
|
Tetrider
| Дата: Суббота, 03.07.2010, 14:48 | Сообщение # 12 |
Хрен заткнешь
Группа: Проверенные
Сообщений: 281
Статус: Offline
|
|
| |
| | |
|
bluebrown
| Дата: Понедельник, 05.07.2010, 14:42 | Сообщение # 13 |
Разговорчивый
Группа: Проверенные
Сообщений: 104
Статус: Offline
|
Спасибо, посмотрю, что к чему. Еще вот такой нюанс. Все думаю, как заставить фишки взаимодействовать между собой. В жизни вроде все просто: если рядом с игроком соперник, то смотрим как далеко партнер, есть ли рядом с ним соперник. Если партнер близко и соперника рядом с ним нет, то отдаем передачу. Так вот как сделать эту проверку? Через столкновения? Все равно не представляю... И еще, ведь не всегда надо отдавать передачу, иногда можно попытаться обыграть соперника. В ГМ этот вариант надо пробовать реализовывать через планирование движения? Добавлено (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
|
О пасиба) А тот футбол на денди это просто вестч... навсегда запомнился. Редко даже поигрываю в него.))) Мне даже сейчас не столько интересно написать футбол как таковой, мне интересно ИИ написать, чебы он тупо рубился в нечто похожее на футбол. А сам я пробую второй раз.  Наверное, не последний Добавлено (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
|
Спасибо.  Как все сложно, однако Написал в футболисте строчку image_angle = ball.direction, футболист тупо смотрит на 0 градусов. Почему? Разобрался 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, видимо тут как раз такой случай Вон оно как.. У меня до физика мяча еще не дошло.  Мяч пока летает за мышкой, а я за "кроликами смотрю". Пока они у меня научились тусоваться в закрепленной за ними зоной, бегать при надобности за мячом, и если оторвались от мяча возвращаться в зону и снова тусоваться.  Ваще, там строчек то кот наплакал, но чувствую себя мегаменом.  Спасибо за помощь всем. Добавлено (06.07.2010, 11:58) --------------------------------------------- У меня новый вопрос. Сейчас, если дистанция до мяча меньше Х, футболисты одной команды начинают гнаться за ним, если кто то догнал, то второй его поддерживает, но... Никто ж не бегает так парой за мячом как у меня, я подумал, что если два футболиста бегут за мячом, то один из них (тот же защитник) должен смотреть если рядом с ним кто-то из его сокомандников (в моем случае один нападающий). Полез в справку, нашел collision_circle(xc,yc,radius,obj,prec,notme), вроде то что мне надо, по-моему, только возник вопрос, что такое prec и notme? В одном примере там было написаны значения true.
Сообщение отредактировал bluebrown - Вторник, 06.07.2010, 11:59 |
| |
| |
|
|