I don't know whats wrong with my do...while loop, its the one at the last functionCode:#include <iostream> #include <vector> using namespace std; // global constants const char X = 'X'; const char O = 'O'; const char EMPTY = ' '; const char TIE = 'T'; const char NO_ONE = 'N'; // game function's prototypes void displayBoard(const vector<char>& board); // function that displays the game board char choosePiece(); // function to let the user choose their pieces char winner(const vector<char>& board); // determines the game winner char firstMove(const char& player1, const char& player2); // function that determines who makes the first move int playerOneMove(const vector<char>& board); // returns the move of player1 int playerTwoMove(const vector<char>& board); // returns the move of player2 bool moveLegal(const vector<char>& board); // determines whether a move is legal int main() { // vector that holds the game board vector<char> board(9, EMPTY); // there are only 9 positions in a tic-tac-toe board so a vector with 9 elements is fine //and initialized all elements with the EMPTY char // show the instructions // this is how the board would look like cout << "\n\n" << 0 << " | " << 1 << " | " << 2 << endl; cout << "---------" << endl; cout << 3 << " | " << 4 << " | " << 5 << endl; cout << "---------" << endl; cout << 6 << " | " << 7 << " | " << 8 << endl; cout << "\n\nThe above is the game board" << endl; cout << "To put your piece in the center of the game board, enter number 4." << "\nTo put your piece elsewhere in the board, then enter its corresponding position" << "\nnumber as illustrated in the diagram above" << endl; char player1, player2; player1 = choosePiece(); // player1 has chosen its piece now chose the opposite piece of player1 for player2 if (player1 == 'X') { player2 = 'O'; } else { player2 = 'X'; } cout << "\n\nPlayer 1's piece is " << player1 << endl; cout << "Player 2's piece is " << player2 << endl; char turn; // variable to store whose turn it is turn = firstMove(player1, player2); // who goes first, returns either X or O cout << "Good luck to both of the players!" << endl; board[0] = X; // while nobody has one the game and its not a tie while (winner(board) == NO_ONE) { int move; if (turn == player1) { move = playerOneMove(board); } } } void displayBoard(const vector<char>& board) { cout << "\n\n" << board[0] << " | " << board[1] << " | " << board[2] << endl; cout << "---------" << endl; cout << board[3] << " | " << board[4] << " | " << board[5] << endl; cout << "---------" << endl; cout << board[6] << " | " << board[7] << " | " << board[8] << endl; } char choosePiece() { cout << "\n\nPiece 1 = X" << endl; cout << "Piece 2 = O" << endl; char piece; cout << "Enter a number to choose your piece [1-2]: " << endl; cin >> piece; if (piece == '1') { return X; } else { return O; } } char winner(const vector<char>& board) { // multi-dimensional array that holds all possible winning rows int WINNING_ROWS[8][3] = { {0, 1, 2}, {3, 4, 5}, {6, 7, 8}, {0, 3, 6}, {1, 4, 7}, {2, 5, 8}, {0, 4, 8}, {2, 4, 6} }; const int TOTAL_ROWS = 8; // there are only 8 possible winning rows // check to see if any winning row has three values that are the same and not empty // then we have a winner and return the value of that row ( either X or O ) for (int i = 0; i < TOTAL_ROWS; i++) { if (board[WINNING_ROWS[i][0]] != EMPTY && board[WINNING_ROWS[i][0]] == board[WINNING_ROWS[i][1]] && board[WINNING_ROWS[i][1]] == board[WINNING_ROWS[i][2]]) { return board[WINNING_ROWS[i][0]]; } } // since no body has won, check for a tie, that is there are no empty squares left const int NUM_OF_POSITIONS = 9; // number of square in the game board int emptyPositions = 0; for (int i = 0; i < NUM_OF_POSITIONS; i++) { if (board[i] == EMPTY) { emptyPositions++; } } // if there are no empty positions left in the board then the game is a tie if (emptyPositions == 0) { return TIE; } else { return NO_ONE; // it's neither a tie nor any player has won the game yet, the game is still remaining } } char firstMove(const char& player1, const char& player2) { char move; cout << "\n\nWho will make the first move? " << player1 << " or " << player2 << " ?" << endl; cout << "Enter "<< player1 << " or " << player2 << " : "; cin >> move; return toupper(move); } int playerOneMove(const vector<char>& board) { int move; do { cout << "Where will you move?" << " (0-" << board.size() - 1 << "): "; cin >> move; } while ((!(move >= 0 && move <= 8)) && (board[move] != EMPTY)); cout << board[0]; cout << "\nExiting playerOneMove function" << endl; }
What I want is that it only exits if the move is between 0-8 and and that the board[move] is EMPTY, well when creating the the vector board I initialized all of its element to EMPTY but after then I initialized the board[0] to X now when at the do...while loop at my last function I enter 0 it exits the loop ? Why ? It shouldn't, because board[0] is equal to X not EMPTY the first condition in the do...while loop is working correctly but not the second one.
What am I doing wrong ?
EDIT: Sorry for the wrong thread name it should be Do...While loop problem



LinkBack URL
About LinkBacks



