所以我正在用Windows窗体制作游戏。不过,我遇到了一点麻烦。当球员触摸篮球时,我希望篮球改变到另一个车道。因此,为了做到这一点,我使用了random和.next(1,4)方法。
出于某种原因,有时篮球会和球员出现在同一条道路上,我已经尽一切努力来检查它,但无济于事。
这里是代码:
private void Hlocal(object sender, EventArgs e)
{
// If the player is touching the basketball
if (Halsey.Location.X == Basketball.Location.X)
{
scorenum += 1; // Score
Score.Text = $"Score: {scorenum}"; // Scoreboard
Broad = rnd.Next(1, 5); // Picks a random road
label1.Text = $"{Broad}"; // for debugging
// After it chooses a road I place it on the road
switch (Broad)
{
case 1:
Basketball.Location = new Point(57, Basketball.Location.Y);
break;
case 2:
Basketball.Location = new Point(263, Basketball.Location.Y);
break;
case 3:
Basketball.Location = new Point(469, Basketball.Location.Y);
break;
case 4:
Basketball.Location = new Point(675, Basketball.Location.Y);
break;
}
}
}
一些澄清:
Hlocal是一个称为玩家移动的事件。
Halsey是一个充当角色精灵的画框。
篮球是一个精灵,其作用类似于硬币,可以加分。
分数是分数
label1仅用于调试
篮球在哪里是宽阔的道路
道路是玩家所在的道路
和篮球位置是不同的道路
是否有人使用winforms方法检查每一帧?
您可以创建包含道路的List<int>
。然后删除Hroad
值,留下可用道路的列表。然后从以下选项中选择一个:
List<int> roads = new List<int>{1,2,3,4};
roads.Remove(Hroad);
int Broad = roads[rand.Next(0, roads.Count)];