2017-05-19 12 views
0

私は(x、y)の20x40グリッドの割り当てがあります。ユーザーは、矢印キーを使用してこのグリッド内を移動します。グリッドはすべて "。"で始まります。ピリオドとカーソルは目を覚ますスペースを残すので、ユーザーは彼がどこを旅したかを知ることができます。グリッドで複数の罫線を確認する方法

ユーザが文字を入力するたびに、プログラムは矢印キー(ANSII文字72,75,77、および80)かどうかを確認するインストラクタが指定した機能を実行し、そうであればカーソルを移動します。

//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コマンドの上限境界条件を作成することです。 移動機能を変更できないため、割り当てのルールが壊れます。

機能の前にボーダーチェックをスリップさせる方法はありますか?その場合、複数の罫線を同時に確認できますか?

ここには、問題のメインの部分があります。

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

あなたドン'static_cast'が必要で、' char'だけ 'switch'する必要はありません。また、境界外に移動した場合に例外をスローする関数を実装しないで、 'move(0、1)'のようなものを呼び出してx、y(0,1)をそれに応じて移動してください。 – tadman

答えて

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); 
} 
関連する問題