176 lines
8.3 KiB
C++
176 lines
8.3 KiB
C++
#include <iostream>
|
||
#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<botwin) {cout << "Bot says: ''fuckyeah go back home lamer, u need some training.''" << endl;}
|
||
else if (botwin<humanwin) {cout << "Bot says: ''well, dat was not bad how u beat me.''" << endl;}
|
||
else if (botwin==humanwin) {cout << "Bot says: ''yeah dat was fairplay.''" << endl;}
|
||
return 1488;
|
||
}
|