如何阻止角色在控制台中移动? 对不起,标题很混乱,我在C++上很新,我在命令行中做迷宫游戏。它基本上工作得很好,但每当我移动我的角色(或在那一行写任何其他内容)时,它就会移动写回的任何内容,这使得解决迷宫变得相当困难
我一直在修改本教程中的代码,但似乎没有这个问题(尽管我确信我正确地遵循了它)。 我用C++编写Visual Studio 2017如何阻止角色在控制台中移动? 对不起,标题很混乱,我在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]={假,假,假,假,假,假,假,假,假,假,假,假,假,假,假,假,假,假,假,
#包括
#包括
#包括
#包括
使用名称空间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;i cout在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标题,看起来作为标准库中未包含的旧标题,因此我无法使用它。