Windows 表单和 c# 随机化

Windows Forms and c# randomizing

所以我正在制作 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;
                }
            }
        }

这是它移动角色并改变 Hroad var 的地方:

private void KeyHandler(object sender, KeyEventArgs e)
        {
            switch (e.KeyData)
            {
                case Keys.Right:
                    if (Halsey.Location.X == 675)
                    {
                        break;
                    }
                    Halsey.Location = new Point(Halsey.Location.X + 206, Halsey.Location.Y);
                    Hroad += 1;
                    label2.Text = $"{Hroad}";
                    break;
                case Keys.Left:
                    if (Halsey.Location.X == 57)
                    {
                        break;
                    }
                    Halsey.Location = new Point(Halsey.Location.X - 206, Halsey.Location.Y);
                    Hroad -= 1;
                    label2.Text = $"{Hroad}";
                    break;
            }
        }

一些说明:

Hlocal 是玩家移动时调用的事件。

Halsey 是一个图片框,充当角色精灵。

篮球是一个像硬币一样可以加分的精灵。

scorenum 是分数

label1 只是为了调试

篮球的路很广阔

Hroad 是玩家所在的道路

篮球位置是不同的道路

目前,在道路上放置精灵的x点是: 路 1 - 57

道路 2 - 263

道路 3 - 469

路 4 - 675

您可以创建一个包含道路的 List<int>。然后删除留下可用道路列表的 Hroad 值。然后 select 其中一个随机:

List<int> roads = new List<int>{1,2,3,4};
roads.Remove(Hroad);
int Broad = roads[rand.Next(0, roads.Count)];