C# 如何仅在20的倍数位置随机放置项目
我创建了一个类似于扫雷的游戏。我使用windows窗体并创建了一个地雷类,其中有一组地雷放置在窗体加载上 我有一个用户玩家,他显然四处移动,玩家和地雷大小都一样,20,20,目前地雷被设置为随机放置在面板上,x(0400)和y(0360) 玩家每次从一个固定点开始,200380,移动量为20,我想要的是能够确保地雷以20的倍数放置,所以20,20,40,40等等,这样当玩家移动时,我就不会得到一个位置,玩家在地雷中间结束(如果有意义的话) 我想要它,这样玩家要么完全错过地雷,要么完全击中地雷C# 如何仅在20的倍数位置随机放置项目,c#,winforms,C#,Winforms,我创建了一个类似于扫雷的游戏。我使用windows窗体并创建了一个地雷类,其中有一组地雷放置在窗体加载上 我有一个用户玩家,他显然四处移动,玩家和地雷大小都一样,20,20,目前地雷被设置为随机放置在面板上,x(0400)和y(0360) 玩家每次从一个固定点开始,200380,移动量为20,我想要的是能够确保地雷以20的倍数放置,所以20,20,40,40等等,这样当玩家移动时,我就不会得到一个位置,玩家在地雷中间结束(如果有意义的话) 我想要它,这样玩家要么完全错过地雷,要么完全击中地雷 c
class Mines
{
// variables for movign the enemy ships
public PictureBox m;
public int xPos, yPos;
public Boolean isDisposed = false;
Random random = new Random();
public Mines(Panel f)
{
m = new PictureBox();
m.Width = 20;
m.Height = 20;
m.Image = Minefield.Properties.Resources.mine;
m.SizeMode = PictureBoxSizeMode.AutoSize;
m.BackColor = Color.Transparent;
m.Visible = true;
xPos = random.Next(0, 400);
yPos = random.Next(0,360);
m.Location = new Point(xPos, yPos); // x and y position of the enemy for starting
f.Controls.Add(m); // needed to add the control to the panel
}
public void placeMines(Panel f)
{
m.Location = new Point(xPos, yPos);
}
}
这是我为mine类编写的代码,如果需要,我可以提供更多,提前感谢如果步长为
20
,您需要计算可能的离散步长。并随机选择要执行的步骤数量。以下是一个小示例,展示了工作原理:
Random random = new Random();
for (int i = 0; i < 10; i++)
{
int stepWidth = 20; //
int maxStep = 400 / stepWidth; // here calculate the maximum number of step that can be made
int stepAmount = random.Next(1, maxStep);
Console.WriteLine(stepAmount * stepWidth);
}
Random Random=new Random();
对于(int i=0;i<10;i++)
{
int步长=20;//
int maxStep=400/stepWidth;//这里计算可以进行的最大步数
int stepAmount=random.Next(1,maxStep);
控制台写入线(步数*步宽);
}
输出:
160140
180
380
120
200
80
100
80
200
谢谢,我尝试了一下,现在似乎效果很好。最后一件事,我需要添加什么来避免重复?@AdrianRowlands你需要记住它们。将其保存在列表中,并使用contains检查列表是否已包含新的随机数。如果是这样,请继续生成。为了避免重复,您还可以首先创建一个可能值的列表。然后从该列表中选择一个随机索引,使用其值并从该列表中删除。当列表变为空时,可能会重新创建该列表