我正在玩cmd游戏以获得乐趣,而且我遇到了一个问题。我已经在运动和引力方面进行了编码,但是在我最后的if语句中,我试图让角色抓住他的向下运动,如果超过' 219' char或在其他病房一块,它不起作用。如果我试图摔倒它,我最终仍会直接通过该块并删除它。下面是完整的源代码,所以你可以运行它,看看我的意思。
using namespace std;
char Map[10][81] =
{
" ",
" ",
" ",
" ",
" ### ",
" ",
" ",
" ",
" ",
"################################################################################",
};
int main()
{
bool start = true;
char dood('0');
bool print(false);
int x = 1;
int y = 8;
Map [y][x] = dood;
int cnt = 0;
int Height = 0;
int space_below = Map [y + 1][x];
while(start = true)
{
Sleep(20);
system("cls");
for(auto &c: Map)
{
for(auto &d: c)
{
if(d == '#')
{
d = 219;
}
cout << d;
}
cout << endl;
}
cout << "Height: " << Height <<" units";
if(GetAsyncKeyState(VK_RIGHT) != 0)
{
if(x != 79)
{
Map [y][x] = ' ';
x++;
Map [y][x] = dood;
}
}
if(GetAsyncKeyState(VK_LEFT) != 0)
{
if(x != 0)
{
Map [y][x] = ' ';
x--;
Map [y][x] = dood;
}
}
if (GetAsyncKeyState(VK_UP) != 0)
{
if(y < 9 && y > 0)
{
Map[y][x] = ' ';
y--;
Height++;
Map[y][x] = dood;
}
}
if(y < 8 && !GetAsyncKeyState(VK_UP))
{
if(space_below != '219')
{
Map[y][x] = ' ';
y++;
Height--;
Map[y][x] = dood;
}
}
}
return 0;
}
*注意:在这里粘贴它们时,Inlude语句会起作用,但我包含了iostream,windows.h和time.h.
最后一个if语句是我的引力,如果玩家没有举起,并且当space_below,或者他下面的区块不是&#39; 219&#39; ascii字符,但由于某种原因,当我尝试跳到那个平台时,我做了这个并不起作用,那个角色刚刚落下并将块变成一个空格(删除它)!
我对c ++有点新鲜,所以我理解我的错误可能很简单,但我还没能在互联网上找到解决办法。非常感谢任何帮助:)
答案 0 :(得分:2)
答案很简单:您正在将文字'219'
与数字219
进行比较,这不是同一件事。令牌实际上是完全不同的值。编译器没有报告类型错误是巧合。
有关单引号字符串实际是什么的更多详细信息,请参阅this stackoverflow question(我自己也不知道)。