Хранение местоположений в массиве в качестве переменной, которая будет изменена в операторе if - PullRequest
0 голосов
/ 31 июля 2010

Есть ли способ сохранить введенные пользователем значения x и y в месте для массива.

У меня есть это:

if (x == 1 && y == 1)
        {
            board[0][0] = playerMarker;
        } 

Я хочу сделать так, чтобы x и y сохранялись в переменной, которая соответствует имени точки в массиве.

Но я хочу попробовать сделать так:

if (currentMove == '1' && squareOne == '1')
                squareOne = playerMarker;

Это код, который я видел выше. Код ниже мой.

void playerMove(char* CurrentPlayer, char (&board)[3][3], char &playerMarker)
    {
        bool bValidMove;
        int x,y;
    // Prompt the player for a move
    cout << "Player " << CurrentPlayer << "'s move:" << endl;



    // Loop until we get a valid move
    do 
    {
        cout << "Please enter the row number for the place you wish to mark: " << endl;
        cin >> x;
        cout << "Please enter the column number for the place you wish to mark" << endl;
        cin >> y;
        bValidMove = true;

        // Check for a valid move
        if (x == 1 && y == 1)
        {
            board[0][0] = playerMarker;
        } 
        else if (x == 1 && y == 2) 
        {
            board[0][1] = playerMarker;
        } 
        else if (x == 1 && y == 3) 
        {
            board[0][2] = playerMarker;
        }
        else if (x == 2 && y == 1) 
        {
            board[1][0] = playerMarker;
        }
        else if (x == 2 && y == 2)
        {
            board[1][1] = playerMarker;
        }
        else if (x == 2 && y == 3)
        {
            board[1][2] = playerMarker;
        }
        else if (x == 3 && y == 1)
        {
            board[2][0] = playerMarker;
        }
        else if (x == 3 && y == 2)
        {
            board[2][1] = playerMarker;
        }
        else if (x == 3 && y == 3) 
        {
            board[2][2] = playerMarker;
        }
        else 
        {
            cout << "Invalid Move. Try again." << endl;
            bValidMove = false;
        }

    } 
    while (!bValidMove);

}

Это код, который я пытаюсь сделать своим собственным.

// Ask current player for a move
        cout << currentPlayer << "'s move: ";
        bool validMove;
        // Loop until a valid move is chosen
        do
        {
            char currentMove;
            cin >> currentMove;
            validMove = true;

            // Check for a valid move
            if (currentMove == '1' && squareOne == '1')
                squareOne = playerMarker;
            else if (currentMove == '2' && squareTwo == '2')
                squareTwo = playerMarker;
            else if (currentMove == '3' && squareThree == '3')
                squareThree = playerMarker;
            else if (currentMove == '4' && squareFour == '4')
                squareFour = playerMarker;
            else if (currentMove == '5' && squareFive == '5')
                squareFive = playerMarker;
            else if (currentMove == '6' && squareSix == '6')
                squareSix = playerMarker;
            else if (currentMove == '7' && squareSeven == '7')
                squareSeven = playerMarker;
            else if (currentMove == '8' && squareEight == '8')
                squareEight = playerMarker;
            else if (currentMove == '9' && squareNine == '9')
                squareNine = playerMarker;
            else
            {
                cout << "Invalid Move. Try again: ";
                validMove = false;
            }
        } while ( !validMove );

Ответы [ 2 ]

1 голос
/ 31 июля 2010

хорошо, это всего лишь предположение о том, что вы хотите, но здесь это так:

do 
{
    cout << "Please enter the row number for the place you wish to mark: " << endl;
    cin >> x;
    cout << "Please enter the column number for the place you wish to mark" << endl;
    cin >> y;
    bValidMove = true;

    int xx = x-'1';
    int yy = y-'1';

    if ( xx < 0 || xx > 2 || yy < 0 || yy > 2 )
    {
            cout << "Invalid Move (outside board). Try again: ";
            validMove = false;
    } else if ( board[xx][yy] == 0 ) {
            board[xx][yy] = playerMarker;
    } else {
            cout << "Invalid Move (position already taken). Try again: ";
            validMove = false;
    }

и т. Д.

Это предполагает, что доска представляет собой массив 3x3, содержащий 0, когда позицияне берется игроком, и принимает в качестве входных данных строку 1/2/3 и столбец 1/2/3.

Надеюсь, это поможет ...

0 голосов
/ 31 июля 2010

Вы можете сделать

char& squareOne = board[0][0];
char& squareTwo = board[0][1];
char& squareThree = board[0][2];
char& squareFour = board[1][0];
...

. Амперсанд (&) означает, что squareFour - это ссылка на плату [1] [0] (они разделяют одну и ту же базовую память, поэтому при изменении одного происходит изменение обоих).

Обратите внимание, что вместо 9 'if, вы можете вычислить строку / столбец и установить board[row][column] = playerMarker (строка и столбец могут быть для вас обратными)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...