Помощь - Поиск - Пользователи - Календарь
Полная версия: Собери 4!
Форум «Всё о Паскале» > Pascal, Object Pascal > Написание игр
Game-lord
Делаю игру(ну точнее собрался делать) под названием "собери 4!". Это довольно популярная игра, но если вы ещё её не вспомнили, то вот скрин:
Изображение
Проблема в том что у меня нет идей как сделать исскуственный интелект Т_Т Мне очень нужна ваша помощь! Не реализация, а просто идеи. Итак вопрос: по какому принципу должен работать искусственный интелект?
Заранее всем спасибо за ответы!
Michael_Rybak
Во-первых, правила знают совсем не все, ты бы написал или линку нашел/выложил.

Во-вторых, хочешь я пороюсь и найду прогу с ИИ - со старого диска с головоломками? (не вместо твоей, просто может тебе посмотреть интересно).

В-третьих, по теме. На каждом шаге - не больше 7 возможных ходов. Получается, можно перебирать на ближайшие 8-10 ходов спокойно (включая ходы соперника). Первое и главное, что тебе нужно сделать - это придумать оценочную функцию, т.е. функцию, которая по заданной позиции определяет, насколько она хорошая. И потом в переборе выбирать по некоторому критерию ход, который в будущем должен привести к наилучшей позиции (о том, как этот выбор делать - поговорим потом).

Итак, начнем с этого: придумай оценочную функцию, т.е. функцию, которая получает на вход поле, и выдает число, которое тем больше, чем благоприятнее позиция для игрока. Какие идеи/предложения?

P.S. А тебе это зачем?
Game-lord
О правилах. Как вы видите на скрине, там есть синия пластинка с дырочками и сверху у неё сплошное отверстие куда можно просовывать шарики. Правила: каждый по очереди кидает шарик сверху и победит тот у кого в ряд выстроится 4 шарика.

Цитата
придумай оценочную функцию

Ну вот в этом и проблема sad.gif Нет идей вообще так что пришёл к знатокам за советом.

Цитата
А тебе это зачем?

Просто мне эту игру жутко хочеться сделать, а искусственный интелект я можно сказать никогда не делал(специально выбирал игры где он не нужен и писал их smile.gif )...щас решил побороть фобию и сделать свою первую игру с искусственным интеллектом.
Michael_Rybak
Уточню на всякий случай, что у каждого игрока шарики своего цвета.


Ну ок, давай подумаем вместе про оценочную функцию.

1. В случаях, когда я уже выиграл, f = +∞
2. Когда проиграл - f = -∞
3. Если у меня три в ряд и есть куда поставить четвертую, это очень хорошо smile.gif
4. Если у меня три в ряд и с обоих концов можно поставить четвертую, я выиграю следующим ходом, и f = +∞
4. За каждую двойку фишек моего цвета, стоящих рядом, которые можно продолжить до четверки, увеличиваем значение функции.

Эти вещи - очевидны, и следуют прямо из правил. Если хочешь, попробуй дополнить их своими догадками, потом сможешь сравнить, насколько они оказались полезными. Хотя, даже такой примитивный набор оценок уже даст очень сильный ИИ для такой игры (с таким небольшим деревом).

Вообще, как для первой игры с ИИ, это довольной сложный вариант; если ты вообще никогда не писал рекурсивные переборы, лучше для начала хотя бы напиши вывод всех перестановок первых n натуральных чисел.

Хотя можно и без этого - тебе решать.

Итак, пробуй. Для начала напиши функцию, которая получает на вход позицию, и возвращает значение f.
Game-lord
Тоесть как я понял мне нужно семь переменных в которых будет значение на сколько благоприятен ход в определённое место? Хм да всё выглядит логичным...странно что я раньше не додумался...или я всё таки не так понял?
Michael_Rybak
Не совсем так.

Сразу сказать, какой из семи ходов более логичен - не получится. Нужно будет посмотреть вглубь: "допустим, я хожу так; тогда, если он сюда, то я сюда, а потом если он сюда, то я сюда", и вот уже в глубине рассуждений оцениваем, какая позиция лучше, и выбираем в результате тот ход, при котором мы с большей вероятностью придем в хорошую позицию.

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

Поэтому сейчас тебе нужна функция, которая на вход получает массив 6х7, а также номер игрока, делающего следующий ход. Эта функция должна возвращать число тем большее, чем лучше позиция (см. выше 5 правил).
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.