C++ 允许用户在迷宫游戏中最多移动五个空格

C++ 允许用户在迷宫游戏中最多移动五个空格,c++,maze,C++,Maze,我试图允许用户输入类似“w2”或“w5”的内容,并在迷宫中向上移动那么多空间。目前的问题是,每当控制台看到输入了“w”字符时,它都会向上移动一个空格,不管后面是什么。它还将显示无效移动,正如您将看到的默认情况 我认为这是一件相当容易实现的事情,但我只是做错了。我试着简单地做moved=floor->move_to_x_y*这个,-2,0,但这不起作用 以下是我正在使用的函数: void Player::move (Game & game) { char c; Floor * flo

我试图允许用户输入类似“w2”或“w5”的内容,并在迷宫中向上移动那么多空间。目前的问题是,每当控制台看到输入了“w”字符时,它都会向上移动一个空格,不管后面是什么。它还将显示无效移动,正如您将看到的默认情况

我认为这是一件相当容易实现的事情,但我只是做错了。我试着简单地做moved=floor->move_to_x_y*这个,-2,0,但这不起作用

以下是我正在使用的函数:

void Player::move (Game & game)
{   
char c;
Floor * floor;
bool    moved = false;

floor = game.get_curr_floor();
do
{   cout << "Enter move: ";
    cin >> c;
    switch (c)
    {
    case 'w':
        moved = floor->move_to_x_y (*this, -1, 0);
        break;
    case 'a':
        moved = floor->move_to_x_y (*this, 0, -1);
        break;
    case 's':
        moved = floor->move_to_x_y(*this, 1, 0);
        break;
    case 'd':
        moved = floor->move_to_x_y(*this, 0, 1);
        break;
    case 'w2':
        moved = floor->move_to_x_y (*this, -2, 0); //testing moving 2
    case 'w3':
        moved = floor->move_to_x_y (*this, -3, 0); //testing moving 3
    default:
        cout << "Not a valid move" << endl;
    }
}
while (! moved);
}
以下是move_to_x_y函数:

bool Floor::move_to_x_y (Character & character, int x_adj, int y_adj)
{   
char save_next;
int x, y;

x = character.get_x();
y = character.get_y();
if (! legal_move(x + x_adj, y + y_adj))
    return false;
save_next = tiles[x+x_adj][y+y_adj];
tiles[x+x_adj][y+y_adj] = character.get_sym();
tiles[x][y] = ' ';
character.set_position (x+x_adj, y+y_adj);
cout << "Moved " << character.get_sym() << " to " << x+x_adj << "," << y+y_adj << endl;
return true;
}
我感谢所有的帮助!谢谢

开关c { 案例“w”:

“single”表示条目是单个字符。因此,您不能有“w2”字符,因此只能获取您输入的第一个字符。将值输入字符数组c[]使用c[0]作为方向,使用c[1]作为空格数


此外,由于您正在读取一个字符,您的cin只会获取第一个字符。

您的问题是您将输入作为字符获取:

char c;

...
...
    cin >> c;
...
...
这只允许存储单个字符。要表示多个字符,您必须将chat更改为std::string,这将需要按enter键,或者您或您需要记住上一次按键并在下一次按键时处理它…例如:如果最后一次按键='d'和当前按键='2',则mov两个步骤都不太理想。你对用户界面的实际要求是什么?也许有一种更简单/更好的用户交互方法可以帮助解决这个问题

根据反馈,如下所示:

int main()
{
    std::string cmd;

    do
    {
        // Input a string
        std::cin >> cmd;

        // Number of moves to make
        int moves = 1;
        int xDir = 0;
        int yDir = 0;

        // Behavoir based on length of input is different
        switch (cmd.size())
        {
        case 2:
            // Number of moves present, override default moves
            if (cmd[1] < '1' || cmd[1] > '5')
                continue;

            // Valid, update moves and fall thu to get direction
            moves = cmd[1] - '0';

        case 1:
            // Deal with the direction
            switch (cmd[0])
            {
            case 'a':
                xDir = -1;
                break;
            case 'd':
                xDir = 1;
                break;
            case 'w':
                yDir = -1;
                break;
            case 's':
                yDir = 1;
                break;
            default:
                // Invalid input
                continue;
            }

            // If we are here we have a valid move count and direction
            std::cout << "xdir = " << xDir*moves << ", ydir = " << yDir*moves << std::endl;
        }
    }
    while (cmd != "q");
}

我们现在输入一个字符串。如果字符串的长度为一个字符,我们假定默认值为1步。如果字符串的长度为两个字符,我们假定其为第二个字符,并假定其为步骤数。额外的复杂性仅限于验证和错误处理。

要求允许用户输入“w”或“w2”、w3等。他们可以n也输入s和d,a2、s3、d5等作为可能的输入。因此基本上每转1-5个空格,最多5个。谢谢!