2017-05-19 4 views
0

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 
+0

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

Antwort

0

Sie könnten die Gültigkeit des Umzugs überprüfen Schreiben einer Funktion

// 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) 
    ); 
} 

Dann können Sie nur bewegen, wenn die angeforderte Richtung Sie außerhalb der Grenzen nicht drücken:

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