Note that there are some explanatory texts on larger screens.

plurals
  1. POUsing a pointer to dynamically allocate array
    primarykey
    data
    text
    <p>I am trying to use a dynamically allocate an array using a pointer in my tic tac toe game. I am a little confused on how exactly pointers work. We are using the cplusplus.com website as our textbook, and I think the section on pointers is a little confusing for me. Would it be possible to get a explanation of it and possibly help do that to my tic tac toe game? Here is my code:</p> <pre><code>//Sophia Ali // TicTacToe (CS-509 Assignment 5) #include&lt;iostream&gt; #include&lt;cstdlib&gt; using namespace std; enum Status { WIN, DRAW, CONTINUE, QUIT }; void showBoard( const char board[], int boardSize ); // show current state of board Status checkGameState( const char board[] ); // returns WIN or CONTINUE int getHumanSquare( const char board[] ); int getComputerSquare( const char board[] ); bool checkBadSquare( const char board[], int squareNum ); // checks to see if a chosen square is already taken; returns true if // already taken; used by get*Square functions above. int getrandint( int min, int max ); int main() { char board[] = "123456789"; // 10 element char board const int boardSize = 10; Status gameState = CONTINUE; int gametype, squareChoice, turnNum = 0; char currentSymbol; // 'o' or 'x' cout &lt;&lt; "\n This is a Tic Tac Toe program. Choose the type of game: " &lt;&lt; "\n (1) human o vs. human x (2) human o vs. dumb computer x" &lt;&lt; "\n\n -&gt; "; cin &gt;&gt; gametype; /* Show the current state of Tic Tac Toe board. */ showBoard( board, boardSize ); /* Main game loop */ while ( gameState == CONTINUE ) { /* Increment turnNum by 1. */ turnNum++; /* If turnNum equal to 10 Set gameState to DRAW. Break out of while loop. */ if ( turnNum == 10 ) { gameState = DRAW; break; } /* If we are on an odd-numbered turn Print "It's o's turn." Set currentSymbol to 'o'. Call getHumanSquare function to get squareChoice. Else (we are on an even-numbered turn) Print "It's x's turn." Set currentSymbol to 'x'. If the gametype is 1 (human vs. human) Call getHumanSquare function to get squareChoice. Else (gametype is 2 (human vs. computer)) Call getComputerSquare function to get squareChoice.*/ // Get current player's square choice and insert into board if ( turnNum%2 != 0) { cout &lt;&lt; "\n It's o's turn."; currentSymbol = 'o'; squareChoice = getHumanSquare( board ); } else { cout &lt;&lt; "\n It's x's turn."; currentSymbol = 'x'; if ( gametype == 1 ) squareChoice = getHumanSquare( board ); else squareChoice = getComputerSquare( board ); } /* If squareChoice is -1 (human player quit) Set gameState to QUIT. Else Insert currentSymbol into board at (squareChoice - 1). Show the current state of the Tic Tac Toe board. Call checkGameState function to determine the gameState. */ if ( squareChoice == -1 ) gameState = QUIT; else { board[ squareChoice - 1 ] = currentSymbol; showBoard( board, boardSize ); gameState = checkGameState( board ); } } // end while /* If gameState is WIN print "Player " currentSymbol " is the winner." */ /* If gameState is DRAW print "It's a draw." */ if ( gameState == WIN ) cout &lt;&lt; "Player " &lt;&lt;currentSymbol &lt;&lt; " is the winner."; if ( gameState == DRAW ) cout &lt;&lt; "It's a draw."; return 0; } // end main ///////////////////////////////////////////////////////////////////// void showBoard( const char board [], int size ) { cout &lt;&lt; endl; for ( int i = 0; i &lt; size ; i++ ) { cout &lt;&lt; board[ i ] &lt;&lt; " "; if ( ( i + 1 ) % 3 == 0 ) cout &lt;&lt; endl; } cout &lt;&lt; endl; } ///////////////////////////////////////////////////////////////////// Status checkGameState( const char board[] ) { // Board Array // // 1 2 3 0 1 2 // 4 5 6 --&gt; 3 4 5 // 7 8 9 6 7 8 // // Diagonal winners if ( board[ 0 ] == board[ 4 ] &amp;&amp; board[ 0 ] == board[ 8 ] ) return WIN; else if ( board[ 2 ] == board[ 4 ] &amp;&amp; board[ 4 ] == board[ 6 ] ) return WIN; // Horizontal winners else if ( board[ 0 ] == board[ 1 ] &amp;&amp; board[ 1 ] == board[ 2 ] ) return WIN; else if ( board[ 3 ] == board[ 4 ] &amp;&amp; board[ 4 ] == board[ 5 ] ) return WIN; else if ( board[ 6 ] == board[ 7 ] &amp;&amp; board[ 7 ] == board[ 8 ] ) return WIN; // Vertical winners else if ( board[ 0 ] == board[ 3 ] &amp;&amp; board[ 3 ] == board[ 6 ] ) return WIN; else if ( board[ 1 ] == board[ 4 ] &amp;&amp; board[ 4 ] == board[ 7 ] ) return WIN; else if ( board[ 2 ] == board[ 5 ] &amp;&amp; board[ 5 ] == board[ 8 ] ) return WIN; else return CONTINUE; } ///////////////////////////////////////////////////////////////////// int getHumanSquare( const char board[] ) { int squareNum; cout &lt;&lt; "\n Input the number of an empty square: (-1 to quit) "; cin &gt;&gt; squareNum; while ( checkBadSquare( board, squareNum ) == true ) { cout &lt;&lt; "\n Bad input. Choose another square: "; cin &gt;&gt; squareNum; } return squareNum; } ///////////////////////////////////////////////////////////////////// int getComputerSquare( const char board[] ) { int squareNum; squareNum = getrandint( 1, 9 ); while ( checkBadSquare( board, squareNum ) == true ) { squareNum = getrandint( 1, 9 ); } return squareNum; } ///////////////////////////////////////////////////////////////////// bool checkBadSquare( const char board[], int squareNum ) { int realSquareNum = squareNum - 1; // count from 0 if ( squareNum == -1 ) return false; // Let quit code pass as a valid square else if ( squareNum &gt; 9 ) return true; // Square numbers out of range are invalid else if ( board[ realSquareNum ] == 'o' || board[ realSquareNum ] == 'x' ) return true; // Occupied squares are invalid else return false; // Valid square number } ///////////////////////////////////////////////////////////////////// int getrandint( int min, int max ) { int scale, shift; scale = max - min + 1; shift = min; return rand() % scale + shift; } </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload