#include #include "BoardClass/Board.h" #include "TurnClass/Turn.h" using namespace std; typedef unsigned int unint; int main() { // //ПЕРЕМЕННЫЕ // //МЭЙН bool newgame=true; int humanwin=0, botwin=0; string wannaplay="y"; const string INCORRECT="INCORRECT VALUE, TRY AGAIN: ", ENDGAME="\nGame says: ''The game ends here.''"; const string XWON="Game says: ''X wins!''", OWON="Game says: ''O wins!''", DRAW="Game says: ''Nobody wins - DRAW!''"; const string BOTLOST="Bot says: ''Shee u beat me, I'm worry.''", HUMANLOST="Bot says: ''nahahaha lamer, look how I beat u!''"; const string SEP(40, '-'); const string BOTTHINK="Bot says: ''Wait, I'm thinking.''"; // //Объявлен объект игровой доски Board BoardObj; //Объявлен объект Game Turn Game; // // // // //Заглавие игры. Инструкции для игрока. Выводится только при первом запуске. cout << "Bot says:" << endl; cout << "''Wolcome to TicTacToe choom." << endl; cout << "Look at the clear board." << endl; BoardObj.BoardShow(); cout << "When u wanna do ur turn - u should type coordinates of the any empty cell." << endl; cout << "(For example '22' or '10')" << endl; cout << "I afford I shouldn't explain u rules of the TicTacToe. So let's play brodie.''" << endl; // //Основной цикл игры while (wannaplay=="y") { //Объявление переменных при старте новой игры на основе булевого флага newgame. //Флаг newgame становится TRUE на стадии "Заглавие игры", //становится FALSE в начале цикла после присвоения переменных, //и снова становится TRUE при окончании цикла (т.е. при чьей-то победе или ничье). if (newgame) { //Запрос на то, кто первый. 1=игрок, 0=бот. //Выводит соответствующее сообщение после выбора. //Снимает флаг newgame, который возвращается в конце игры. cout << "Bot asks: Wanna be an X? (1/0):"; cin >> Game.firstnumber; if (Game.firstnumber) { cout << "Bot says: ''Well, u'll be an X.''" << endl; BoardObj.BoardShow(); } else { cout << "Bot says: ''OK, I'll be an X.''" << endl; } newgame=false; } cout << SEP << endl; Game.turnLINEint=3; Game.turnCOLint=3; // //Алгоритм игры, если первым номером (Х) выступает игрок while (Game.firstnumber) { cout << "HUMAN TURN!\n" << "Enter ur coords:"; while ((BoardObj.board[Game.turnLINEint][Game.turnCOLint]!="e")) { Game.HumanTurn(); if ((BoardObj.board[Game.turnLINEint][Game.turnCOLint]!="e")) {cout << INCORRECT;} } BoardObj.board[Game.turnLINEint][Game.turnCOLint] = "'X'"; BoardObj.BoardShow(); cout << SEP << endl; BoardObj.XWon(); BoardObj.Draw(); if ((BoardObj.Xwonflag) or (BoardObj.drawcounter==9)) {break;} Game.turnLINEint=3; Game.turnCOLint=3; //Сообщение гласит о том, что ходит бот cout << "BOT TURN!\n" << BOTTHINK << endl; //Повторяет функцию хода бота, пока та не нарандомит пустую клетку. while ((BoardObj.board[Game.turnLINEint][Game.turnCOLint]!="e")) { Game.BotTurn(); } //Присваивает свой знак и сообщает, какую клетку оккупировал. BoardObj.board[Game.turnLINEint][Game.turnCOLint] = "'O'"; cout << "Bot says:''I've occupied this cell:" << Game.turnLINEint << Game.turnCOLint << "''" << endl; //Вывод поля после хода бота. BoardObj.BoardShow(); cout << SEP << endl; //Проверка на победу О (которым выступает бот) и на ничью. BoardObj.OWon(); BoardObj.Draw(); //Наличие флага Xwonflag или занятость всех клетки = полом подцикла и выход в основной цикл. if ((BoardObj.Owonflag) or (BoardObj.drawcounter==9)) {break;} } // //Алгоритм игры, если игрок выступает вторым номером (O) while (!Game.firstnumber) { cout << "BOT TURN!\n" << BOTTHINK << endl; while ((BoardObj.board[Game.turnLINEint][Game.turnCOLint]!="e")) {Game.BotTurn();} BoardObj.board[Game.turnLINEint][Game.turnCOLint] = "'X'"; cout << "Bot says:''I've occupied this cell:" << Game.turnLINEint << Game.turnCOLint << "''" << endl; BoardObj.BoardShow(); cout << SEP << endl; BoardObj.XWon(); BoardObj.Draw(); if ((BoardObj.Xwonflag) or (BoardObj.drawcounter==9)) { break; } cout << "HUMAN TURN!\n" << "Enter ur coords:"; Game.turnLINEint=3; Game.turnCOLint=3; while ((BoardObj.board[Game.turnLINEint][Game.turnCOLint]!="e")) { Game.HumanTurn(); if ((BoardObj.board[Game.turnLINEint][Game.turnCOLint]!="e")) {cout << INCORRECT;} } BoardObj.board[Game.turnLINEint][Game.turnCOLint] = "'O'"; BoardObj.BoardShow(); cout << SEP << endl; BoardObj.OWon(); BoardObj.Draw(); if ((BoardObj.Owonflag) or (BoardObj.drawcounter==9)) { break; } } //Сообщение о конце игры и объявление флага новой игры для входа в запрос, кем хочет быть игрок cout << ENDGAME << endl; newgame=true; //Сообщения от игры в зависимости от победившего знака if (BoardObj.Xwonflag) { cout << XWON << endl; } else if (BoardObj.Owonflag) { cout << OWON << endl; } else if ((BoardObj.drawcounter==9) and (!BoardObj.Xwonflag) and (!BoardObj.Owonflag)) { cout << DRAW << endl; } //Сообщения от бота в зависимости от того, выиграл он или нет if ((Game.firstnumber) and (BoardObj.Xwonflag)) { cout << BOTLOST << endl; humanwin++; } else if ((!Game.firstnumber) and (BoardObj.Owonflag)) { cout << BOTLOST << endl; humanwin++; } else if (BoardObj.drawcounter==9) { cout << "Bot says: ''yeah dat was fairplay.''" << endl; } else { cout << HUMANLOST << endl; botwin++; } //Очистка поля, сброс флагов и предложение сыграть снова BoardObj.BoardClr(); BoardObj.Xwonflag=false; BoardObj.Owonflag=false; cout << SEP << endl; cout << SEP << endl; cout << "Wanna play another time?(y/n):"; cin >> wannaplay; } // //СТАТИСТИКА ПРИ ЗАВЕРШЕНИИ ИГРЫ cout << SEP << endl; cout << "SOME STATS OF SESSION:" << endl; cout << "Bot says: ''Hell u won me " << humanwin << " times.\nAnd I won u " << botwin << " times.''" << endl; // //компьютер респектует или лошит игрока if (humanwin