Windows窗体和c#随机化

问题描述 投票:-2回答:1

所以我正在用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方法检查每一帧?

c# winforms 2d-games
1个回答
0
投票

您可以创建包含道路的List<int>。然后删除Hroad值,留下可用道路的列表。然后从以下选项中选择一个:

List<int> roads = new List<int>{1,2,3,4};
roads.Remove(Hroad);
int Broad = roads[rand.Next(0, roads.Count)];
© www.soinside.com 2019 - 2024. All rights reserved.