0

これを説明するのはちょっと難しいですが、最善を尽くします。

グラフィック用のウィンドウで 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