1
这是我第一次问这里,所以忍耐着我:) 基本上,我有一个问题,我的代码,我无法弄清楚它是什么。 这是我正在开发的一款游戏的城市生成器。它创建一个20×20bit的地图,地面为棕色,蓝色为河流。现在我需要它生成一个粉红色的3x3块,然后它应该检查是否有重叠,如果是,生成一个新的随机位置,并继续检查是否有蓝色。我的问题是,它会产生河流和3x3粉红色块,无论它是否与蓝色部分重叠。简单的位图操作的难度
根据代码,它不应该是可能的。而产生的城市街区后溪被调用的函数是:
private void CreateCityBlock(string name, Color col) {
//This variable stops the loop
bool canGenerate = false;
//Create a loop that checks if it can generate the 3x3 block
while (!canGenerate)
{
//Create a random and generate two positions for "x" and "y"
Random rnd = new Random();
int x = rnd.Next(1, 19);
int y = rnd.Next(1, 19);
//Check if it overlaps with the river
if (!city.GetPixel(x, y).Equals(Color.Blue)||
!city.GetPixel(x - 1, y + 1).Equals(Color.Blue) ||
!city.GetPixel(x, y + 1).Equals(Color.Blue) ||
!city.GetPixel(x + 1, y + 1).Equals(Color.Blue) ||
!city.GetPixel(x - 1, y).Equals(Color.Blue) ||
!city.GetPixel(x + 1, y).Equals(Color.Blue) ||
!city.GetPixel(x - 1, y - 1).Equals(Color.Blue) ||
!city.GetPixel(x, y - 1).Equals(Color.Blue) ||
!city.GetPixel(x + 1, y - 1).Equals(Color.Blue))
{
//set the color to pink
city.SetPixel(x - 1, y + 1, col);
city.SetPixel(x, y + 1, col);
city.SetPixel(x + 1, y + 1, col);
city.SetPixel(x - 1, y, col);
city.SetPixel(x, y, col);
city.SetPixel(x + 1, y, col);
city.SetPixel(x - 1, y - 1, col);
city.SetPixel(x, y - 1, col);
city.SetPixel(x + 1, y - 1, col);
canGenerate = true;
}
}
}
我认为你应该使用&&代替||。或者,如果一个像素是蓝色的,或者如果它们都是 –
,那么你就像河流一样。基本上,我起初尝试过,它也没有工作。如果它应该是AND运算符(&&),那么它将不得不检查所有像素,但是如果我只是使用OR运算符(||),那么只要任何条件返回true,它就应该返回true或false,所以不管有多少像素是蓝色的,一旦只有一个像素是蓝色的,它应该返回真或假。 – Tordur