>

C ++에서 뱀 게임을 만들려고합니다. 대부분의 경우 작동하지만 뱀이 원래 크기로 줄어들고 벽 등을 치면 게임을 잃을 수없는 치트 모드를 구현하려고합니다. 치트 키를 누를 때의 문제는 "else if"를 올바르게 실행하지만 "else"도 바로 실행합니다. 화살표 키를 누르면 다른 키가 제대로 건너 뜁니다. 치트 키를 누를 때만 가능합니다.

#include <iostream> 
#include <iomanip> 
#include <conio.h> 
#include <cassert> 
#include <string>
#include <sstream>
#include <vector>
using namespace std;
//constants
const int  UP(72);          //up arrow
const int  DOWN(80);        //down arrow
const int  RIGHT(77);       //right arrow
const int  LEFT(75);        //left arrow
const char QUIT('Q');       //to end the game
const char CHEAT('C');      //to activate cheat mode
int main()
{
    //protoypes
    bool isArrowKey(const int k);
    bool isCheatKey(const int k);
    bool wantsToQuit(const int k);
    int  getKeyPress();
    string message = "";
    //body
    system("CLS");
    int key;                                    //current key selected by player
    do {
        key = getKeyPress();                    //read in  selected key: arrow or letter command
        if (isArrowKey(key))
        {
        }
        else if (isCheatKey(key))
        {
            message = "cheat on";
        }
        else
        {
            message = "INVALID KEY!";           //set 'Invalid key' message
        }
    } while (!wantsToQuit(key));                //while user does not want to quit
    return 0;
}
// additional needed functions
int getKeyPress()
{ //get key or command selected by user
  //KEEP THIS FUNCTION AS GIVEN
    int keyPressed;
    keyPressed = _getch();          //read in the selected arrow key or command letter
    while (keyPressed == 224)       //ignore symbol following cursor key
        keyPressed = _getch();
    return keyPressed;
}
bool isArrowKey(const int key)
{  
    return (key == LEFT) || (key == RIGHT) || (key == UP) || (key == DOWN);
}
bool isCheatKey(const int key)
{   //check if the user wants to cheat (when key is 'C' or 'c')
    return toupper(key) == CHEAT;
}
bool wantsToQuit(const int key)
{   //check if the user wants to quit (when key is 'Q' or 'q')
    return toupper(key) == QUIT;
}

화살표 키를 사용할 때와 같이 else를 건너 뛰기를 기대하지만 인생에서 왜 두 명령문을 실행하는지 알 수 없습니다. 이것에 대한 해결책은 매우 간단하지만 어떤 도움이라도 감사하겠습니다.


  • 답변 # 1

    나는 _getch ()를 _getwch ()로 대체 하여이 문제를 해결했습니다. 분명히 _getwch ()는 더 분명한 값을 반환 할 수 있으므로 내가 겪고있는 문제를 해결하는 것처럼 보였습니다.

  • 답변 # 2

    주요 작업에서 3 가지 가능한 조건의 if 루프가 있습니다. 도 1에서, 키는 제어 키이다. 2, 키는 치트 키입니다. 그렇지 않으면 3입니다. 마지막으로 종료 키인지 여부를 확인하지 않으므로 종료 키에서 "유효하지 않은 키"가 항상 인쇄됩니다.

  • 이전 javascript - loadImage () 함수에서 리디렉션을 따르십시오
  • 다음 date - 1 년 동안 시간 범위 내에있는 데이터를 Oracle DB에 쿼리