#include #include #include #include #include "GameMaster.h" #include "Database/GameLogManager.h" #include "GameReviewer.h" #include "Database/GameHistoryManager.h" #include "Structures/Board.h" #include "Structures/Player.h" #include "Structures/Bot.h" #include "Structures/SinglePlayerGame.h" #include "Structures/MultiPlayerGame.h" #include "Structures/Config.h" #include "Utilities/outputDecoratedSavedGame.h" #include "Utilities/GetSavedBoardSize.h" #include void handleLoadGame(); void handleNewGame(); void loadSinglePlayerGame(int gameId); void loadMultiPlayerGame(int gameId); void handleSinglePlayerNewGame(); void handleMultiPlayerNewGame(); void executeGameMaster(bool loadGameMode) { clearGameLog(); // emptying GameLog for the new game if (loadGameMode) handleLoadGame(); else handleNewGame(); } void handleLoadGame() { system("cls"); std::cout << "You've chosen to load a previous unfinished game\n" << "Previous unfunished games are: \n"; int startingGameId = getFirstGameId(); int lastGameId = getLastGameId(); if (startingGameId == -1) { std::cout << "\n There are no games inside game history\n Press any key to continue"; getch(); return; } for (int i = startingGameId; i <= lastGameId; i++) { if (getProperty(6, getGameById(i)) == "0") { outputDecoratedSavedGame(getGameById(i)); } } int gameId; std::string wantedGame; while (true) { std::cout << "\n Please type the id of the game you wish to continue playing: "; std::cin >> gameId; std::string savedGame = getGameById(gameId); if (getProperty(6, savedGame) != "0") { std::cout << "The id entered belong to a finished game, please choose an id from the given list\n"; continue; } wantedGame = savedGame; break; } if (getProperty(2, wantedGame) == "1Player") { loadSinglePlayerGame(gameId); } else { loadMultiPlayerGame(gameId); } } void loadSinglePlayerGame(int gameId) { int id = getSinglePlayerGame(gameId).id; Board board = *(getSinglePlayerGame(gameId).GameBoard); Player player = *(getSinglePlayerGame(gameId).Player1); Bot bot = *(getSinglePlayerGame(gameId).GameBot); char CurrentTurnColor = getSinglePlayerGame(gameId).CurrentTurnColor; SinglePlayerGame game {&board, &player, &bot, CurrentTurnColor}; game.id = id; game.Winner = 0; game.mode = "1Player"; game.start(); std::cout << "\n The game has finished, Press any key to continue" << std::endl; getch(); game.GameBoard -> deleteBoardMemory(); } void loadMultiPlayerGame(int gameId) { int id = getMultiPlayerGame(gameId).id; Board board = *(getMultiPlayerGame(gameId).GameBoard); Player player1 = *(getMultiPlayerGame(gameId).Player1); Player player2 = *(getMultiPlayerGame(gameId).Player2); char CurrentTurnColor = getMultiPlayerGame(gameId).CurrentTurnColor; MultiPlayerGame game {&board, &player1, &player2, CurrentTurnColor}; game.id = id; game.Winner = 0; game.mode = "2Player"; game.start(); std::cout << "\n The game has finished, Press any key to continue" << std::endl; getch(); game.GameBoard -> deleteBoardMemory(); } void handleNewGame() { int chosenOption = 0; while (true) { system("cls"); std::cout << (chosenOption == 0 ? " > ":" ") << " Single Player" << std::endl << (chosenOption == 1 ? " > ":" ") << " MultiPlayer" << std::endl; int userInput = getch(); if (userInput == static_cast('w') || userInput == 72) { if (chosenOption == 1) { chosenOption--; continue; } } if (userInput == static_cast('s') || userInput == 80) { if (chosenOption == 0) { chosenOption++; continue; } } if (userInput == 13) { if (chosenOption == 0) { handleSinglePlayerNewGame(); } else if (chosenOption == 1) { handleMultiPlayerNewGame(); } break; } } } void handleSinglePlayerNewGame() { Bot bot{"0", 0}; int chosenOption = 0; while (true) { system("cls"); std::cout << "Please choose the difficulty: \n" << (chosenOption == 0 ? " > ":" ") << " Easy" << std::endl << (chosenOption == 1 ? " > ":" ") << " Medium" << std::endl << (chosenOption == 2 ? " > ":" ") << " Hard" << std::endl; int userInput = getch(); if (userInput == static_cast('w') || userInput == 72) { if (chosenOption != 0) { chosenOption--; continue; } } if (userInput == static_cast('s') || userInput == 80) { if (chosenOption != 2) { chosenOption++; continue; } } if (userInput == 13) { if (chosenOption == 0) { bot.difficulty = 1; bot.name = "Easy Bot"; } else if (chosenOption == 1) { bot.difficulty = 2; bot.name = "Medium Bot"; } else if (chosenOption == 2) { bot.difficulty = 3; bot.name = "Hard Bot"; } break; } } Player player{"0", 'W'}; while (true) { system("cls"); std::string name; std::cout << "Please set your name: "; std::cin >> name; std::cout << std::endl; if (name.find("|") != -1 || name.find("[") != -1 || name.find("]") != -1) { std::cout << "One day you will die" << "\nSome poeple will attend your funeral only for the food" << "\nYour friends will hang out again after 1 month" << "\nYour kids will go to work casually after 2 months" << "\nYour wife/husband will laugh with a comedy movie after 6 month" << "\nEventually, your name will be forgotten and memories of you fade away" << "\nYet some poeple like you think they can escape this fact by putting | or [ or ] inside their names" << "\nYou guys think noone is going to forget your name because they be like:" << "\n Damn bro this guy has a | or [ or ] inside their name! I'm going to remember this name till my last breath" << "\nLet's be real, nobody will say that unless they're high and high poeple can't remember anything more than 5 seconds" << "\nSo stop annoying me and choose a name without | or [ or ]" << "\nNow click any freaking key to continue..."; getch(); continue; } player.name = name; system("cls"); break; } chosenOption = 0; while (true) { system("cls"); std::cout << "Please choose your color\n" << (chosenOption == 0 ? " > ":" ") << " Black" << std::endl << (chosenOption == 1 ? " > ":" ") << " White" << std::endl; int userInput = getch(); if (userInput == static_cast('w') || userInput == 72) { if (chosenOption == 1) { chosenOption--; continue; } } if (userInput == static_cast('s') || userInput == 80) { if (chosenOption == 0) { chosenOption++; continue; } } if (userInput == 13) { if (chosenOption == 0) { player.color = 'B'; } else if (chosenOption == 1) { player.color = 'W'; } break; } } system("cls"); Board board{Config::instance -> BOARD_SIZE}; board.newGameSetup(); SinglePlayerGame game{&board, &player, &bot, 'B'}; game.start(); std::cout << "\n The game has finished, would you like to see the replay? [Y/N]" << std::endl; char procceded; std::cin >> procceded; if (procceded == 'Y' || procceded == 'y') { executeGameReviewer(*game.GameBoard); } game.GameBoard -> deleteBoardMemory(); } void handleMultiPlayerNewGame() { Player player1{"0", 'W'}; while (true) { system("cls"); std::string name; std::cout << "Player1, Please set your name: "; std::cin >> name; std::cout << std::endl; if (name.find("|") != -1 || name.find("[") != -1 || name.find("]") != -1) { std::cout << "One day you will die" << "\nSome poeple will attend your funeral only for the food" << "\nYour friends will hang out again after 1 month" << "\nYour kids will go to work casually after 2 months" << "\nYour wife/husband will laugh with a comedy movie after 6 month" << "\nEventually, your name will be forgotten and memories of you fade away" << "\nYet some poeple like you think they can escape this fact by putting | or [ or ] inside their names" << "\nYou guys think noone is going to forget your name because they be like:" << "\n Damn bro this guy has a | or [ or ] inside their name! I'm going to remember this name till my last breath" << "\nLet's be real, nobody will say that unless they're high and high poeple can't remember anything more than 5 seconds" << "\nSo stop annoying me and choose a name without | or [ or ]" << "\nNow click any freaking key to continue..."; getch(); continue; } player1.name = name; system("cls"); break; } int chosenOption = 0; while (true) { system("cls"); std::cout << "Player1, please choose your color\n" << (chosenOption == 0 ? " > ":" ") << " Black" << std::endl << (chosenOption == 1 ? " > ":" ") << " White" << std::endl; int userInput = getch(); if (userInput == static_cast('w') || userInput == 72) { if (chosenOption == 1) { chosenOption--; continue; } } if (userInput == static_cast('s') || userInput == 80) { if (chosenOption == 0) { chosenOption++; continue; } } if (userInput == 13) { if (chosenOption == 0) { player1.color = 'B'; } else if (chosenOption == 1) { player1.color = 'W'; } break; } } Player player2{"0", 'W'}; while (true) { system("cls"); std::string name; std::cout << "Player2, Please set your name: "; std::cin >> name; std::cout << std::endl; if (name.find("|") != -1 || name.find("[") != -1 || name.find("]") != -1) { std::cout << "One day you will die" << "\nSome poeple will attend your funeral only for the food" << "\nYour friends will hang out again after 1 month" << "\nYour kids will go to work casually after 2 months" << "\nYour wife/husband will laugh with a comedy movie after 6 month" << "\nEventually, your name will be forgotten and memories of you fade away" << "\nYet some poeple like you think they can escape this fact by putting | or [ or ] inside their names" << "\nYou guys think noone is going to forget your name because they be like:" << "\n Damn bro this guy has a | or [ or ] inside their name! I'm going to remember this name till my last breath" << "\nLet's be real, nobody will say that unless they're high and high poeple can't remember anything more than 5 seconds" << "\nSo stop annoying me and choose a name without | or [ or ]" << "\nNow click any freaking key to continue..."; getch(); continue; } player2.name = name; player2.color = (player1.color == 'W' ? 'B':'W'); system("cls"); break; } system("cls"); Board board{Config::getInstance() -> BOARD_SIZE}; board.newGameSetup(); MultiPlayerGame game{&board, &player1, &player2, 'B'}; game.start(); std::cout << "\n The game has finished, would you like to see the replay? [Y/N]" << std::endl; char procceded; std::cin >> procceded; if (procceded == 'Y' || procceded == 'y') { executeGameReviewer(*game.GameBoard); } game.GameBoard -> deleteBoardMemory(); }