Крестики нолики 10х10
Когда то я делал такую логику для программируемого калькулятора. Там памяти мало будет (105 шагов, один шаг это присваивание, умножение, if), так что сильно не разбежаться.
Вначале оценим, сколько возможно вариантов вообще. Логика подсказывает, что первый может походить 9 вариантами, второй 8 и так далее, что дает 9! = 362880.
Но чуточку поразмыслив, понятно, что при первом ходе возможно 3 варианта, все остальное - зеркально. Да и не все варианты со стороны компьютера нам нужны (зачем нам хранить проигрышные варианты?). Поэтому, если начинает человек, то у него 3 варианта, у компа - 1 (мы заведомо знаем, куда пойдем), дальше у пользователя 7 вариантов и пять. 37 5 = 105 вариантов - это уже очень немного. У меня получалось всего около 200-250 возможных вариантов.То есть, всю логику можно впихнуть в граф ходов. Первым делом занумеруем правильно поле
При таком подходе очень легко обрабатывать зеркальные варианты. То есть, если пользователь походил первый и начал с клетки 5, то мы просто мысленно разворачиваем поле и считаем, что он походил с клетки 1. Первый ход пользователя может быть только с клеток 0 1 или 2. Компьютеру можно начинать игру всегда с одной и той же клетки (если правильно помню свои выкладки, то начиная с центральной клетки и делать правильные хода, то можно либо выиграть, либо свести к ничье).
Теперь осталось сделать граф ходов. Это делается на листике бумаги либо просчитывается программно.
Сами раскладки предлагаю хранить в виде 9 символьных строк + номер клетки для хода.
OO.XX. это просто построчная запись
А можно использовать граф. Узлами будут номера клеток противника + номер ответа. буквой w я обозначил конец игры. * - где мне лень писать далее. Вариант 0 - 2 - я расписал полностью и как видно он выигрышный при любых последующих ходах. (C - computer - компьютер, U - User - пользователь).
Этот алгоритм очень легко кодируется.
Для того, что бы хода компьютера не выглядели одинаково, в тех случаях, когда возможны различные хода, можно рандомом выбирать.