我有一个任务,我有一个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
答案 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);
}