From 7e8a82a1e49447b70c170ae33e7c2de2f16749a3 Mon Sep 17 00:00:00 2001 From: Rebecca Schofield Date: Thu, 22 Oct 2015 10:51:32 -0500 Subject: [PATCH 01/10] fixing --- a.out | Bin 57314 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100755 a.out diff --git a/a.out b/a.out deleted file mode 100755 index 8a730d51cb6485ac10678766adc4402d368188f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57314 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 UwK+W@u#9n^yc9&u<=Wi;10b`djQ{`u From b1f3496981e4cffba2b5590da8b0425904fbf27a Mon Sep 17 00:00:00 2001 From: Rebecca Schofield Date: Thu, 22 Oct 2015 11:50:51 -0500 Subject: [PATCH 02/10] updating branch --- Board.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/Board.cpp b/Board.cpp index b1473b4..c6d146b 100755 --- a/Board.cpp +++ b/Board.cpp @@ -28,7 +28,6 @@ Board::Board() { moves Board::parse(string input) { - input = myToUpper(input); cout<& inputVec, Board inputBoard) cout<<"QUEUE OVERFLOW!"< listOfMoves = viewPossibleMoves(); From f4d63382fe00377a3427adc91faa36c974eb79a6 Mon Sep 17 00:00:00 2001 From: Rebecca Schofield Date: Sun, 25 Oct 2015 16:43:27 -0500 Subject: [PATCH 03/10] making an engine --- Board.cpp | 24 ------------ Board.h | 1 - Engine.cpp | 109 +++++++++++++++++++++++++++++++++++++++++++++++++++++ Engine.h | 14 +++++++ a.out | Bin 0 -> 57314 bytes test.cpp | 72 +---------------------------------- 6 files changed, 125 insertions(+), 95 deletions(-) create mode 100755 Engine.cpp create mode 100755 Engine.h create mode 100755 a.out diff --git a/Board.cpp b/Board.cpp index c6d146b..d407bd7 100755 --- a/Board.cpp +++ b/Board.cpp @@ -521,28 +521,4 @@ void Board::snapshot(vector& inputVec, Board inputBoard) } inputVec.push_back(inputBoard); -} - -//move this to its own file -void Board::easyAI() -{ - //1) see all possible movements - - vector listOfMoves = viewPossibleMoves(); - - //obvious moves - if (false){ - return; - } - - //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; - - move(listOfMoves[randomChoice]); - } } \ No newline at end of file diff --git a/Board.h b/Board.h index f17eb4d..eecdeb3 100755 --- a/Board.h +++ b/Board.h @@ -40,5 +40,4 @@ public: void undo(Board& tablero); void interpret(string input, Board& tablero); void snapshot(vector& inputVec, Board inputBoard); - void easyAI(); }; \ No newline at end of file diff --git a/Engine.cpp b/Engine.cpp new file mode 100755 index 0000000..cf7acf9 --- /dev/null +++ b/Engine.cpp @@ -0,0 +1,109 @@ +#include +#include +#include +#include +#include "Engine.h" + + +Engine::Engine(){ + Board b = new Board(); +} + +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; + 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); + } + + + vector possibleMoves = b.viewPossibleMoves(); + + if (choice == 1) + { + cout << "a"; + b.easyAI(); + } + + else + { + while(b.getTurn() == 'X' ) + { + b.displayBoard(); + cout<<"\nEnter command: "; + cout<<"OK\n"; + cin>>move; + b.interpret(move,b); + } + } + + //b.snapshot(); + gameOver = b.isGameOver(); + + b.snapshot(record,b); + } + + //for debugging purposes + cout<<"Record:"< listOfMoves = viewPossibleMoves(); + + //obvious moves + if (false){ + return; + } + + //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; + + move(listOfMoves[randomChoice]); + } +} + +void Board::AI(){ + //do things here +} + +void Board::minMax(){ + //do more things here +} \ No newline at end of file diff --git a/Engine.h b/Engine.h new file mode 100755 index 0000000..da6f589 --- /dev/null +++ b/Engine.h @@ -0,0 +1,14 @@ +#pragma once + +#include "Board.h" + +using namespace std; + +class Engine { + Board b; + +public: + Engine(); + void startGame(); + void easyAI(); +}; \ No newline at end of file diff --git a/a.out b/a.out new file mode 100755 index 0000000000000000000000000000000000000000..8a730d51cb6485ac10678766adc4402d368188f5 GIT binary patch literal 57314 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 UwK+W@u#9n^yc9&u<=Wi;10b`djQ{`u literal 0 HcmV?d00001 diff --git a/test.cpp b/test.cpp index 7dd63ca..a0f9d72 100755 --- a/test.cpp +++ b/test.cpp @@ -1,76 +1,8 @@ -#include -#include -#include -#include -#include "Board.h" +#include "Engine.h" using namespace std; int main() { - 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; - cin >> choice; - cout << "OK" << endl; - - Board b; - 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); - } - - - vector possibleMoves = b.viewPossibleMoves(); - - if (choice == 1) - { - b.easyAI(); - } - - else - { - while(b.getTurn() == 'X' ) - { - b.displayBoard(); - cout<<"\nEnter command: "; - cout<<"OK\n"; - cin>>move; - b.interpret(move,b); - } - } - - //b.snapshot(); - gameOver = b.isGameOver(); - - b.snapshot(record,b); - } - - //for debugging purposes - cout<<"Record:"< Date: Sun, 25 Oct 2015 16:43:40 -0500 Subject: [PATCH 04/10] making an engine --- a.out | Bin 57314 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100755 a.out diff --git a/a.out b/a.out deleted file mode 100755 index 8a730d51cb6485ac10678766adc4402d368188f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57314 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 UwK+W@u#9n^yc9&u<=Wi;10b`djQ{`u From dc544a609b7daabb1e2f68786130d9777046d752 Mon Sep 17 00:00:00 2001 From: Rebecca Schofield Date: Sun, 25 Oct 2015 16:53:32 -0500 Subject: [PATCH 05/10] finished engine --- Engine.cpp | 39 ++++++++++++++++++++------------------- Engine.h | 4 +++- 2 files changed, 23 insertions(+), 20 deletions(-) diff --git a/Engine.cpp b/Engine.cpp index cf7acf9..8b07782 100755 --- a/Engine.cpp +++ b/Engine.cpp @@ -6,7 +6,8 @@ Engine::Engine(){ - Board b = new Board(); + Board* brd = new Board(); + b = brd; } void Engine::startGame(){ @@ -25,45 +26,45 @@ void Engine::startGame(){ bool gameOver = false; vector record; - b.snapshot(record,b); + b->snapshot(record, *b); while (gameOver != true) { - gameOver = b.isGameOver(); + gameOver = b->isGameOver(); - while(b.getTurn() == 'O' ) + while(b->getTurn() == 'O' ) { - b.displayBoard(); + b->displayBoard(); cout<<"\nEnter command: "; cin>>move; - b.interpret(move,b); + b->interpret(move, *b); } - vector possibleMoves = b.viewPossibleMoves(); + vector possibleMoves = b->viewPossibleMoves(); if (choice == 1) { - cout << "a"; - b.easyAI(); + cout << "easyAI"; + easyAI(); } else { - while(b.getTurn() == 'X' ) + while(b->getTurn() == 'X' ) { - b.displayBoard(); + b->displayBoard(); cout<<"\nEnter command: "; cout<<"OK\n"; cin>>move; - b.interpret(move,b); + b->interpret(move, *b); } } - //b.snapshot(); - gameOver = b.isGameOver(); + //b->snapshot(); + gameOver = b->isGameOver(); - b.snapshot(record,b); + b->snapshot(record, *b); } //for debugging purposes @@ -77,11 +78,11 @@ void Engine::startGame(){ } } -void Board::easyAI() +void Engine::easyAI() { //1) see all possible movements - vector listOfMoves = viewPossibleMoves(); + vector listOfMoves = b->viewPossibleMoves(); //obvious moves if (false){ @@ -100,10 +101,10 @@ void Board::easyAI() } } -void Board::AI(){ +void Engine::AI(){ //do things here } -void Board::minMax(){ +void Engine::minMax(){ //do more things here } \ No newline at end of file diff --git a/Engine.h b/Engine.h index da6f589..8baa665 100755 --- a/Engine.h +++ b/Engine.h @@ -5,10 +5,12 @@ using namespace std; class Engine { - Board b; + Board* b; public: Engine(); void startGame(); void easyAI(); + void AI(); + void minMax(); }; \ No newline at end of file From 6fe1b333fde55a4bdd2b03dbde8870260b1f2421 Mon Sep 17 00:00:00 2001 From: Rebecca Schofield Date: Mon, 26 Oct 2015 15:22:59 -0500 Subject: [PATCH 06/10] working on AI junk --- Engine.cpp | 41 ++++++++++++++++------------------------- test.cpp | 3 ++- 2 files changed, 18 insertions(+), 26 deletions(-) diff --git a/Engine.cpp b/Engine.cpp index 8b07782..e69caf0 100755 --- a/Engine.cpp +++ b/Engine.cpp @@ -18,7 +18,7 @@ void Engine::startGame(){ //cout<<"CHANGE THIS TO PARSE THINGS\n"; cout<<"Enter choice: \n"; - int choice; + int choice = -1; cin >> choice; cout << "OK" << endl; @@ -38,30 +38,13 @@ void Engine::startGame(){ cout<<"\nEnter command: "; cin>>move; b->interpret(move, *b); - } - - - vector possibleMoves = b->viewPossibleMoves(); - - if (choice == 1) - { - cout << "easyAI"; - easyAI(); } - else + while(b->getTurn() == 'X' ) { - while(b->getTurn() == 'X' ) - { - b->displayBoard(); - cout<<"\nEnter command: "; - cout<<"OK\n"; - cin>>move; - b->interpret(move, *b); - } + AI(); } - //b->snapshot(); gameOver = b->isGameOver(); b->snapshot(record, *b); @@ -81,12 +64,11 @@ void Engine::startGame(){ void Engine::easyAI() { //1) see all possible movements - vector listOfMoves = b->viewPossibleMoves(); //obvious moves if (false){ - return; + b->changeTurns(); } //random @@ -96,13 +78,22 @@ void Engine::easyAI() //3) execute movement int temp = randomChoice; - - move(listOfMoves[randomChoice]); + b->move(listOfMoves[randomChoice]); } } void Engine::AI(){ - //do things here + vector listOfMoves = b->viewPossibleMoves(); + + cout << "rows: \n\n"; + for (int i = 0; i < listOfMoves.size(); ++i){ + cout << "i: " << listOfMoves[i].row << "\n"; + } + + cout << "columns: \n\n"; + for (int i = 0; i < listOfMoves.size(); ++i){ + cout << "i: " << listOfMoves[i].column << "\n"; + } } void Engine::minMax(){ diff --git a/test.cpp b/test.cpp index a0f9d72..8b1eb77 100755 --- a/test.cpp +++ b/test.cpp @@ -4,5 +4,6 @@ using namespace std; int main() { - // + Engine e; + e.startGame(); } From 2dc2c70562be71efe2175eb79b0505e89e2a8f6a Mon Sep 17 00:00:00 2001 From: Rebecca Schofield Date: Mon, 26 Oct 2015 15:23:55 -0500 Subject: [PATCH 07/10] stable board & engine --- Engine.cpp | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/Engine.cpp b/Engine.cpp index e69caf0..c5a1f4b 100755 --- a/Engine.cpp +++ b/Engine.cpp @@ -84,16 +84,7 @@ void Engine::easyAI() void Engine::AI(){ vector listOfMoves = b->viewPossibleMoves(); - - cout << "rows: \n\n"; - for (int i = 0; i < listOfMoves.size(); ++i){ - cout << "i: " << listOfMoves[i].row << "\n"; - } - - cout << "columns: \n\n"; - for (int i = 0; i < listOfMoves.size(); ++i){ - cout << "i: " << listOfMoves[i].column << "\n"; - } + // } void Engine::minMax(){ From 67a2997b8c74bd1c6e96f0a6ad31a76472fee5ac Mon Sep 17 00:00:00 2001 From: Rebecca Schofield Date: Mon, 26 Oct 2015 17:08:48 -0500 Subject: [PATCH 08/10] updating NOT STABLE --- Board.cpp | 117 ++++------------------------------------------------- Engine.cpp | 39 ++++++++++++++++-- Engine.h | 2 +- 3 files changed, 45 insertions(+), 113 deletions(-) diff --git a/Board.cpp b/Board.cpp index d407bd7..1b161d2 100755 --- a/Board.cpp +++ b/Board.cpp @@ -143,113 +143,7 @@ char Board::intToCharColumn(int input) //converts column number to int void Board::move(string inputMove) { moves jugada = parse(inputMove); - - int row = 8 - (jugada.row); - int kolumn = charToIntColumn(jugada.column); - int temp = boardArray[row][kolumn]; - int reflector = 1; - - if (row > 8 || row < 0 || kolumn > 8 || kolumn < 0) - { - cout<<"ERROR: index out of bound in move()!"< 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(){ - //do more things here +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(); + } } \ No newline at end of file diff --git a/Engine.h b/Engine.h index 8baa665..4011d23 100755 --- a/Engine.h +++ b/Engine.h @@ -12,5 +12,5 @@ public: void startGame(); void easyAI(); void AI(); - void minMax(); + void minMax(Board* temp, moves m); }; \ No newline at end of file From b03a041719e8f1aa2c3fc193da2a5f03b9f6c597 Mon Sep 17 00:00:00 2001 From: Rebecca Schofield Date: Tue, 27 Oct 2015 08:38:25 -0500 Subject: [PATCH 09/10] working, still not stable --- Board.cpp | 126 ++++++++++++++++++++++++++++++++++++++++++++++++++--- Board.h | 2 + Engine.cpp | 51 ++++++++++++---------- Engine.h | 2 +- test.cpp | 4 ++ 5 files changed, 156 insertions(+), 29 deletions(-) diff --git a/Board.cpp b/Board.cpp index 1b161d2..0282dc8 100755 --- a/Board.cpp +++ b/Board.cpp @@ -81,6 +81,7 @@ bool Board::isGameOver() void Board::changeTurns() { + cout << "TURN IS BEING CHANGED\n"; if (turn == 'O') turn = 'X'; else turn = 'O'; } @@ -99,7 +100,7 @@ void Board::displayBoard() cout<<"|\n"; } cout<<'\n'< 8 || row < 0 || kolumn > 8 || kolumn < 0) + { + cout<<"ERROR: index out of bound in second move()!"<& inputVec, Board inputBoard) } inputVec.push_back(inputBoard); +} + +void Board::testPrint(){ + for (int i = 7; i >= 0; --i){ + for (int j = 7; j >= 0; --j){ + cout << boardArray[i][j] << " "; + } + + cout << "\n"; + } } \ No newline at end of file diff --git a/Board.h b/Board.h index eecdeb3..19cdc62 100755 --- a/Board.h +++ b/Board.h @@ -34,10 +34,12 @@ public: char intToCharColumn(int input); void move(string inputMove); void move(moves jugada); + void moveWOPrint(moves jugada); bool isThisMovePossible(int r, int c, string moveType); vector viewPossibleMoves(); string myToUpper(string input); void undo(Board& tablero); void interpret(string input, Board& tablero); void snapshot(vector& inputVec, Board inputBoard); + void testPrint(); }; \ No newline at end of file diff --git a/Engine.cpp b/Engine.cpp index 72998de..5f4b602 100755 --- a/Engine.cpp +++ b/Engine.cpp @@ -85,41 +85,48 @@ void Engine::easyAI() void Engine::AI(){ cout << "----------------------BEGIN AI FUNCTION----------------------\n"; vector listOfMoves = b->viewPossibleMoves(); - Board* temp = b; - if (temp->getTurn() != 'X'){ - temp->changeTurns(); + Board temp = *b; + + //probably not needed, check later + if (temp.getTurn() != 'X'){ + cout << "a changing of turns is needed. \n"; + 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]); + b->moveWOPrint(minMax(temp, listOfMoves[0], 0)); + b->displayBoard(); cout << "----------------------END AI FUNCTION----------------------\n"; } -void Engine::minMax(Board* temp, moves m){ - if (temp->isGameOver() == true){ +moves Engine::minMax(Board temp, moves m, int c){ + //testing purposes only + if (c > 1000){ + return m; + } + + if (temp.isGameOver() == true){ cout << "END OF PATH REACHED\n"; - return; + return m; } else { + if(temp.isThisMovePossible(8 - m.row, temp.charToIntColumn(m.column), m.moveType)){ + cout << "piece has been moved in minMax\n"; + temp.moveWOPrint(m); + } + cout << "c: " << c << "\n\n"; + cout << "current turn: " << temp.getTurn() << "\n"; + vector listOfMoves = temp.viewPossibleMoves(); + + for (int i = 0; i < listOfMoves.size(); ++i){ + cout << "listOfMoves[i]: (" << listOfMoves[i].row << ", " << listOfMoves[i].column << ")\n"; + //minMax(temp, listOfMoves[i]); + } - 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(); + return minMax(temp, listOfMoves[0], ++c); } } \ No newline at end of file diff --git a/Engine.h b/Engine.h index 4011d23..463d05c 100755 --- a/Engine.h +++ b/Engine.h @@ -12,5 +12,5 @@ public: void startGame(); void easyAI(); void AI(); - void minMax(Board* temp, moves m); + moves minMax(Board temp, moves m, int c); }; \ No newline at end of file diff --git a/test.cpp b/test.cpp index 8b1eb77..65f07dc 100755 --- a/test.cpp +++ b/test.cpp @@ -4,6 +4,10 @@ using namespace std; int main() { + //board testing + Board b; + + //engine testing Engine e; e.startGame(); } From 96ddcfd632ab7491473e0cf3e8427ba463ac5f7a Mon Sep 17 00:00:00 2001 From: Rebecca Schofield Date: Tue, 27 Oct 2015 10:40:55 -0500 Subject: [PATCH 10/10] restructuring --- Board.cpp | 348 ++++++++++++++++------------------------------------- Board.h | 20 +-- Engine.cpp | 37 +++--- Piece.cpp | 69 +++++++++++ Piece.h | 25 ++++ test.cpp | 6 +- 6 files changed, 232 insertions(+), 273 deletions(-) create mode 100755 Piece.cpp create mode 100755 Piece.h diff --git a/Board.cpp b/Board.cpp index 0282dc8..b423b00 100755 --- a/Board.cpp +++ b/Board.cpp @@ -5,33 +5,42 @@ using namespace std; Board::Board() { - for (int i = 0; i < 2; ++i) { + for (int i = 0; i < 2; ++i) { for (int j = 0; j < 8; ++j) { - boardArray[i][j] = 'X'; + xpieces.push_back(new Piece(i, j, 'X')); + } + } + for (int i = 6; i < 8; ++i) { + for (int j = 0; j < 8; ++j) { + opieces.push_back(new Piece(i, j, 'O')); + } + } +} + +bool Board::elemInXs(int r, int c){ + for (int i = 0; i < xpieces.size(); ++i){ + if (xpieces[i]->getX() == r && xpieces[i]->getY() == c){ + return true; } } - - for (int i = 2; i < 6; ++i) { - for (int j = 0; j < 8; ++j) { - boardArray[i][j] = '_'; + return false; +} + +bool Board::elemInOs(int r, int c){ + for (int i = 0; i < opieces.size(); ++i){ + if (opieces[i]->getX() == r && opieces[i]->getY() == c){ + return true; } } - - for (int i = 6; i <= 7; ++i) { - for (int j = 0; j < 8; ++j) { - boardArray[i][j] = 'O'; - } - } + return false; } moves Board::parse(string input) { input = myToUpper(input); - cout<getX() == 0){ + cout<<"\n\n\nPlayer X wins!\n\n\n"<getX() == 7){ + cout<<"\n\n\nPlayer O wins!\n\n\n"< 8 || row < 0 || kolumn > 8 || kolumn < 0) - { - cout<<"ERROR: index out of bound in second move()!"< 8 || row < 0 || column > 8 || column < 0) { + cout<<"ERROR: index out of bound."<getType(); + cout << "temp: " << temp << "\n"; + + if (temp != turn || temp == '_') { + cout<<"ERROR: attempting to move an invalid piece."<moveFwd(); } - - if (jugada.moveType == "FWD") - { - - if(boardArray[row+reflector][kolumn] != '_') - { - cout<<"you can't move that piece forward"<getType() == temp) cout<<"you hate your own team or something? you can't do that!"<moveLeft(); } - else if (jugada.moveType == "RIGHT") - { - if (kolumn == 7) - { + else if (jugada.moveType == "RIGHT") { + if (column == 7) cout<<"Destination Spot out of range!"<getType() == temp) cout<<"you hate your own team or something? you can't do that!"<moveRight(); } - - else - { - cout<<"Unrecognized movetype!"< 8 || row < 0 || kolumn > 8 || kolumn < 0) - { - cout<<"ERROR: index out of bound in second move()!"<getType(); if (pieceToMove != turn) //trying to move invalid piece { - //cout << "Error in Board::isThisMovePossible: trying to move a piece outside your turn.\n"; + cout << "Error in Board::isThisMovePossible: trying to move a piece outside your turn.\n"; return false; } @@ -383,22 +233,26 @@ bool Board::isThisMovePossible(int r, int c, string moveType) { if (moveType == "FWD") { - - if (boardArray[r+reflector][c] == '_') return true; - else return false; - + if (boardArray[r+reflector][c]->getType() == '_') + return true; + else + return false; } else if (moveType == "RIGHT") { - if (boardArray[r+reflector][c+1] != pieceToMove && (r+reflector >= 0) && (r+reflector <= 7) && (c+1 <= 7) ) return true; - else return false; + if (boardArray[r+reflector][c+1]->getType() != pieceToMove && (r+reflector >= 0) && (r+reflector <= 7) && (c+1 <= 7) ) + return true; + else + return false; } else if (moveType == "LEFT") { - if (boardArray[r+reflector][c-1] != pieceToMove && (r+reflector >= 0) && (r+reflector <= 7) && (c+1 >= 0) ) return true; - else return false; + if (boardArray[r+reflector][c-1]->getType() != pieceToMove && (r+reflector >= 0) && (r+reflector <= 7) && (c+1 >= 0) ) + return true; + else + return false; } else return false; @@ -413,7 +267,7 @@ vector Board::viewPossibleMoves() { for (int c = 0; c < 8; ++c) { - if (boardArray[r][c] == turn) + if (boardArray[r][c]->getType() == turn) { if (isThisMovePossible(r,c,"FWD")) { @@ -439,7 +293,7 @@ vector Board::viewPossibleMoves() return output; } - +*/ string Board::myToUpper(string input) { string output; @@ -456,11 +310,6 @@ string Board::myToUpper(string input) else output.push_back(input[i]); } - for (int i = 0; i < output.size(); ++i) - { - cout< record; @@ -510,7 +360,7 @@ void Board::interpret(string input, Board& tablero) //determines what kind of co else tablero.move(input); } - +*/ void Board::snapshot(vector& inputVec, Board inputBoard) { if (inputVec.size() == 10) @@ -526,12 +376,18 @@ void Board::snapshot(vector& inputVec, Board inputBoard) inputVec.push_back(inputBoard); } -void Board::testPrint(){ - for (int i = 7; i >= 0; --i){ - for (int j = 7; j >= 0; --j){ - cout << boardArray[i][j] << " "; - } - - cout << "\n"; +int Board::evaluate(char max, char min){ + //right now just evaluating number of pieces + if (max == 'X'){ + return (xpieces.size() - opieces.size()); + } + + else if (max == 'O'){ + return (opieces.size() - xpieces.size()); + } + + else { + cout << "Unidentified max, must be either X or O.\n"; + return 0; } } \ No newline at end of file diff --git a/Board.h b/Board.h index 19cdc62..8f3284c 100755 --- a/Board.h +++ b/Board.h @@ -2,6 +2,7 @@ #include #include +#include "Piece.h" using namespace std; @@ -18,13 +19,16 @@ struct moves { }; class Board { - char boardArray [8][8]; + //vector> boardArray; + vector xpieces; + vector opieces; + //char boardArray [8][8]; char turn = 'O'; public: Board(); - char elementAt(int r, int k) { return boardArray[r][k]; } - void modifyAt(int r, int k, char input) { boardArray[r][k] = input; } + bool elemInXs(int r, int c); + bool elemInOs(int r, int c); moves parse(string input); char getTurn() { return turn; } bool isGameOver(); @@ -32,14 +36,14 @@ public: void displayBoard(); int charToIntColumn(char input); char intToCharColumn(int input); - void move(string inputMove); - void move(moves jugada); + //void move(string inputMove); + //void move(moves jugada); void moveWOPrint(moves jugada); - bool isThisMovePossible(int r, int c, string moveType); - vector viewPossibleMoves(); + //bool isThisMovePossible(int r, int c, string moveType); + //vector viewPossibleMoves(); string myToUpper(string input); void undo(Board& tablero); void interpret(string input, Board& tablero); void snapshot(vector& inputVec, Board inputBoard); - void testPrint(); + int evaluate(char max, char min); }; \ No newline at end of file diff --git a/Engine.cpp b/Engine.cpp index 5f4b602..c68e650 100755 --- a/Engine.cpp +++ b/Engine.cpp @@ -15,7 +15,6 @@ void Engine::startGame(){ 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; @@ -37,28 +36,22 @@ void Engine::startGame(){ b->displayBoard(); cout<<"\nEnter command: "; cin>>move; + cout << "\n"; b->interpret(move, *b); } - + + b->changeTurns(); + while(b->getTurn() == 'X' ) { - AI(); + cout << "\n\n\n\nit gets here\n\n\n\n"; + easyAI(); } gameOver = b->isGameOver(); b->snapshot(record, *b); } - - //for debugging purposes - cout<<"Record:"<moveWOPrint(minMax(temp, listOfMoves[0], 0)); + + //verification of correct turn + if (b->getTurn() != 'O'){ + cout << "ERROR in Engine::AI: b is on the wrong turn. \n"; + } + b->displayBoard(); cout << "----------------------END AI FUNCTION----------------------\n"; } moves Engine::minMax(Board temp, moves m, int c){ //testing purposes only - if (c > 1000){ + if (c > 5){ return m; } @@ -123,10 +123,13 @@ moves Engine::minMax(Board temp, moves m, int c){ vector listOfMoves = temp.viewPossibleMoves(); for (int i = 0; i < listOfMoves.size(); ++i){ - cout << "listOfMoves[i]: (" << listOfMoves[i].row << ", " << listOfMoves[i].column << ")\n"; - //minMax(temp, listOfMoves[i]); + //return minMax(temp, listOfMoves[i]); } - + + //limited recursion return minMax(temp, listOfMoves[0], ++c); + + //testing + return m; } } \ No newline at end of file diff --git a/Piece.cpp b/Piece.cpp new file mode 100755 index 0000000..6796826 --- /dev/null +++ b/Piece.cpp @@ -0,0 +1,69 @@ +#include +#include "Piece.h" + +using namespace std; + +Piece::Piece(){ + x = -1; + y = -1; + type = '?'; +} + +Piece::Piece(int r, int c){ + x = r; + y = c; + type = '_'; +} + +Piece::Piece(int r, int c, char t){ + x = r; + y = c; + type = t; +} + +void Piece::moveFwd(){ + if (type == 'X'){ + x++; + } + + else if (type == 'O'){ + x--; + } + + else + cout << "Error: trying to move an empty piece forward."; +} + +void Piece::moveLeft(){ + if (type == 'X'){ + x++; + y--; + } + + else if (type == 'O'){ + x--; + y++; + } + + else + cout << "Error: trying to move an empty piece left."; +} + +void Piece::moveRight(){ + if (type == 'X'){ + x++; + y++; + } + + else if (type == 'O'){ + x--; + y--; + } + + else + cout << "Error: trying to move an empty piece left."; +} + +void Piece::isTaken(){ + // +} \ No newline at end of file diff --git a/Piece.h b/Piece.h new file mode 100755 index 0000000..60a3a00 --- /dev/null +++ b/Piece.h @@ -0,0 +1,25 @@ +#pragma once + +using namespace std; + +class Piece { + int x; + int y; + char type; + +public: + Piece(); + Piece(int r, int c); + Piece(int r, int c, char t); + void moveFwd(); + void moveLeft(); + void moveRight(); + int getX(){ return x; } + void setX(int r){ x = r; } + int getY(){ return y; } + void setY(int c){ y = c; } + char getType(){ return type; } + void setType(char t){ type = t; } + void makeEmpty(){ type = '_'; } + void isTaken(); +}; \ No newline at end of file diff --git a/test.cpp b/test.cpp index 65f07dc..fd5452f 100755 --- a/test.cpp +++ b/test.cpp @@ -1,3 +1,4 @@ +#include "Board.h" #include "Engine.h" using namespace std; @@ -6,8 +7,9 @@ int main() { //board testing Board b; + b.displayBoard(); //engine testing - Engine e; - e.startGame(); + //Engine e; + //e.startGame(); }