Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何仅在20的倍数位置随机放置项目_C#_Winforms - Fatal编程技术网

C# 如何仅在20的倍数位置随机放置项目

C# 如何仅在20的倍数位置随机放置项目,c#,winforms,C#,Winforms,我创建了一个类似于扫雷的游戏。我使用windows窗体并创建了一个地雷类,其中有一组地雷放置在窗体加载上 我有一个用户玩家,他显然四处移动,玩家和地雷大小都一样,20,20,目前地雷被设置为随机放置在面板上,x(0400)和y(0360) 玩家每次从一个固定点开始,200380,移动量为20,我想要的是能够确保地雷以20的倍数放置,所以20,20,40,40等等,这样当玩家移动时,我就不会得到一个位置,玩家在地雷中间结束(如果有意义的话) 我想要它,这样玩家要么完全错过地雷,要么完全击中地雷 c

我创建了一个类似于扫雷的游戏。我使用windows窗体并创建了一个地雷类,其中有一组地雷放置在窗体加载上

我有一个用户玩家,他显然四处移动,玩家和地雷大小都一样,20,20,目前地雷被设置为随机放置在面板上,x(0400)和y(0360)

玩家每次从一个固定点开始,200380,移动量为20,我想要的是能够确保地雷以20的倍数放置,所以20,20,40,40等等,这样当玩家移动时,我就不会得到一个位置,玩家在地雷中间结束(如果有意义的话)

我想要它,这样玩家要么完全错过地雷,要么完全击中地雷

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);
控制台写入线(步数*步宽);
}
输出:

160
140
180
380
120
200
80
100
80
200


谢谢,我尝试了一下,现在似乎效果很好。最后一件事,我需要添加什么来避免重复?@AdrianRowlands你需要记住它们。将其保存在列表中,并使用contains检查列表是否已包含新的随机数。如果是这样,请继续生成。为了避免重复,您还可以首先创建一个可能值的列表。然后从该列表中选择一个随机索引,使用其值并从该列表中删除。当列表变为空时,可能会重新创建该列表