Ich habe eine Zuordnung, in der ich ein 20x40 Raster von (x, y) Standorten habe. Der Benutzer bewegt sich in diesem Raster mit den Pfeiltasten. Das Gitter beginnt wie alle "." Perioden und der Cursor hinterlässt "" Leerzeichen, so dass der Benutzer weiß, wohin er bereits gereist ist.So überprüfen Sie mehrere Grenzen auf einem Raster
Jedes Mal, wenn der Benutzer ein Zeichen eingibt, führt das Programm eine von meinem Lehrer angegebene Funktion aus, die prüft, ob es eine Pfeiltaste ist (ANSII-Zeichen 72, 75, 77 und 80), und wenn ja, bewegt es den Cursor.
//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;
}
}
Ich möchte Grenzen für den Cursor erstellen. Ich kann eine bedingte Anweisung erstellen, die zwischen der Eingabe des Benutzers und der Funktion liegt, aber ich weiß nicht, wie mehrere Rahmen gleichzeitig überprüft werden.
Meine aktuelle Lösung besteht darin, einen oberen Rand für den Befehl up in der Bewegungsfunktion, einen unteren Rand für den Befehl down usw. zu erstellen. Das bricht die Regeln der Zuweisung, da ich die Verschiebungsfunktion nicht ändern kann.
Gibt es eine Möglichkeit, einen Grenz-Check vor der Funktion einzulegen, und wenn ja, kann ich mehrere Rahmen gleichzeitig prüfen?
Hier ist der Teil der wichtigsten in Frage.
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
Sie don 'tust' 'static_cast', nur' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '_' Auch warum implementieren Sie nicht eine Funktion, die eine Ausnahme auslöst, wenn Sie außerhalb der Grenzen bewegen, dann rufen Sie etwas wie 'move (0, 1)', um x, y (0,1) entsprechend zu verschieben. – tadman