c# - 在 C# 中意外创建了一个无限 while 循环
问题描述
所以我最近一直在为我正在创建游戏的 A-Level 编程项目学习 C#。我有一个可以在屏幕上移动的精灵,但我希望精灵在被迫停止移动之前只能移动 6 次。我认为我可以通过设置一个每次移动精灵时递减的变量(使用键盘)来做到这一点。但是,我以某种方式创建了一个我不想要的无限循环。我通过 Console.WriteLine(spaceMoved); 发现了这一点 这不会出现在我的最终代码中。我已经尝试了各种各样的事情,但我无法摆脱这个无限循环。顺便说一句,我正在 Windows 窗体应用程序中创建它。
private void Gameplay_KeyDown(object sender, KeyEventArgs e)
{
int spaceMoved = 6;
do
{
int x = placeholder1.Location.X;
int y = placeholder1.Location.Y;
if (e.KeyCode == Keys.Right) x += 64;
else if (e.KeyCode == Keys.Left) x -= 64;
else if (e.KeyCode == Keys.Down) y += 64;
else if (e.KeyCode == Keys.Up) y -= 64;
placeholder1.Location = new Point(x, y);
spaceMoved--;
Console.WriteLine(spaceMoved);
} while (spaceMoved > 0);
解决方案
这不是一个无限循环。您的do while
遗嘱执行 6 次。
但是,您似乎忽略了这样一个事实,即无论何时Gameplay_KeyDown
调用它都会执行 6 次。每次,计数器都会“重置”(此处使用不精确的语言),因此它会再执行 6 次。
如果您希望在单个函数调用之外记住计数器,则必须在函数之外声明它。
这也意味着您不需要do while
函数内部。每个函数都将执行一个移动(只要玩家有移动)。
这些方面的东西:
private int movesLeft = 6;
private void Gameplay_KeyDown(object sender, KeyEventArgs e)
{
if(movesLeft > 0)
{
int x = placeholder1.Location.X;
int y = placeholder1.Location.Y;
if (e.KeyCode == Keys.Right) x += 64;
else if (e.KeyCode == Keys.Left) x -= 64;
else if (e.KeyCode == Keys.Down) y += 64;
else if (e.KeyCode == Keys.Up) y -= 64;
placeholder1.Location = new Point(x, y);
movesLeft--;
Console.WriteLine($"{movesLeft} moves left!");
}
}
推荐阅读
- sql - SQL SUM(案例)错误
- php - 抽象实体子类的学说标准
- python - Pandas 'dupout' 如何查看已删除的重复文件
- r - R-textminig 与 tm 包
- c# - c# [OnPrem CRM] 中的 Dynamics crm retrieveEntityReq (Javascript) 函数
- squid - 带有 SSLbump 和身份验证 403 的 Squid。这是一个封装的请求,不进行身份验证
- ios - 无法设置收集单元
- angular - ng2-chart 仅在光标位于某个位置时刷新
- selenium - Nightwatch 没有获取 sendkeys 值
- xml - 使用 XSLT 提取和更新 XML