如何检查网格上的多个边框

时间:2017-05-19 01:57:47

标签: c++

我有一个任务,我有一个20x40网格的(x,y)位置。用户使用箭头键在此网格中移动。网格以所有“。”开头。句点和光标在其唤醒中留下“”空格,以便用户知道他已经到过的地方。

每次用户输入一个字符时,程序都会运行一个由我的教师给出的功能,检查它是否为箭头键(ANSII字符72,75,77和80),如果是,则移动光标。 / p>

//Take in user input to move around the grid
void Move(char Direction)
{
    switch (static_cast<int>(Direction))
    {
    case 72: //Up arrow
        Screen[xPos][yPos] = ' '; //Wipe out the users current cursor
        xPos--; //Move the users x position on the grid
        Screen[xPos][yPos] = '^'; //Move the users cursor
        break;
    case 80: //Down arrow
        Screen[xPos][yPos] = ' ';
        xPos++;
        Screen[xPos][yPos] = 'V';
        break;
    case 75: //Left arrow
        Screen[xPos][yPos] = ' ';
        yPos--;
        Screen[xPos][yPos] = '<';
        break;
    case 77: //Right arrow
        Screen[xPos][yPos] = ' ';
        yPos++;
        Screen[xPos][yPos] = '>';
        break;
    }
}

我想为光标创建边框。我可以创建一个介于用户输入和函数之间的条件语句,但我不知道如何同时检查多个边框。

我目前的解决方案是为移动函数内的up命令创建一个上边框条件,为down命令创建一个下边框条件等。 这违反了赋值规则,因为我无法修改移动函数。

有没有办法在功能前滑动边框检查,如果有,我可以一次检查多个边框吗?

这是主要部分。

system("cls"); //Clear the screen before printing anything
    cout << "Welcome to cookie pickup. You will move to the cookies by using the arrow keys." << endl; //Program intro
    Game->Print(); //Print the grid out
    cout << "What direction would you like to move in? \n(Move using the arrow keys or type q to quit.) "; //Instructions to the user                                                                                                      
    UserMove = _getche(); //Get one character from the user (Visual Studio 2010 "_getche()" is the new version of "getche()")
    Game->Move(UserMove); //Process the users input

1 个答案:

答案 0 :(得分:0)

你可以检查写一个函数的移动的有效性

// your boundaries
const int TOP = 10;
const int BOT = 0;
const int LEFT = 0;
const int RIGHT = 10;

// the moves
const char MOVE_UP = 72;
const char MOVE_DOWN = 80;
const char MOVE_LEFT = 75;
const char MOVE_RIGHT = 77;

bool isValid(char move){
   return !(
     (yPos == TOP && move == MOVE_UP) ||
     (yPos == BOT && move == MOVE_DOWN) ||
     (xPos == RIGHT && move == MOVE_RIGHT) ||
     (xPos == LEFT && move == MOVE_LEFT)
   );
}

然后,只有在请求的方向没有将您推到边界之外时,您才能移动:

if (isValid(dir)){
     Move(dir);
}