gpt4 book ai didi

c# - Wator/GameOfLife 如何检查控制台项目中的现有单元格?

转载 作者:行者123 更新时间:2023-12-01 13:10:24 24 4
gpt4 key购买 nike

我想尝试编写 Wator/GameOfLife。我有这两种方法来填充 gameField 并绘制它。

        public void FillGameField()
{
Random X = new Random();
Random Y = new Random();
int totalCellNumber = Playground.GetLength(0) * Playground.GetLength(1);
int totalPreyNumber = (int)(totalCellNumber * preyPercentage);
int totalPredatorNumber = (int)(totalCellNumber * predatorPercentage);

for (int i = 0; i < totalPreyNumber; i++)
{
int x = X.Next(0, Playground.GetLength(0));
int y = Y.Next(0, Playground.GetLength(1));
while (Playground[x, y] != null)
{
x = X.Next(0, Playground.GetLength(0));
y = Y.Next(0, Playground.GetLength(1));
}
Playground[x, y] = new Prey();
}

for (int i = 0; i < totalPredatorNumber; i++)
{
int x = X.Next(0, Playground.GetLength(0));
int y = Y.Next(0, Playground.GetLength(1));
while (Playground[x,y] != null)
{
x = X.Next(0, Playground.GetLength(0));
y = Y.Next(0, Playground.GetLength(1));
}

Playground[x, y] = new Predator();
}
}

public void DrawGameField()
{
for (int x = 0; x < Playground.GetLength(0); x++)
{
for (int y = 0; y < Playground.GetLength(1); y++)
{
if(Playground[x,y] != null)
{
Console.Write(Playground[x, y].ToString());
}
else
{
Console.Write(" ");
}
}
Console.WriteLine();
}
}

在构造函数中,我传递了游戏区域的大小以及猎物和捕食者的百分比。FillGameField 方法永远不会结束。我也知道为什么,但我不知道如何解决这个问题。我只想生成一个 X 和 Y 坐标,然后检查单元格是否为空,如果不重新生成直到它是,我生成一个新的猎物或捕食者对象,但它花费的时间太长,百分比如 30 或 20。我如何优化这个?

最佳答案

首先抓取所有空单元格。

var emptyCells = Playground.SelectMany(x => x == null).ToList();

然后在填充单元格时简单地(随机地)选择到该集合中,并在开始时使用该总数作为百分比。

当您填充 emptyCells 中的一项时,请务必将其从集合中移除。

您还可以通过检查 emptyCells.Count > 0 来防止满板。

关于c# - Wator/GameOfLife 如何检查控制台项目中的现有单元格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60417669/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com