0

所以这有点难以解释,但我会尽力而为。

我正在使用 Windows 上的 Cmd 制作一个 rpg(ish) 游戏以获取图形。我现在基本上只是在制作墙壁和玩家,更新他并重新绘制屏幕。

我的问题是,除非我尝试按住“向下”键,否则运动效果很好。有一个短暂的停顿,然后播放器“跳”到屏幕底部。我不知道为什么会发生这种情况,并且似乎无法将我的问题归结为我的代码的一小部分,所以这就是全部(仍然不是很多代码)。

#include <iostream>
#include <cstring>
#include <cstdlib>
#include<conio.h>
#include<Dos.h>
#include <windows.h>
#define HEIGHT 25
#define WIDTH 80

using namespace std;

void boardLogic();
void renderBoard();
void render();

int seed = 0;
int GameSpeed = 150;
int MovementSpeed = 1500;
bool stopped = false;
bool doneRendering = false;


char board[83][83] = {"###############################################################################",
                      "#1                                                                            #",
                      "#2 @                                                                          #",
                      "#3                                                                            #",
                      "#4                                                                            #",
                      "#5                                                                            #",
                      "#6                                                                            #",
                      "#7                                                                            #",
                      "#8                                                                            #",
                      "#9                                                                            #",
                      "#                                                                             #",
                      "#                                                                             #",
                      "#                                                                             #",
                      "#                                                                             #",
                      "#                                                                             #",
                      "#                                                                             #",
                      "###############################################################################",
                      "#                                                                             #",
                      "#1                                                                            #",
                      "#2                                                                            #",
                      "#3                                                                            #",
                      "#4                                                                            #",
                      "#5                                                                            #",
                      "###############################################################################",

                     };


int main()

{
    system("Color 3");

    while(stopped == false)
    {
        boardLogic();
        system("cls");
        render();
        Sleep(GameSpeed);
    }
}

void renderBoard()
{
    srand(seed);


    for(int x = 0; x < 24; x++)
    {
        cout << board[x];

        for(int y = 0; y < 84; y++)
        {
            if(board[x][y] == '#') board[x][y] = 219;

        }
        cout << endl;

    }
}

void boardLogic()
{
    for(int x = 0; x < 24; x++)
    {
        for(int y = 0; y < 84; y++)
        {
            if(board[x][y] == '#') board[x][y] = 219;
            if(board[x][y] == '@' && doneRendering == true)
            {
                if(GetAsyncKeyState(VK_UP) != 0)
                {
                    if(board[x-1][y] == ' ')
                    {
                        board[x-1][y] = '@';
                        board[x][y] = ' ';
                        break;
                    }
                    Sleep(MovementSpeed);
                    break;
                }
                if(GetAsyncKeyState(VK_RIGHT) != 0)
                {
                    if(board[x][y+1] == ' ')
                    {
                        board[x][y+1] = '@';
                        board[x][y] = ' ';
                        break;
                    }
                    Sleep(MovementSpeed);
                    break;
                }
                if(GetAsyncKeyState(VK_LEFT) != 0)
                {
                    if(board[x][y-1] == ' ')
                    {
                        board[x][y-1] = '@';
                        board[x][y] = ' ';
                        break;
                    }
                    Sleep(MovementSpeed);
                    break;
                }
                if(GetAsyncKeyState(VK_DOWN) != 0)
                {
                    if(board[x+1][y] == ' ')
                    {
                        board[x+1][y] = '@';
                        board[x][y] = ' ';
                        break;
                    }
                    Sleep(MovementSpeed);
                    break;
                }

            }
        }

    }
}

void render()
{
    doneRendering = false;
    renderBoard();
    doneRendering = true;
}
4

2 回答 2

0

那么 down-event 的逻辑与其他事件的逻辑不同,您是否尝试过更改它以使其与 up 类似?即删除对渲染的调用。

于 2013-08-12T05:45:59.283 回答
-2

我通过使用 switch 语句而不是“if”解决了我的问题。我不知道为什么这会奏效,但实际上它确实可以完美地工作。

于 2013-08-12T06:19:10.567 回答