简单的位图操作的难度

这是我第一次问这里,所以忍耐着我:) 基本上,我有一个问题,我的代码,我无法弄清楚它是什么。 这是我正在开发的一款游戏的城市生成器。它创建一个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;

}

}

}

回答:

问题在于一个事实,即|| (条件OR)运算符不评估任何表达式,如果第一个表达式是True

所以,如果第一个像素是而不是蓝色,那么其余的就不会被评估,因为!False等于True。

在这种情况下,我会写一个单独的“检查”的方法来评估所有的像素,并相应返回结果,例如:

// Returns true if the area overlaps a river pixel, false otherwise 

private bool Overlaps(Bitmap city, int x, int y)

{

for (int cx = x - 1; cx < x + 2; cx++)

{

for (int cy = y - 1; cy < y + 2; cy++)

{

if (city.GetPixel(cx, cy).Equals(Color.Blue))

return true;

}

}

return false;

}

以上是 简单的位图操作的难度 的全部内容, 来源链接: utcz.com/qa/261646.html

回到顶部