Это первый раз, когда я спрашиваю здесь, так что медведь со мной :) Ну в основном у меня проблема с моим кодом, и я не могу понять, что это такое. Это генератор города для игры, которую я разрабатываю. Он создает 20 x 20bitmap с землей в коричневом цвете и рекой в синем. Теперь мне нужно, чтобы генерировать блок 3x3 в розовом, а затем он должен проверить, есть ли какое-либо совпадение, если да, genereate новую случайную позицию и перейти к проверке, есть ли синий цвет. Моя проблема заключается в том, что она генерирует реку и розовый 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 или false, как только любое из условий вернет true, поэтому что независимо от того, сколько пикселей будет синим, оно должно возвращать true или false, как только будет только один пиксель, который является синим. – Tordur