/// /// Исходный код текстовой онлайн игры "Х-О" скачан с сайта https://apero.ru/ /// Пройти онлайн или скачать последнюю версию этой игры можно по адресу: https://apero.ru/Текстовые-игры/Х-О /// Авторы: darkcrown /// Версия: от 2020-09-16 07:25:45 /// \(дата=(1;2749581;3749581;4329561;59;6327541;7329561;8743521;9327541)) //Инструкции для бота - как отвечать на ходы игрока //по порядковым номерам : в зависимости от ячейки, куда был сделан первый ход //если последняя цифра 1 -это означает что бот выиграл //если последняя цифра 5 -это значит получилась ничья //программа не использует проверки на совпадение в линию - ей это не нужно \(ддата=(1;592873645;5937481;594637825;9;596473285;5973261;598237465)) //немного другие инструкции для бота, если игрок поставил О в центр на первом ходу \(символ="_") //символ, отображающийся на пустых ячейках. Можно поставить все что угодно \новая //сброс поля и начало новой игры \(б=0) \ЦИКЛ(б<9) \(б=б+1) \(а\(б)=символ) //заполняем а1-а9 символами пустых ячеек \(а1="Х")\(ход=1)\(эндинг=0)\(центр=0) //ставим в первую ячейку Х - это первый ход компьютера //эндинг-переменная, хранящая код окончания игры 0-игра идет,1-победа бота,2-ничья \поле //рисуем игровое поле таблицей \(АПЕРО.блок.выравнивание текста="по центру") //выравниваем по центру, чтобы визуально было комфортно [tab=1] //открываем таблицу [td=30][b]\(ходить(1),\(а1))[/b][/td] [td=30][b]\(ходить(2),\(а2))[/b][/td] [td=30][b]\(ходить(3),\(а3))[/b][/td] //рисуем 3 ячейки, в которых находятся кнопки //текст- содержимое ячейки [/tab] //закрываем таблицу чтобы отрисовывать новый ряд ячеек //повторяем еще 2 раза [tab=1] [td=30][b]\(ходить(4),\(а4))[/b][/td] [td=30][b]\(ходить(5),\(а5))[/b][/td] [td=30][b]\(ходить(6),\(а6))[/b][/td] [/tab] [tab=1] [td=30][b]\(ходить(7),\(а7))[/b][/td] [td=30][b]\(ходить(8),\(а8))[/b][/td] [td=30][b]\(ходить(9),\(а9))[/b][/td] [/tab] \ЕСЛИ(эндинг=1) \ТО Вы проиграли \(новая,Рестарт) //давать возможность переиграть, если переменная не равна нулю. Не выводится рестарт, пока эндинг=0 \ЕСЛИ(эндинг=2) \ТО Ничья \(новая,Рестарт) \СТОП //останавливаем вывод \ходить(что) //локация нажатия кнопки //что - код ячейки, в которую сходил игрок(1-9) \ЕСЛИ(эндинг>0) \ТО \СТОП(поле) //не давать ходить, если эндинг не равен нулю, то есть игра окончена уже (ничья или проигрыш) \ЕСЛИ(а\(что)<>символ) \ТО \СТОП(поле) //не давать писать в ячейку, если в ней уже стоит Х или О. Только если символ пустой ячейки, указаный в начале программы \(а\(что)="О") //ставим в выбраную ячейку символ О \ЕСЛИ(ход=1) \ТО \(лог=дата(что)) //зменяем лог - переменная инструкций бота, если ход первый, в зависимости от выбраной ячейки //а иначе лог будет переписываться каждый раз //если О ставят в центр то лог будет равен 59, он короткий потому что не нужен, для хода в центр есть инструкции из массива ДДАТА, а 59 - это инструкция боту сходить в 9 если сходили в 5 \ЕСЛИ(лог=59 И ход=2) \ТО \(центр=1) \(лог=ддата(что)) //Если поставили первым ходом в центр, то нужно переписать лог из массива ДДАТА : он как раз предназначен для ходов в центр, они неоднозначны и не приведут к выигрышу (если игрок не сделает ошибку конечно) //так же переменная центр становится = 1, она нужна всего лишь для того, чтобы бот, считав из инструкций пятерку остановил игру и вывел ничья : это код ничьи. Без нее игра остановится когда бот должен будет ответить ходом в центр - ту же пятерку \(ход=ход+1) \(выбор=АПЕРО.строка.часть(лог;ход;1)) //увеличиваем ход на 1. Считываем нужный ответ на ход игрока из лога - одну цифру, из соответствующего места строки \ЕСЛИ(ход<3) \ТО \(а\(выбор)="Х") \СТОП(поле) //на первом ходу ставим Х в ответ и без доп проверок возвращаем на поле \ЕСЛИ(что<>выбор) \ТО \(а\(выбор)="Х") \(эндинг=1) \СТОП(поле) // когда ход не первый, то бот проверяет, поставил ли игрок нолик в нужную ячейку, которая ведет к выигрышу (она каждая вторая в инструкции) : Если нет, то он сам это делает и разумеется, выигрывает \(ход=ход+1) \(выбор=АПЕРО.строка.часть(лог;ход;1)) \(а\(выбор)="Х") // если игрок поставил нолик, то программа считывает следующий ход из лога и ставит туда Х \(выбор=АПЕРО.строка.часть(лог;ход+1;1)) //проверяем ячейку после считанной, есть ли там код окончания игры \ЕСЛИ(выбор=1) \ТО \(эндинг=1) //если там единица, то это инструкция к тому, что компьютер выиграл \ЕСЛИ(выбор=5 И центр=1) \ТО \(эндинг=2) //если там пятерка, и центр занят то это ничья //проверка занятости центра нужна для того, чтобы не получилось ничьи тогда, когда компьютер должен сходить в центр. А если игрок сходит в центр сначала игры, то 5 уже не нужна будет, так как туда не сходить, и ее можно использовать как код конца игры \СТОП(поле) //возвращаем на игровое поле