在指定响应之前,C ++用户输入两次

时间:2018-04-20 05:06:29

标签: c++ controls console-application

我正在为我的班级制作一个打鼹鼠的游戏,但我坚持使用基本控件。我设置了一个基本板,使用带有ascii符号边框的数组,O表示孔,X表示锤子。当我去移动锤子时,让我们说向右,我必须按两次让锤子移动,我不知道为什么。它必须经过整个循环2次才能正确地移动锤子。

#include <iostream>
#include <windows.h>

using namespace std;
bool gamerunning = true;
const int num = 20; //width
const int num2 = 40; //height
int x, y, score, perx, pery;
int hole1x, hole1y;
int hole2x, hole2y;
int hole3x, hole3y;
int hole4x, hole4y;

void setup(){
     x= 5;
     y=5;
     hole1x = 15;
     hole1y = 5;
     hole2x = 15;
     hole2y = 10;
     hole3x = 25;
     hole3y = 5;
     hole4x = 25;
     hole4y = 10;
     score = 0;
     perx = 15;
     pery = 6;
}

 //creating board
 void draw(){
     system("cls");

     int i,j;
     char Layout[num][num2];


for (i=0;i<num;i++){
    for (j=0;j<num2;j++){

        //boarder for play area
        if (i==0 && j==0) //Top Left
            Layout [i][j] = 201;
        else if( i==0 && j==num2-1) //top right
            Layout [i][j] = 187;
        else if(i==num-1 && j==0) //bottom left
            Layout [i][j] = 200;
        else if(i ==num-1 && j==num2-1) //bottom right
            Layout [i][j] = 188;
        else if (i==0 || i==num - 1) 
            Layout[i][j]=205;
        else if(j==0 || j==num2-1)
            Layout [i][j] = 186;
        else
            Layout[i][j]=' ';                       


        //holes
        if(i == hole1y && j == hole1x)
            Layout[i][j]= 'O';
        if(i == hole2y && j == hole2x)
            Layout[i][j]= 'O';
        if(i == hole3y && j == hole3x)
            Layout[i][j]= 'O';
        if(i == hole4y && j == hole4x)
            Layout[i][j]= 'O';

        //character
        if(i == pery && j == perx)
            Layout[i][j]= 'X';


        cout << Layout[i][j];
    }

    cout << endl;
  }
}


void input(){

     if(GetAsyncKeyState(VK_RIGHT)){
          if(perx<=15)
               perx +=10;
     }
     if(GetAsyncKeyState(VK_LEFT)){
         if(perx>=25)
               perx -=10;
     }
     if(GetAsyncKeyState(VK_DOWN)){
         if(pery<=10)
               pery +=5;
     }
     if(GetAsyncKeyState(VK_UP)){
         if(pery>=10)
               pery -=5;
     }
     if(GetAsyncKeyState(VK_ESCAPE)){
         gamerunning = false;
     }

}

void logic(){

}


int main(){

     setup();
     while(gamerunning == true){

         draw();
         input();
         logic();
         system("pause>nul");
     }

     system("cls");
     cout << "GAME OVER" << endl;

     return 0;
}

1 个答案:

答案 0 :(得分:0)

这里:

while(gamerunning == true)
{
    draw();
    input();
    system("pause>nul");
    logic();
}

首先绘制游戏板,然后获得输入,直到下一次循环执行才会进行绘制,因此绘图不会更新。

您需要在循环之外(对于初始绘图)将第一个draw调用放在draw之后的循环调用input内。像这样:

draw();
while(gamerunning == true)
{
    input();
    draw();
    system("pause>nul");
    logic();
}