私はC++コンソールゲームを作ろうとしています。ボーダーとして '#'があり、キーボードで移動できる '@'があります。しかし、ボタンを押すと、何も起こりません...この現象を引き起こした原因を突き止めることはできません。GetAsyncKeyState()は動作しません。コンソールゲームを作成します。
#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;
}
キーが押されているかどうかをテストするための正しい方法は、if( 'ですGetAsyncKeyState(...)<0) 'を返します。あなたのコードのロジックに何が間違っているかについては、字下げのために読みにくいです。あなたは本当にそのようなコードをインデントしていますか?あなたのプログラムのデバッグを考えましたか?それが何を意味するのか分からなければ、より多くのコードを書くのを止め、デバッグの仕方を学び始める必要があります。他の活動はあなたの時間を無駄にするだけです。 –
私のコードではありません。このビデオのコードで遊んでいます。https://www.youtube.com/watch?v=kfRjvvgjTNQ&list=PLGxFit7OrNc5jjF5rHPZSCaovAw_FvUiI&index=2 私の主な関心事は、とにかく記号を動かす。 – parsecer
GetAsyncKeyStateを使用すると、コンソールアプリケーションから気になることがあります。ユーザ32のその部分およびその付随機能は、すべて、メッセージループによって管理されるキー構成を処理する。 –