Не сочтите это сообщение за наглость.Пришла мне весной в голову идея написать логическую игру.Я рассудил так: шашки-это больно сложно для меня, шахматы-тем более, решил написать для начала крестики-нолики с полем 3*3.Погуглив информацию в интернете, решил, что использую алгоритм оценочных функций.Вроде бы написал, но играла она слабо.Я нашел следующий выход:прописать первый ход за компьютер прямо в программе в зависимости от того кто первым ходит.Получилось более менее, теперь с компьютером можно сыграть в основном в ничью.
Я решил не останавливаться на этом и написать что-либо сложнее.Не долго думал я, выбор пал на гомоку, во-первых потому что похожа на крестики-нолики, во-вторых из-за сравнительной легкости в написании программы.Передо мною не стояла задача создать супер-сложный AI, я решил просто попробывать написать что-то такое интересное, а не, например, калькулятор.Снова погуглив, я решил опять писать алгоритм оценочной функции, но тут было все интереснее и сложнее.Основная идея оценочной функции состоит в том, что для любой пустой клетки в 8 направлениях(вверх,вниз,вправо,влево,по диагонали вправо-вверх,вправо-вниз, влево-вверх, влево-вниз) на расстояние 4 клетки от нее считается количество крестиков и ноликов, назначается балл и суммируется баллы.Уделяется внимание группам из 3, 4 подряд идущих крестиков и ноликов, для них назначается повышенный балл, особенно для открытых троек и четверок с обеих сторон.Учитываются и другие ситуации приводящие к построению открытых четверок.
На этапе написания кода периодически отправлял своему брату exe-шники для тестирования и, попутно послушав о недостатках, усложнял оценочную функцию.Сначала у меня ничего не получалось, AI допускал глупые ошибки, но потом начало что-то выходить.
Прошу не судить меня строго, по специальности являюсь инженером-электриком(проектирую электрические сети).Программирование-просто хобби.Да и особо звезд с неба не хватаю в области спортивного программирования.Кроме того написал пятнашки.
В итоге получил следующее: Гомоку. А вот и крестики-нолики: Крестики-нолики.
Привет)
Комп играет неплохо, почти все игры сводит к ничье (в крестики). Сообщение о том, кто ходит первым, кажется излишним. Кнопка "Игра", наверно, лишняя. Иногда после вывода сообщения о результате матча компьюбтер делает еще один ход. Еще иногда "ты победил" выводится 2-3 раза.
Нашлась такая комбинация ходов при первом ходе человека, которая гарантирует победу (5 9 3 7)
А в гомоку я не умею играть :)
Ну и было бы неплохо поделить пост на абзацы, а то сложно воспринимать
Даже у ПК не получается выиграть:( Ненавижу ету игру((
Какую именно из игр имел ввиду?Крестики-нолики или гомоку?
Гомоку — я всегда однокласснику в школе проигрывал=) Сейчас еще попытаюсь с ПК.
Кстати, в крестиках-ноликах новая игра идет на том же поле, что и предыдущая (ничего не стирается) — наверное это какая-то бага)
Там надо нажимать "играть снова", а не "игра"
Да, я недоработал интерфейс игры, остановился на достигнутом.Но учитывая то, что программированием занимаюсь в свободное время, а это 2 часа в день и еще выходные, я считаю получилось нормально.
Автокомментарий: текст был обновлен пользователем rus100 (предыдущая версия, новая версия, сравнить).
Хорошее и короткое введение в программирование ИИ для логических игр есть в первой главе пособия Дьяконова "Анализ данных, обучение по прецедентам, логические игры, системы WEKA, RapidMiner и MatLab".
1-8-7-9 выигрышная стратегия если комп ходит первым.