@Progress nie zgaduję. W pierwszej funkcji grid nie jest nullem. Po przejściu do drugiej w debuggerze widzę, żę już jest NULL.
@AdamWox funkcje są w tym samym pliku ale dzieje się coś jeszcze w innym pliku cs. Plik w któym jest definicja set_checker() wywołuje tą definicję. Potem dzieje się coś w innym pliku *.cs i ten inny plik wywołuje potem swap(). Najlepiej zobrazuje to kodem:
round.xaml.cs
void set_checker() // służy do ustawienia warcab na szachownicy
{
for(int i=0;i<=2;i++)//second player
{
for(int j=0;j<=7;j++)
{
if (i == 1)
{
round_table[i, j] = warcab.create_warcab(i, j, 2);
grid.Children.Add(round_table[i, j]); // w tej funkcji bardzo ładnie działa
j++;
}
else
{
j++;
if (j == 8) { }
else
{
round_table[i, j] = warcab.create_warcab(i, j, 2);
grid.Children.Add(round_table[i, j]);
//round_table[i, j] = 2;
}
}
}
...... dalej jest uzupełnianie round_table o wielkości 8x8 ale nie ma sensu wklejać bo mechanizm jest podobny, nic nie wnosi do problemu
}
public void swap() /*jej zadaniem jest zamiana na planszy z szachownicą elementów. Czyli ruszam się na pionkiem w puste pole, więc pionek idzie w miejsce pustego pola a puste pole staje się pionkiem (nie testowałem czy ten algorytm działa i czy logicznie jest poprawny bo właśnie mam exception :( ) */
{
Thickness tmp_margin1 = WARCAB.click_table[0].Margin;
//Thickness tmp_margin2 = click_table[1].Margin;
int i_position = int.Parse(WARCAB.click_table[0].Name.Substring(7, 1));
int j_position = int.Parse(WARCAB.click_table[0].Name.Substring(8, 1));
int i_position_target = int.Parse(WARCAB.click_table[1].Name.Substring(7, 1));
int j_position_target = int.Parse(WARCAB.click_table[1].Name.Substring(8, 1));
WARCAB.click_table[0].Margin = WARCAB.click_table[1].Margin;
WARCAB.click_table[1].Margin = tmp_margin1;
round_table[i_position, j_position] = WARCAB.click_table[1];
round_table[i_position_target, j_position_target] = WARCAB.click_table[0];
string p1 = (WARCAB.click_table[1].Content).ToString();
int p11 = int.Parse(p1);
round_table[i_position, j_position] = warcab.create_warcab(i_position, j_position, p11);
grid.Children.Add(round_table[i_position, j_position]); // w tym miejsciu dostaje błąd, że grid jest pusty
string p2 = (WARCAB.click_table[0].Content).ToString();
int p22 = int.Parse(p2);
round_table[i_position_target, j_position_target] = warcab.create_warcab(i_position_target, i_position_target, p22);
grid.Children.Add(round_table[i_position_target, j_position_target]);
}
warcab.cs //tworzy mi jednego, konkretnego "warcaba", czyli pionek
public Thickness get_coordinate(int i,int j)
{
Margin = new Thickness();
if ((i == 0) && (j == 1))
{
Margin = new Thickness(68, 20, 315, 502);
}
// i tak dalej, definiuje w tej funkcji współrzędne punktu do narysowania na planszy przycisku, nie ma sensu wklejać aż do if ((i == 7) && (j == 7))
}
public Button create_warcab(int i,int j,int player)
{
string p1_skin = "files/p1.png";
string p2_skin = "files/p2.png";
Thickness _margin = get_coordinate(i, j);
Button button = new Button();
if (player==2)
{
button.Margin = _margin;
button.Content = player.ToString();
button.Width = 34;
button.Height = 34;
button.Name = "button_" +i.ToString() + j.ToString();
button.Background = new ImageBrush { ImageSource = new BitmapImage(new Uri(p2_skin, UriKind.Relative)) };
button.BorderBrush = new SolidColorBrush(Colors.Transparent);
button.AddHandler(Button.ClickEvent, new RoutedEventHandler(Nbutton_Click));
}
//player 2, czyli drugi gracz, który znajduje się na górze szachownicy, potem jeszcze jest definicja player 0 - czyli wolna przestrzeń między graczami, player 1 - analogicznie
return button;
}
public void Nbutton_Click(object sender, EventArgs e)
/*
logika tego jest taka: użytkownik klika swój pionek a potem znowu klika miejsce gdzie chce go przenieść. I obydwa przyciski (ten z pionkiem i ten z pustym miejscem) zapisywane są do click_table. Następnie wykonywana jest swap(), czyli znowu powracamy do pliku round.xaml.cs
/*
{
click_counter++;
if (click_counter == 1)
{
Button tmp_button1 = sender as Button;
click_table[0] = tmp_button1;
}
else
{
Button tmp_button2 = sender as Button;
click_table[1] = tmp_button2;
click_counter = 0;
ROUND round = new ROUND();
round.swap();
}
}