井字计划 [英] Tic Tac Toe Program

查看:121
本文介绍了井字计划的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我必须使用C ++创建一个Tic Tac Toe程序。一切正常,但主要功能我有一个问题。它不会让我从主函数调用任何函数。它也告诉我board和boardize不使用,并且randint不在这个范围内声明。我已经试过离开括号后的函数名为空,不工作,以及。我现在迷路了,这里是我的代码:

I have to create a Tic Tac Toe program using C++. everything is correct however the main function I am having a problem with. It will not allow me to call any of the functions from the main function. It is also telling me board and boardsize are not use, and randint isn't declared in this scope. I have tried leaving the parentheses after the function name empty that does not work as well. I am lost now, here is my code:

/*
   Template for TicTacToe.cpp (CS-509 Assignment 5)

   Fill in the rest of this comment block.
*/


#include<iostream>
using namespace std;

/*
   Game status enumeration
*/
enum Status { WIN, DRAW, CONTINUE, QUIT };


/*
   Function prototypes
*/
// showBoard: Show current state of board
void showBoard( const char board[], int boardSize );
// checkGameState: Returns WIN or CONTINUE
Status checkGameState( const char board[] );
int getHumanSquare( const char board[] );
int getComputerSquare( const char board[] );
// checkBadSquare: Checks to see if a chosen square is already taken; returns
//                 true if already taken; used by getHumanSquare and
//                 getComputerSquare functions above.
bool checkBadSquare( const char board[], int squareNum );
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 << "\n This is a Tic Tac Toe program. Choose the type of game: "
         << "\n (1) human o vs. human x    (2) human o vs. dumb computer x"
         << "\n\n -> ";
    cin  >> gametype;


    /* Show the current state of Tic Tac Toe board. */
    cout << gameState;




    /*
       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.*/
        if ( turnNum%2 != 0)
        {
            cout << "It's o's turn.";
            currentSymbol = 'o';
            int getHumanSquare( )
            {

                return board;
            }
        }
        /* Else (we are on an even-numbered turn)
            Print "It's x's turn."
            Set currentSymbol to 'x'. */
        else
        {
            cout << "It's x's turn.";
            currentSymbol = 'x';
        }


        /*   If the gametype is 1 (human vs. human)
              Call getHumanSquare function to get squareChoice.*/
        if ( gametype == 1 )
        {
            int getHumanSquare( int squareNum )
            {
                return board;
            }
        }

        /* Else (gametype is 2 (human vs. computer))
           Call getComputerSquare function to get squareChoice. */
        else
        {
            int getComputerSquare( int squareNum )
            {
                return board;
            }
        }

        /* If squareChoice is -1 (human player quit)
              Set gameState to QUIT.*/
        if ( squareChoice == -1 )
        {
            gameState = 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. */
        else
        {
            bool checkBadSquare( int squareNum )
            {
                return board;
            }
            Status checkGameState();
        }
    }

    // end while


    /* If gameState is WIN
          print "Player " currentSymbol " is the winner." */
    if ( gameState == WIN)
        cout << "Player " currentSymbol " is the winnter.";

    /* If gameState is DRAW
          print "It's a draw." */
    if ( gameState == DRAW )
        cout << "It's a draw.";

    return 0;
}

/////////////////////////////////////////////////////////////////////

void showBoard( const char board [], int size )
{
    cout << endl;

    for ( int i = 0; i < size ; i++ )
    {
        cout << board[ i ] << " ";
        if ( ( i + 1 ) % 3 == 0 )
            cout << endl;
    }

    cout << endl;
}

/////////////////////////////////////////////////////////////////////

Status checkGameState( const char board[] )
{
    // Board       Array
    //
    // 1 2 3       0 1 2
    // 4 5 6  -->  3 4 5
    // 7 8 9       6 7 8
    //
    // Diagonal winners
    if ( board[ 0 ] == board[ 4 ] && board[ 0 ] == board[ 8 ] )
        return WIN;
    else if ( board[ 2 ] == board[ 4 ] && board[ 4 ] == board[ 6 ] )
        return WIN;
    // Horizontal winners
    else if ( board[ 0 ] == board[ 1 ] && board[ 1 ] == board[ 2 ] )
        return WIN;
    else if ( board[ 3 ] == board[ 4 ] && board[ 4 ] == board[ 5 ] )
        return WIN;
    else if ( board[ 6 ] == board[ 7 ] && board[ 7 ] == board[ 8 ] )
        return WIN;
    // Vertical winners
    else if ( board[ 0 ] == board[ 3 ] && board[ 3 ] == board[ 6 ] )
        return WIN;
    else if ( board[ 1 ] == board[ 4 ] && board[ 4 ] == board[ 7 ] )
        return WIN;
    else if ( board[ 2 ] == board[ 5 ] && board[ 5 ] == board[ 8 ] )
        return WIN;
    else
        // No one has won yet
        return CONTINUE;
}

/////////////////////////////////////////////////////////////////////

int getHumanSquare( const char board[] )
{
    int squareNum;

    cout << "\n Input the number of an empty square: (-1 to quit) ";
    cin  >> squareNum;

    while ( checkBadSquare( board, squareNum ) == true )
    {
        cout << "\n Bad input. Choose another square: ";
        cin >> 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 > 9 )
        return true;   // Square numbers out of range are invalid
    else if ( board[ realSquareNum ] == 'o' || board[ realSquareNum ] == 'x' )
        return true;   // Already taken 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 randint() % scale + shift;
}


推荐答案

int main() {

/* ... lots of other code here ... */

        if ( turnNum%2 != 0)
        {
            /* doesn't call the globally known function getHumanSquare ()
               but defines a new function getHumanSquare local to the scope
               if your compiler allows anyhow.
            */

            int getHumanSquare( )
            {

                return board;
            }
        }

        /* ... still more code here ... */

        if ( gametype == 1 )
        {
            /* same problem again */
            int getHumanSquare( int squareNum )
            {
                return board;
            }
        }

  /* ... I stopped further reading here ... */

您最可能尝试做的是以下内容:

What you are most probably trying to do instead would look like this:

int main() {

/* ... lots of other code here ... */

        if ( turnNum%2 != 0)
        {
            int result;
            result = getHumanSquare (board);

            /*  ... perform some interesting action with the result here */ 
        }

        /* ... I hope you got the point ... */

这样,您可调用 getHumanSquare ,而不是尝试定义一个新的。

This way you'd call the function getHumanSquare instead of trying to define a new one.

这篇关于井字计划的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆