//Class function file #include "board.h" //constructor Board::Board(){ playerOneTurn = true; //set move to player one for(int i = 0; i < 9; i++){ //create board boardData[i] = 0; } } //print the board! void Board::printBoard(){ for(int i = 0; i < 9; i += 3){ cout << " " << outputMarker(i) << " | " << outputMarker(i+1) << " | " << outputMarker(i+2) << "\n"; //avoids printing a line at the end of the board if(i != 6){ cout << "-----------\n"; } } } //used by printBoard char Board::outputMarker(int location){ int type = boardData[location]; char returnChar; if(type == 1){ returnChar = 'X'; //X } else if(type == -1) { returnChar = 'O'; //O } else { switch(location + 1){ // No move is in the sector, get the number value of location. case 1: returnChar = '1'; break; case 2: returnChar = '2'; break; case 3: returnChar = '3'; break; case 4: returnChar = '4'; break; case 5: returnChar = '5'; break; case 6: returnChar = '6'; break; case 7: returnChar = '7'; break; case 8: returnChar = '8'; break; case 9: returnChar = '9'; break; default: returnChar = '-'; } } return returnChar; //return results } //Function handler for making a move! bool Board::makeMove(int location){ if(!checkMove(location)) return false; location--; //translate the user interface numbers to array numbers if(playerOneTurn){ //If its player's one turn playerOneTurn = false; //Make it player's two turn next time boardData[location] = 1; //make the move for player one } else { //has to be player two's turn playerOneTurn = true; boardData[location] = -1; //Make the move for player two } return true; } //validates the move wanting to be made bool Board::checkMove(int location){ location--; //translate user input to array numbers if(location < 0 || location > 8 || boardData[location] != 0) //Checks to see if move is on board, and if the spot is empty return false; else return true; } //gets player turn int Board::getTurn(){ if(playerOneTurn) return 1; //1 for player one if(!playerOneTurn) return 2; //2 for player two } //checks to see if there is a winner, returns -1 for cat game int Board::checkWinner(){ int i; //Ill be using this in a lot of loops int value; //used for adding rows, cols, etc //check rows for winner for(i = 0; i < 9; i += 3){ value = boardData[i] + boardData[i+1] + boardData[i+2]; if(value == 3) return 1; //player one won! if(value == -3) return 2; //player two won! } //check cols for a winner for(i = 0; i <= 3; i++){ value = boardData[i] + boardData[i+3] + boardData[i+6]; if(value == 3) return 1; //player one won! if(value == -3) return 2; //player two won! } //check for wins not in cols or rows value = boardData[0] + boardData[4] + boardData[8]; //top left, middle, bottom right if(value == 3) return 1; //player one won! if(value == -3) return 2; //player two won! value = boardData[2] + boardData[4] + boardData[6]; //top right, middle, bottom left if(value == 3) return 1; //player one won! if(value == -3) return 2; //player two won! //check to see if game is over (I.E. No moves left) for(i = 0; i < 9; i++){ if(boardData[i] == 0){ return 0; //Game is not over! keep playing } } //well, noone one, and game is over, call it cat return -1; }