現在、ユーザーがキーボードの矢印キーを使用して画面上でヘビを操作する、古典的なヘビのようなゲームを作成しようとしています。これまでのところ、動きとキーボード コントロールを指示するコードをうまく整理できましたが、これらのコードをマージしようとすると問題が発生しました。
ヘビを動かすために、矢印キーごとに個別のバックグラウンド ワーカー ループを使用しています。
public void worker_DoWork(object sender, DoWorkEventArgs e)
{
for (int i = 0; i < 1000; i++)
{
if (abortloop == true)
{
worker2 = null;
worker3 = null;
worker4 = null;
break;
}
while (Snake1.Top - 5 >= 8)
{
{
this.Invoke((MethodInvoker)delegate()
{
Snake1.Top = Snake1.Top - 5;
Refresh();
});
System.Threading.Thread.Sleep(500);
}
}
}
}
バックグラウンド ワーカーはキーボード入力から呼び出されます。
else if (e.KeyCode == Keys.W)
{
abortloop2 = true;
abortloop3 = true;
abortloop4 = true;
if (worker == null && abortloop == true)
{
abortloop = false;
worker = new BackgroundWorker();
worker.DoWork += new DoWorkEventHandler(worker_DoWork);
worker.RunWorkerAsync();
}
}
このコードはすべて、いわばプログラムに致命的なエラーを生成しませんが、ヘビに別の方向に移動するように命令すると (この場合、現在下に移動しているとしましょう。私は右矢印キーを押します)、ヘビは動き始めます。適切な方向に移動するだけでなく、前と同じ方向に移動することもできます (右矢印キーを押すと、ヘビは、私が望むように右だけではなく、斜めに移動し始めます)。この問題は、すべてのキー入力に対して 1 つのバックグラウンド ワーカーを使用するだけで同じ問題が発生するため、4 つの個別のバックグラウンド ワーカーが存在することに起因するものではありません。
ここで誰かが助けてくれたら、それは素晴らしいことです。
前もって感謝します!