Takže všechny logické chyby opraveny. Omlouvám se za toto vlákno, nakonec jsem to zpracoval sám, ale pořád to chce dodělat.
public MainWindow()
{
InitializeComponent();
bool[ , ] pole = zjistiKombinaci();
vykreslySachovnici(pole);
}
public void vykreslySachovnici(bool[,] pole)
{
Button[,] sachovnice = new Button[8, 8];
int x = 50;
int y = 50;
int indx = 0;
for (int i = 0; i /*==*/ < 8; i++)
{
for (int j = 0; j /*==*/ < 8; j++)
{
sachovnice[i, j] = new Button();
Canvas.SetLeft(sachovnice[i, j], x);
Canvas.SetTop(sachovnice[i, j], y);
sachovnice[i, j].Name = "btn" + i.ToString() + j.ToString();
sachovnice[i, j].Width = 50;
sachovnice[i, j].Height = 50;
sachovnice[i, j].TabIndex = indx;
indx++;
if ((i + j) % 2 == 0)
{
sachovnice[i, j].Background = Brushes.Black;
}
else
{
sachovnice[i, j].Background = Brushes.White;
}
x += 50;
herniPole.Children.Add(sachovnice[i, j]);
if (pole[i, j])
{
sachovnice[i, j].Background = Brushes.Green;
}
}
x = 50; y += 50;
}
}
public bool[ , ] zjistiKombinaci()
{
bool[,] kombinace = new bool[8, 8];
int x = 0;
int y = 0;
for (int j = y; y < 8; y++)
{
for (int i = x; x < 8; x++)
{
j = y;
i = x;
kombinace[i, j] = true;
if (zkontrolujSach(i, j, kombinace) == false)
{
kombinace[i, j] = false;
}
else
{
x = 0;
y++;
}
}
}
this.Title = "Dal jsem to!";
return kombinace;
}
public bool zkontrolujSach(int x, int y, bool[,] kombinace)
{
if (zkontrolujVodorovne(x, y, kombinace) && zkontrolujSvisle(x, y, kombinace) && zkontrolujUhlopricku1(x, y, kombinace) && zkontrolujUhlopricku2(x, y, kombinace) && zkontrolujUhlopricku3(x, y, kombinace) &&zkontrolujUhlopricku4(x, y, kombinace))
{
return true;
}
else
{
return false;
}
}
public bool zkontrolujVodorovne(int x, int y, bool[,] kombinace)
{
bool[,] pole = (bool[,])kombinace.Clone();
pole[x, y] = false;
//kombinace.CopyTo(pole, 0);
//bool[,] pole = kombinace;
for (int e_i = 0; e_i < 8; e_i++) //kontroluje šach v vodorovné
{
if (pole[e_i, y] == true)
{
return false;
}
}
return true;
}
public bool zkontrolujSvisle(int x, int y, bool[,] kombinace)
{
bool[,] pole = (bool[,])kombinace.Clone();
pole[x, y] = false;
for (int e_j = 0; e_j < 8; e_j++) //kontroluje šach v příčné
{
if (pole[x, e_j] == true)
{
return false;
}
}
return true;
}
public bool zkontrolujUhlopricku1(int x, int y, bool[,] kombinace)
{
bool[,] pole = (bool[,])kombinace.Clone();
pole[x, y] = false;
int i = x;
int j = y;
for (int e_i = i; e_i < 8 && j < 8; e_i++) //Kontroluje vpravo-dolu
{
if (pole[e_i, j] == true)
{
return false;
}
if (j == 8 || j == 0 || e_i == 8 || e_i == 0) //Kontroluje okraje
{
break;
}
j++;
}
return true;
}
public bool zkontrolujUhlopricku2(int x, int y, bool[,] kombinace)
{
bool[,] pole = (bool[,])kombinace.Clone();
pole[x, y] = false;
int i = x;
int j = y;
for (int e_i = i; e_i < 8 && j < 8; e_i--) //Kontroluje vlevo-dolu
{
if (pole[e_i, j] == true)
{
return false;
}
if (j == 8 || j == 0 || e_i == 8 || e_i == 0) //Kontroluje okraje
{
break;
}
j++;
}
return true;
}
public bool zkontrolujUhlopricku3(int x, int y, bool[,] kombinace)
{
bool[,] pole = (bool[,])kombinace.Clone();
pole[x, y] = false;
int i = x;
int j = y;
for (int e_i = i; e_i < 8 && j < 8; e_i--) //Kontroluje vlevo-nahoru
{
if (pole[e_i, j] == true)
{
return false;
}
if (j == 8 || j == 0 || e_i == 8 || e_i == 0) //Kontroluje okraje
{
break;
}
j--;
}
return true;
}
public bool zkontrolujUhlopricku4(int x, int y, bool[,] kombinace)
{
bool[,] pole = (bool[,])kombinace.Clone();
pole[x, y] = false;
int i = x;
int j = y;
for (int e_i = i; e_i < 8 && j < 8; e_i++) //Kontroluje vpravo-nahoru
{
if (pole[e_i, j] == true)
{
return false;
}
if (j == 8 || j == 0 || e_i == 8 || e_i == 0) //Kontroluje okraje
{
break;
}
j--;
}
return true;
}