C# 种子随机绘制二维网格
这已经困扰了我几个小时,所以我想知道是否有人可以帮助我,因为我可能是想错了 我希望能够从网格上的一组x和y坐标中获得一个布尔值,该坐标具有无限的宽度和高度。还有其他约束,沿x轴,两个真值之间至少需要n个位置,我还需要知道从0,0到x,y的区域中真值的数量 当从0,0到x,y创建区域时,给定给GetTrueCordinatesInArea的区域的宽度和高度等于x和y 如果这有道理的话 例如:C# 种子随机绘制二维网格,c#,algorithm,math,C#,Algorithm,Math,这已经困扰了我几个小时,所以我想知道是否有人可以帮助我,因为我可能是想错了 我希望能够从网格上的一组x和y坐标中获得一个布尔值,该坐标具有无限的宽度和高度。还有其他约束,沿x轴,两个真值之间至少需要n个位置,我还需要知道从0,0到x,y的区域中真值的数量 当从0,0到x,y创建区域时,给定给GetTrueCordinatesInArea的区域的宽度和高度等于x和y 如果这有道理的话 例如: value = coordinateContainsTrue( x, y );//return true
value = coordinateContainsTrue( x, y );//return true or false.
total = getTrueCoordinatesInArea( x , y );//Returns the total true values inside the area.
编辑:这会产生一个种子。我不太明白你需要什么,但我觉得这听起来像是一个很好很有趣的练习。我希望这是你想要的这不是我想要的编码。我宁愿使用bool[,]数组,但不知道如何使其成为动态数组,也不想为此编写自己的类,但也许我应该这样做 然而,这个解决方案应该是可行的
private List<List<bool>> grid = new List<List<bool>>();
private int N = 4;
Random randomNumberGenerator = new Random();
private bool getRandomBoolean()
{
return this.randomNumberGenerator.Next(0, 2) == 1;
}
private void testProgram()
{
var containsTrue = coordinateContainsTrue(0, 10);
var total = getTrueCoordinatesInArea(14, 2);
var isTrue = coordinateIsTrue(15, 11);
}
private bool coordinateIsTrue(int x, int y)
{
expandGridOfNeeded(x, y);
return grid[x][y];
}
private bool coordinateContainsTrue(int x, int y)
{
expandGridOfNeeded(x, y);
for (int xTemp = 0; xTemp < x; xTemp++) // Loop columns
{
for (int yTemp = 0; yTemp < y; yTemp++) // Loop rows
{
if (grid[xTemp][yTemp])
return true; // Return true if any true was found
}
}
return false;
}
private int getTrueCoordinatesInArea(int x, int y)
{
expandGridOfNeeded(x, y);
var total = 0;
for (int xTemp = 0; xTemp < x; xTemp++) // Loop columns
{
for (int yTemp = 0; yTemp < y; yTemp++) // Loop rows
{
if (grid[xTemp][yTemp])
total++; // Increase count if true was found
}
}
return total;
}
private void expandGridOfNeeded(int x, int y)
{
if (x < 0 || y < 0)
return;
// Add needed columns
while (grid.Count <= x)
{
var column = new List<bool>();
// Only add rows if the others have rows
if (grid.Count > 0)
{
while (column.Count < grid[0].Count)
{
// Check if legal to add a true value, if it is then add random else add false
bool forceFalseValue = false;
for (int i = grid.Count - 1; i > grid.Count + N && forceFalseValue == false; i--)
{
forceFalseValue = grid[i][column.Count - 1];
}
column.Add(forceFalseValue ? false : getRandomBoolean());
}
}
grid.Add(column);
}
// Add needed rows
while (grid[0].Count <= y)
{
var counter = N;
foreach (var column in grid)
{
// Check if legal to add a true value, if it is then add random else add false
if (counter < N)
{
column.Add(false);
counter++;
}
else
{
var randomValue = getRandomBoolean();
if (randomValue)
counter = 0;
else
counter++;
column.Add(randomValue);
}
}
}
}
private List grid=new List();
私有int N=4;
Random randomNumberGenerator=新的Random();
私有布尔getRandomBoolean()
{
返回此.randomNumberGenerator.Next(0,2)==1;
}
私有void testProgram()
{
var containsTrue=坐标containsTrue(0,10);
var total=getTrueCoordinatesInArea(14,2);
var isTrue=coordinateIsTrue(15,11);
}
私有布尔坐标为真(整数x,整数y)
{
需要的扩展网格(x,y);
返回网格[x][y];
}
私有布尔协调容器(int x,int y)
{
需要的扩展网格(x,y);
for(int-xTemp=0;xTempgrid.Count+N&&forceFalseValue==false;i--)
{
forceFalseValue=网格[i][column.Count-1];
}
Add(forceFalseValue?false:getRandomBoolean());
}
}
网格。添加(列);
}
//添加所需的行
while(grid[0]。Count That'正确,我已经编辑了这个问题。听起来您这里有两个问题-一个是在给定一些约束的情况下生成随机点,另一个是从位于指定区域内的一组坐标(从(0,0)开始)中查找坐标数.听起来对吗?你在第二段有点迷糊了。