#include #include // AI easy svargihet. Tanken är att den testar ett random drag, och så länge det inte är ett vinnande drag så placerar den det. extern int board[]; extern int grad; extern int tur; extern int keypad; extern int convertToCase(int n); extern int checkWin(int board[9]); extern int hittaTopDrag(int board[9]); extern bool checkMove(int drag); extern void switchTur(); extern void playMove(); int easy(); int normal(); void playAIMove(); int easy() { int drag; int board2[9]; // Nytt bräde var man sätter in och testar den nya positionen for (int i = 0; i <= 8; i++) { board2[i] = board[i]; } int failSafe = 0; // En failsafe variabel som ser till att metoden gås igenom max 50 gånger while (1) { failSafe++; drag = rand() % 9; // random(); while (!checkMove(drag)) { drag = rand() % 9; } board2[drag] = tur; // Sätter in draget if (checkWin(board2) == 0) { // Testar om draget var vinnande board2[drag] == 0; return drag; } board2[drag] == 0; // återställer draget if (failSafe == 50) { return normal(); // Om failsafe aktiveras så läggs ett drag genom normal-boten } } } // AI normal svårighetsgrad, lägger ett slumpmässigt drag int normal() { // srand(time(0)); // Initierar random // Körs tills ett giltigt drag hittats while (1) { int drag = rand() % 9; if (checkMove(drag)) { return drag; } } } // Metod som spelar ett drag beroende på AIns svårighetsgrad void playAIMove() { int drag; if (grad == 1) { drag = easy(); } else if (grad == 2) { drag = normal(); } else if (grad == 3) { drag = hittaTopDrag(board); } // playMove-metoden tar bara in case-värde, och en konvertering behövs därför. // !Notera att boten kommer skapa ett vektor-värde, medan en människa skapar ett case-värde playMove(convertToCase(drag)); // Turen switchas återigen till människans tur switchTur(); }