#include #include #include #include #include "Engine.h" Engine::Engine(){ Board* brd = new Board(); b = brd; } void Engine::startGame(){ cout<<"WELCOME\n"; cout<<"1. Play against AI?\n"; cout<<"2. Play against a human?\n"; //cout<<"CHANGE THIS TO PARSE THINGS\n"; cout<<"Enter choice: \n"; int choice = -1; cin >> choice; cout << "OK" << endl; string move; bool gameOver = false; vector record; b->snapshot(record, *b); while (gameOver != true) { gameOver = b->isGameOver(); while(b->getTurn() == 'O' ) { b->displayBoard(); cout<<"\nEnter command: "; cin>>move; b->interpret(move, *b); } while(b->getTurn() == 'X' ) { AI(); } gameOver = b->isGameOver(); b->snapshot(record, *b); } //for debugging purposes cout<<"Record:"< listOfMoves = b->viewPossibleMoves(); //obvious moves if (false){ b->changeTurns(); } //random else { srand(time(NULL)); int randomChoice = rand() % (listOfMoves.size()-1) - 0; // choose a move betwen listOfMoves[0] to last element //3) execute movement int temp = randomChoice; b->move(listOfMoves[randomChoice]); } } void Engine::AI(){ cout << "----------------------BEGIN AI FUNCTION----------------------\n"; vector listOfMoves = b->viewPossibleMoves(); Board* temp = b; if (temp->getTurn() != 'X'){ temp->changeTurns(); } //temp->changeTurns(); //cout << "after: " << temp->getTurn() << "\n"; //only doing 1 branch right now because testing /*for (int i = 0; i < listOfMoves.size(); ++i){ minMax(temp, listOfMoves[i]); }*/ minMax(temp, listOfMoves[0]); b->move(listOfMoves[0]); cout << "----------------------END AI FUNCTION----------------------\n"; } void Engine::minMax(Board* temp, moves m){ if (temp->isGameOver() == true){ cout << "END OF PATH REACHED\n"; return; } else { cout << "m.row: " << m.row << "\n"; cout << "charToIntColumn(m.column): " << temp->charToIntColumn(m.column) << "\n"; cout << "m.moveType: " << m.moveType << "\n"; cout << "temp->isThisMovePossible(stuff): " << temp->isThisMovePossible(m.row, temp->charToIntColumn(m.column), m.moveType) << "\n\n\n"; vector listOfMoves = temp->viewPossibleMoves(); /*for (int i = 0; i < listOfMoves.size(); ++i){ minMax(temp, listOfMoves[i]); }*/ temp->displayBoard(); } }