Ich versuche, ein C++ - Konsolenspiel zu machen - es gibt eine Karte mit '#' als Rahmen und einem '@', das über die Tastatur verschoben werden kann. Aber wenn man den Knopf drückt, passiert nichts ... Kann nicht herausfinden, was dieses Verhalten verursacht haben könnte.GetAsyncKeyState() funktioniert nicht, macht ein Konsolenspiel
#include <iostream>
#include <windows.h>
using namespace std;
char Map[10][10]={ "#########",
"# #",
"# #",
"# #",
"# #",
"# #",
"# #",
"# #",
"#@ #",
"#########"};
int Gamespeed=100;
int lvl=0;
bool stopgame=false;
int main()
{
while (stopgame==false)
{
system("cls");
for (int y=0; y<10; y++)
{
cout<<Map[y]<<endl; //rows
}
for (int y=0; y<10; y++) //rows
for (int x=0; x<10; x++) //columns
{
switch (Map[y][x])
{
case '@':
{ cout<<"@ here";
if (GetAsyncKeyState(VK_UP)!=0)
{ cout<<"Key up";
int y2=y-1;
switch (Map[y2][x])
{
case ' ':
{
Map[y][x]=' ';
y--;
Map[y][x]='@';
}
break;
}
}
if (GetAsyncKeyState(VK_DOWN)!=0)
{
switch (Map[y+1][x])
{
case ' ':
{
Map[y][x]=' ';
y++;
Map[y][x]='@';
}
break;
}
}
if (GetAsyncKeyState(VK_RIGHT)!=0)
{
switch (Map[y][x+1])
{
case ' ':
{
Map[y][x]=' ';
x++;
Map[y][x]='@';
}
break;
}
}
if (GetAsyncKeyState(VK_LEFT)!=0)
{
switch (Map[y][x-1])
{
case ' ':
{
Map[y][x]=' ';
x--;
Map[y][x]='@';
}
break;
}
}
}
}
}
return 0;
}
Der richtige Weg zu testen, ob eine Taste gedrückt ist, ist 'if (GetAsyncKeyState (...) <0) '. Was mit der Logik Ihres Codes nicht stimmt, ist aufgrund der Einrückung sehr schwer zu lesen. Riefst du deinen Code wirklich so ein? Haben Sie daran gedacht, Ihr Programm zu debuggen? Wenn Sie nicht wissen, was das bedeutet, müssen Sie aufhören, mehr Code zu schreiben und zu lernen, wie man debuggt. Jede andere Aktivität ist einfach eine Verschwendung Ihrer Zeit. –
Es ist nicht wirklich mein Code, ich spiele nur mit dem Code aus diesem Video, https://www.youtube.com/watch?v=kfRjvvgjTNQ&list=PLGxFit7OrNc5jjF5rHPZSCaovAw_FvUiI&index=2 Mein Hauptanliegen ist es zu studieren, wie man mit dem umgehen Tastatureingabe und das Symbol bewegt sich trotzdem. – parsecer
Die Verwendung von GetAsyncKeyState macht mir Sorgen aus einer Konsolenanwendung. Sein Teil des Benutzers 32 und seine Begleitfunktionen befassen sich alle mit dem Schlüsselstatus, der von der Nachrichtenschleife verwaltet wird. –