Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何阻止角色在控制台中移动? 对不起,标题很混乱,我在C++上很新,我在命令行中做迷宫游戏。它基本上工作得很好,但每当我移动我的角色(或在那一行写任何其他内容)时,它就会移动写回的任何内容,这使得解决迷宫变得相当困难_C++_Visual Studio_Visual C++ - Fatal编程技术网

如何阻止角色在控制台中移动? 对不起,标题很混乱,我在C++上很新,我在命令行中做迷宫游戏。它基本上工作得很好,但每当我移动我的角色(或在那一行写任何其他内容)时,它就会移动写回的任何内容,这使得解决迷宫变得相当困难

如何阻止角色在控制台中移动? 对不起,标题很混乱,我在C++上很新,我在命令行中做迷宫游戏。它基本上工作得很好,但每当我移动我的角色(或在那一行写任何其他内容)时,它就会移动写回的任何内容,这使得解决迷宫变得相当困难,c++,visual-studio,visual-c++,C++,Visual Studio,Visual C++,我一直在修改本教程中的代码,但似乎没有这个问题(尽管我确信我正确地遵循了它)。 我用C++编写Visual Studio 2017 #包括 #包括 #包括 #包括 使用名称空间std; 博尔加梅结束,胜利//游戏结束或胜利的条件 const int width=20//迷宫宽度 const int height=20//迷宫高度 整数x,y,endX,endY//不同物体的坐标 bool mazeWallX[20]={假,假,假,假,假,假,假,假,假,假,假,假,假,假,假,假,假,假,假,

我一直在修改本教程中的代码,但似乎没有这个问题(尽管我确信我正确地遵循了它)。 我用C++编写Visual Studio 2017

#包括
#包括
#包括
#包括
使用名称空间std;
博尔加梅结束,胜利//游戏结束或胜利的条件
const int width=20//迷宫宽度
const int height=20//迷宫高度
整数x,y,endX,endY//不同物体的坐标
bool mazeWallX[20]={假,假,假,假,假,假,假,假,假,假,假,假,假,假,假,假,假,假,假,假,假,假}//一层层的墙将构成迷宫,布尔状态表示哪里有墙,哪里没有墙。
布尔·马泽瓦利[20]={真,真,真,真,假,假,真,真,真,真,真,真,真,真,真,真,真,真,真,真,真,真,假};
bool mazeWallX2[20]={假,假,假,假,假,假,假,假,假,假,假,假,假,假,假,假,假,假,假,假};
bool mazeWallY2[20]={真,真,真,真,真,假,假,真,真,真,真,真,真,真,真,真,真,假,真,真,真,真,真};
bool mazeWallX3[20]={假,假,假,假,假,假,假,真,假,假,假,假,假,假,假,假,假,假,假};
bool mazeWallY3[20]={false,false,true,true,true,true,true,true,false,false,true,true,true,true,true};
bool mazeWallX4[20]={false,false,false,false,false,false,false,false,false,false,false,false,false,true,false,false,false,false,false,false};
bool mazeWallY4[20]={真,真,真,真,真,假,假,假,假,假,假,假,假,假,假,假,假,假,假,假};
bool mazeWallX5[20]={false,false,false,false,false,false,false,false,false,false,false,false,false,true,false,false,false,false,false,false};
bool mazeWallY5[20]={真,真,真,真,真,假,假,假,假,假,假,假,假,假,假,假,假,假,假,假};
枚举eDirection{STOP=0,左、右、上、下};
编辑主任;
void Setup()//在游戏开始时发生,设置初始条件。
{
gameover=false;
赢=假;
dir=停止;
x=1;
y=1;
endX=18;
endY=18;
}
void Draw()//在命令行中绘制棋盘上的玩家和墙壁。
{
系统(“cls”);
对于(int i=0;icout在for循环中给出屏幕端点的条件,就像在图形中一样,我们可以给getmaxx()自动检测x坐标屏幕的最大长度,就像这样,您可以添加头文件

graphics.h##头文件


然后使用getmaxx()检测x,然后使用getmaxy()检测y,如果它不起作用,您可以使用它,然后对我进行注释。我将自己尝试。

好的,我想我已经解决了

void Draw() //Draws the player and walls on board, in command line.
{
    system("cls");
    for (int i = 0; i < width+2; i++) //Draws top boarder
        cout << "#";
    cout << endl;

    for (int i = 0; i < height; i++) //Draws vertical walls, exit and player
    {
        for (int j = 0; j < width; j++)
        {
            if (j == 0 || (mazeWallX[j]&&mazeWallY[i]) || (mazeWallX2[j] && mazeWallY2[i]) || (mazeWallX3[j] && mazeWallY3[i]) || (mazeWallX4[j] && mazeWallY4[i]) || (mazeWallX5[j] && mazeWallY5[i])) //Will draw a wall as indicated by the
                cout << "#";

            else if (i == y && j == x) //Draws player
                cout << "O";
            else if (i == endY && j == endX) //Draws exit
                cout << "E"; 
            else
                cout << " ";

            if (j == width - 1)
                    cout << "#";

        }
        cout << endl;
    }

    for (int i = 0; i < width+2; i++) //Bottom wall
        cout << "#";
    cout << endl;

}
void Draw()//在命令行中绘制棋盘上的玩家和墙壁。
{
系统(“cls”);
对于(int i=0;i你可能不喜欢它,但常规终端API主要适用于数据的线性记录,而不是交互式输入。如果你想在游戏中使用它,最好使用类似ncurses的东西,或者完全抛弃本机终端,使用带有“direct”的图形化终端字符访问。你应该看看像ncurses这样的库,它们允许你在终端上使用字符进行绘制。另外,我的经验很老,所以可能会有更新的库更好。问问自己,“我每次通过
j
循环向终端写入多少个字符?我应该写入多少个?”它们应该是相同的数字,但不是。我得到了很多对Ncurses的支持,但有几个问题,因为我有点困惑,它是一个标准库吗?我很想使用它,但对于这篇文章,我只能使用标准。或者使用Windows控制台功能。谢谢你的回答,我已经查看了graphics.h标题,看起来作为标准库中未包含的旧标题,因此我无法使用它。