2015-05-17 54 views
0

对于我的程序,我正在让Pacman!我可以让玩家随键移动,但是我怎么能让玩家自动移动,然后当你按下另一个键时,它就会改变。在一个简短的句子中,如果我按下右箭头键,玩家将自行移动而无需按住按键,如果按下上键,下一个可用角落,玩家将继续向上移动。这是我对玩家的移动代码:C++连续播放器运动

void Controls() 
{ 
    if (GetAsyncKeyState(VK_UP) != 0) 
    { 
     text(Ply_X, Ply_Y, 15, " "); 
     if(Map[Ply_Y-1][Ply_X] == '.'){ Ply_Y--; points++; } else 
     if(Map[Ply_Y-1][Ply_X] == ' ') Ply_Y--; 
     text(Ply_X, Ply_Y, 14, ""); cout << (char)2; 
    } 
    if (GetAsyncKeyState(VK_DOWN) != 0) 
    { 
     text(Ply_X, Ply_Y, 15, " "); 
     if(Map[Ply_Y+1][Ply_X] == '.'){ Ply_Y++; points++; } else 
     if(Map[Ply_Y+1][Ply_X] == ' ') Ply_Y++; 
     text(Ply_X, Ply_Y, 14, ""); cout << (char)2; 
    } 
    if (GetAsyncKeyState(VK_RIGHT) != 0) 
    { 
     text(Ply_X, Ply_Y, 15, " "); 
     if(Map[Ply_Y][Ply_X+1] == '.'){ Ply_X++; points++; } else 
     if(Map[Ply_Y][Ply_X+1] == ' ') Ply_X++; 
     text(Ply_X, Ply_Y, 14, ""); cout << (char)2; 
    } 
    if (GetAsyncKeyState(VK_LEFT) != 0) 
    { 
     text(Ply_X, Ply_Y, 15, " "); 
     if(Map[Ply_Y][Ply_X-1] == '.'){ Ply_X--; points++; } else 
     if(Map[Ply_Y][Ply_X-1] == ' ') Ply_X--; 
     text(Ply_X, Ply_Y, 14, ""); cout << (char)2; 
    } 

} 

回答

1

我看到的是简单地设置一个球员方向,当你按下一个键下来的最简单方法。

因此,您最初会将玩家方向设置为VK_NONE,并且当您按任意键时,您会将玩家方向设置为该键。

然后这些ifs将代替GetAsyncKeyState(VK_UP)!= 0写成:playerDirection == VK_UP。

+0

好吧,它的工作原理。但现在让我说我按下右键,然后下一个回合离开三个街区,然后按下向上键。我的播放器将自动停止。有什么建议么? – ThatAwesomeCoder

+0

它不应该停下来。任何按键应该只设定方向。所以你必须复制你的前4个ifs来设置玩家的方向。 其余的逻辑与以前一样。 这很可能是您复制/粘贴错误的所有分支机构。 :) –

+0

空隙控制() { \t如果 { \t \t PlDir = VK_UP(GetAsyncKeyState(VK_UP)!= 0); } \t if(GetAsyncKeyState(VK_DOWN)!= 0) { \t \t PlDir = VK_DOWN; } \t如果(GetAsyncKeyState(VK_RIGHT)!= 0){ \t \t PlDir = VK_RIGHT; } \t如果 { \t \t PlDir = VK_LEFT(GetAsyncKeyState(VK_LEFT)!= 0); } \t如果(PlDir == VK_UP) {...} 如果(PlDir == VK_DOWN) {...} ... } –