Files
TicTacToe/main.cpp

176 lines
8.3 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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;
}