Необработанное исключение в текстовой игре

0

Я пытаюсь сделать простую текстовую игру. Когда программа достигает 0, я получаю необработанное исключение... нарушение доступа. Когда я комментирую функции создания платы и дисплея, я не получаю ошибку. Дайте мне знать, если увидите что-нибудь еще, что выглядит уродливым.

class character
{
public:
    bool alive;
    bool exit;
    int row;
    int col;

    character()
    {
    alive = true;
    exit = false;
    row = 0;
    col = 0;
    }



    void receiveMove()
    {
        char a;
        cout<<"Move to the exit with w,a,s,d:";
        cin>>a;
        switch(a)
        {
        case ('w'):
            row -= 1;
            break;
        case ('a'):
            col -= 1;
            break;
        case ('s'):
            row += 1;
            break;
        case ('d'):
            col += 1;
            break;
        default:
            cout <<"Invalid Move";
        }

    }

};


class game
{


public:
    int board[10][10];



    void generateBoard()
    {
        for(int i = 0; i<10; i++)
        {
            for(int j = 0; j<10; j++)
            {
                board[i][j] = 0;
            }
        }

        for(int i = 0; i<3; i++)
        {
            int trap = rand()%99+1;
            int row = trap/9;
            int column = trap%9;
            board[row][column] = 1;

        }


        board[9][9] = 2;                                            //set last square as exit
    }


    void displayBoard(int charRow, int charCol, bool &alive, bool &exit)
    {
        ClearScreen();
        for(int i=0; i<10; i++)
        {
            for(int j=0; j<10; j++)
            {
                if(i == charRow && j == charCol)
                {
                cout << "X ";
                    if(board[i][j] == 1)
                    {
                        alive = false;
                    }
                    if(board[i][j] == 2)
                    {
                        exit = true;
                    }
                }
                else
                {
                cout << board[i][j]<< " ";
                }
            }
            cout << "\n";
        }


    }

void checkForWin(bool exit)
{
    if(exit)
    {
        cout <<"You win";
    }
}

void checkForDead(bool alive)
{
    if(!alive)
    {
        cout <<"You dead";
    }
}



};



int main()
{
    character Player;
    game Game;


    Game.generateBoard();
    Game.displayBoard(Player.row,Player.col,Player.alive,Player.exit);
    while(Player.alive && !Player.exit)
    {
    Player.receiveMove();
    Game.displayBoard(Player.row,Player.col,Player.alive,Player.exit);
    }
    Game.checkForWin(Player.exit);
    Game.checkForDead(Player.alive);


    return 0;
}
  • 1
    Вы отлаживали свою программу с помощью отладчика? Также вам нужно указать вход, который вы использовали.
  • 0
    Он падал каждый раз, когда игра заканчивалась. Неважно, вход. Да, я использовал Microsoft Visual Studio 2010.
Теги:
console
unhandled-exception

2 ответа

0
Лучший ответ

Эта строка

int row = trap/9;

может привести к тому, что row будет больше 9 (например, если ловушка равна 90 или более), которая переполнит ваш массив. Измените его на

int row = trap/10;
int column = trap%10;
  • 0
    Благодарю. Я смущен, я пропустил это.
0

Ну, во фрагменте

int trap = rand()%99+1;
int row = trap/9;
int column = trap%9;
board[row][column] = 1;

вы назначаете случайное значение trap между 1 и 99. Так как в этом случае row будет получить значение 11, вы бы вне границ массива board.

EDIT: вам нужно разделить на 10, размер вашей доски.

  • 0
    Имеет смысл. Ребята, вы знали, что нужно искать ошибку массива на основе сообщения?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню