From ae50933cbbf4e7f2b881916bd5cc62c271f3228d Mon Sep 17 00:00:00 2001 From: "vadim.bochkov" Date: Sat, 2 Nov 2024 18:06:23 +0500 Subject: [PATCH] =?UTF-8?q?UPD:=20=D0=A2=D0=B5=D0=BF=D0=B5=D1=80=D1=8C=20?= =?UTF-8?q?=D0=B0=D0=BB=D0=B3=D0=BE=D1=80=D0=B8=D1=82=D0=BC=20=D0=B8=D0=B3?= =?UTF-8?q?=D1=80=D0=B0=D0=B1=D0=B5=D0=BB=D0=B5=D0=BD,=20=D0=BD=D0=BE=20?= =?UTF-8?q?=D0=BF=D1=80=D0=BE=D1=82=D0=B8=D0=B2=20=D1=82=D1=83=D0=BF=D0=BE?= =?UTF-8?q?=D0=B3=D0=BE=20=D1=80=D0=B0=D0=BD=D0=B4=D0=BE=D0=BC=D0=B0=D0=B9?= =?UTF-8?q?=D0=B7=D0=B5=D1=80=D0=B0.=20=D0=9D=D0=B5=D0=BE=D0=BA=D0=BE?= =?UTF-8?q?=D0=BD=D1=87=D0=B0=D1=82=D0=B5=D0=BB=D1=8C=D0=BD=D0=B0=D1=8F=20?= =?UTF-8?q?=D0=B2=D0=B5=D1=80=D1=81=D0=B8=D1=8F.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + main.cpp | 158 +++++++++++++++++++++++++++++++++-------------------- 2 files changed, 101 insertions(+), 58 deletions(-) diff --git a/.gitignore b/.gitignore index 1c35b99..f26bb15 100644 --- a/.gitignore +++ b/.gitignore @@ -37,3 +37,4 @@ /.idea/misc.xml /.idea/modules.xml /.idea/TicTacToe.iml +/.idea/vcs.xml diff --git a/main.cpp b/main.cpp index 59860b6..0290e41 100644 --- a/main.cpp +++ b/main.cpp @@ -3,8 +3,8 @@ #include #include #include -#include #include +#include using namespace std; typedef unsigned int unint; @@ -16,12 +16,12 @@ int main() { //МЭЙН const int LINES = 3, COLUMNS = 3; bool newgame=true, firstnumber; - int turn, humanwin=0, botwin=0; + int turn, humanwin=0, botwin=0, draw; 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="O wins!", DRAW="Game says: ''Nobody wins - DRAW!''"; + 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(15, '-'); + const string SEP(40, '-'); const string BOTTHINK="Bot says: ''Wait, I'm thinking.''"; // //КЛАССЫ @@ -30,6 +30,7 @@ int main() { public: bool Xwonflag=false; bool Owonflag=false; + int drawcounter=1; //ИГРОВОЕ ПОЛЕ //первое число LINES характеризует строку //второе число COLUMNS характеризует столбик @@ -53,40 +54,63 @@ int main() { cout << endl; } } - void XWon() { - if ((board[0][0])=="'X'") { - if ((board[0][1])=="'X'" and (board[0][2])=="'X'") {Xwonflag=true;} - else if ((board[1][1])=="'X'" and (board[2][2])=="'X'") {Xwonflag=true;} - else if ((board[1][0])=="'X'" and (board[2][0])=="'X'") {Xwonflag=true;} + void BoardClr() { + for (int countlines = 0; countlines < LINES; ++countlines) { + for (int countcolumns = 0; countcolumns < COLUMNS; ++countcolumns) { + board[countlines][countcolumns] = "e"; + } } - if (((board[1][0])=="'X'") and ((board[1][1])=="'X'") and ((board[1][2]))=="'X'") {Xwonflag=true;} - if (((board[0][1])=="'X'") and ((board[1][1])=="'X'") and ((board[2][1]))=="'X'") {Xwonflag=true;} - if (((board[0][2])=="'X'") and ((board[1][2])=="'X'") and ((board[2][2]))=="'X'") {Xwonflag=true;} - if ((board[2][0])=="'X'") { - if ((board[2][1])=="'X'" and (board[2][2])=="'X'") {Xwonflag=true;} - else if ((board[1][1])=="'X'" and (board[0][2])=="'X'") {Xwonflag=true;} + } + void XWon() { + if (drawcounter>=4) { + if ((board[0][0])=="'X'") { + if ((board[0][1])=="'X'" and (board[0][2])=="'X'") {Xwonflag=true;} + else if ((board[1][1])=="'X'" and (board[2][2])=="'X'") {Xwonflag=true;} + else if ((board[1][0])=="'X'" and (board[2][0])=="'X'") {Xwonflag=true;} + } + if (((board[1][0])=="'X'") and ((board[1][1])=="'X'") and ((board[1][2]))=="'X'") {Xwonflag=true;} + if (((board[0][1])=="'X'") and ((board[1][1])=="'X'") and ((board[2][1]))=="'X'") {Xwonflag=true;} + if (((board[0][2])=="'X'") and ((board[1][2])=="'X'") and ((board[2][2]))=="'X'") {Xwonflag=true;} + if ((board[2][0])=="'X'") { + if ((board[2][1])=="'X'" and (board[2][2])=="'X'") {Xwonflag=true;} + else if ((board[1][1])=="'X'" and (board[0][2])=="'X'") {Xwonflag=true;} + } } } void OWon() { - if ((board[0][0])=="'O'") { - if ((board[0][1])=="'O'" and (board[0][2])=="'O'") {Owonflag=true;} - else if ((board[1][1])=="'O'" and (board[2][2])=="'O'") {Owonflag=true;} - else if ((board[1][0])=="'O'" and (board[2][0])=="'O'") {Owonflag=true;} + if (drawcounter>=4) { + if ((board[0][0])=="'O'") { + if ((board[0][1])=="'O'" and (board[0][2])=="'O'") {Owonflag=true;} + else if ((board[1][1])=="'O'" and (board[2][2])=="'O'") {Owonflag=true;} + else if ((board[1][0])=="'O'" and (board[2][0])=="'O'") {Owonflag=true;} + } + if (((board[1][0])=="'O'") and ((board[1][1])=="'O'") and ((board[1][2]))=="'O'") {Owonflag=true;} + if (((board[0][1])=="'O'") and ((board[1][1])=="'O'") and ((board[2][1]))=="'O'") {Owonflag=true;} + if (((board[0][2])=="'O'") and ((board[1][2])=="'O'") and ((board[2][2]))=="'O'") {Owonflag=true;} + if ((board[2][0])=="'O'") { + if ((board[2][1])=="'O'" and (board[2][2])=="'O'") {Owonflag=true;} + else if ((board[1][1])=="'O'" and (board[0][2])=="'O'") {Owonflag=true;} + } } - if (((board[1][0])=="'O'") and ((board[1][1])=="'O'") and ((board[1][2]))=="'O'") {Owonflag=true;} - if (((board[0][1])=="'O'") and ((board[1][1])=="'O'") and ((board[2][1]))=="'O'") {Owonflag=true;} - if (((board[0][2])=="'O'") and ((board[1][2])=="'O'") and ((board[2][2]))=="'O'") {Owonflag=true;} - if ((board[2][0])=="'O'") { - if ((board[2][1])=="'O'" and (board[2][2])=="'O'") {Owonflag=true;} - else if ((board[1][1])=="'O'" and (board[0][2])=="'O'") {Owonflag=true;} + } + void Draw() { + drawcounter=1; + for (int countlines = 0; countlines < LINES; ++countlines) { + for (int countcolumns = 0; countcolumns < COLUMNS; ++countcolumns) { + if (board[countlines][countcolumns]!="e") { + drawcounter++; + } + } } } }; + Board BoardObj; //Ходы игрока и бота class Turn { public: int turnLINEint, turnCOLint; string Humancount, turnline, turncol; + Board BoardObj; void HumanTurn() { //ХОД ИГРОКА //алгоритм на вычленение первого и второго значений координат @@ -106,15 +130,15 @@ int main() { //рандомит второе значение (столбец) srand((time(0))); turnLINEint=(rand()%3); - Sleep((rand()/3)); - srand((time(0))); - turnCOLint=(rand()%3); - //cout << "lineBOT: " << turnLINEint << " colBOT: " << turnCOLint << endl; + chrono::milliseconds timespan((rand()/9)); + this_thread::sleep_for(timespan); + mt19937 rng; + rng.seed(time(nullptr)); + turnCOLint=(rng()%3); + cout << "Bot says:''I've occupied this cell:" << turnLINEint << turnCOLint << "''" << endl; } }; - //Объявление объектов Turn Game; - Board BoardObj; // // // @@ -142,38 +166,51 @@ int main() { //Также снимает флаг newgame, который возвращается в конце игры. cout << "Bot asks: Wanna be an X? (1/0):"; cin >> firstnumber; - if (firstnumber) {cout << "Bot says: ''Well, u'll be an X.''" << endl;} - else {cout << "Bot says: ''OK, I'll be an X.''\n" << endl;} + if (firstnumber) {cout << "Bot says: ''Well, u'll be an X.''" << endl; BoardObj.BoardShow();} + else {cout << "Bot says: ''OK, I'll be an X.''" << endl;} turn=1; newgame=false; } cout << SEP << endl; - cout << "Game says: ''Now it's " << turn << " turn.''" << endl; - turn++; + //cout << "Game says: ''Now it's " << turn << " turn.''" << endl; + //turn++; Game.turnLINEint=3; Game.turnCOLint=3; //Если первым номером (Х) выступает игрок - if (firstnumber) { - cout << "Enter ur coords:"; + while (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 << BOTTHINK << endl; + cout << "BOT TURN!\n" << BOTTHINK << endl; while ((BoardObj.board[Game.turnLINEint][Game.turnCOLint]!="e")) {Game.BotTurn();} BoardObj.board[Game.turnLINEint][Game.turnCOLint] = "'O'"; BoardObj.BoardShow(); + cout << SEP << endl; + BoardObj.OWon(); + BoardObj.Draw(); + if ((BoardObj.Owonflag) or (BoardObj.drawcounter==9)) {break;} } - //Если игрок выступает вторым номером (O) - else { - cout << BOTTHINK << endl; + //Если игрок выступает вторым номером (O) + while (!firstnumber) { + cout << "BOT TURN!\n" << BOTTHINK << endl; while ((BoardObj.board[Game.turnLINEint][Game.turnCOLint]!="e")) {Game.BotTurn();} BoardObj.board[Game.turnLINEint][Game.turnCOLint] = "'X'"; BoardObj.BoardShow(); - cout << "Enter ur coords:"; + 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")) { @@ -181,24 +218,29 @@ int main() { 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;} } - BoardObj.XWon(); - BoardObj.OWon(); - if ((BoardObj.Xwonflag) or (BoardObj.Owonflag) or (turn>=9)) { - cout << ENDGAME << endl; - newgame=true; - if (BoardObj.Xwonflag) {cout << XWON << endl;} - else if (BoardObj.Owonflag) {cout << OWON << endl;} - else if ((turn>=9) and (!BoardObj.Xwonflag) and (!BoardObj.Owonflag)) {cout << DRAW << endl;} + 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 ((firstnumber) and (BoardObj.Xwonflag)) {cout << BOTLOST << endl; humanwin=+1;} - else if ((!firstnumber) and (BoardObj.Owonflag)) {cout << BOTLOST << endl; humanwin=+1;} - else {cout << HUMANLOST << endl; botwin=+1;} - cout << SEP << endl; - cout << SEP << endl; - cout << "Wanna play another time?(y/n): "; - cin >> wannaplay; - } + if ((firstnumber) and (BoardObj.Xwonflag)) {cout << BOTLOST << endl; humanwin++;} + else if ((!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; } // //СТАТИСТИКА ПРИ ЗАВЕРШЕНИИ ИГРЫ