Colibri Geschrieben 29. Juli 2012 Geschrieben 29. Juli 2012 Hallo, so ich habe vor Conways Spiel des Lebens nachzubauen, in C#. So nun habe ich soweit ein 10x10 Spielfeld mit Checkboxen erstellt und will nun diese Abfragen für "lebende/sterbende Zellen" einfügen. Leider weiß ich nun nicht, wie ich in einem solchen Koordinaten Feld die Position genau abfragen sollte. Ein Freund von mir hat irgendwas von "left, right" befehlen gestammelt, was mir nicht wirklich weitergeholfen hat. Nebenbei wollte ich den Checkboxen noch Farben geben, leider hat das nicht funktioniert mit diesem Backcolor. Ich hoffe ihr könnt mir bei meinem kleinen Projekt weiterhelfen. Quelltext: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace Game_of_Life { /// <summary> /// Interaktionslogik für MainWindow.xaml /// </summary> public partial class MainWindow : Window { // Attribute private Grid grid_oberf; private StackPanel stack_container; private CheckBox[,] cbs; // Eine leere Liste, die 2 Felder enthält public MainWindow() { // Container grid_oberf = new Grid(); stack_container = new StackPanel(); // Elemente werden erzeugt InitializeComponent(); // for-Schleife für die Zeilen for (int i = 0; i != 10; i++) { RowDefinition rd = new RowDefinition(); rd.Height = GridLength.Auto; grid_oberf.RowDefinitions.Add(rd); } // for-Schleife für die Spalten for (int i = 0; i != 10; i++) { ColumnDefinition cd = new ColumnDefinition(); cd.Width = GridLength.Auto; grid_oberf.ColumnDefinitions.Add(cd); } // Random Random rn = new Random(); // Der Checkbox cbs wurde ein 10x10 Feld erstellt(Liste) cbs = new CheckBox[10, 10]; // Inhalt des Containers (Checkboxes) for (int i = 0; i != 10; i++) { for (int j = 0; j != 10; j++) { CheckBox cb = new CheckBox(); Grid.SetColumn(cb, i); Grid.SetRow(cb, j); grid_oberf.Children.Add(cb); cbs = new CheckBox[i, j]; // hier wird der cbs(Attribut, siehe oben), eine neue Liste(Positionen) von Checkboxes übergeben // Abfrage die überpfrüft ob Checkbox gesetzt wurde oder nicht if (rn.Next(2) == 1) { cb.IsChecked = true; } else { cb.IsChecked = false; } }// Ende der zweiten Schleife }// Ende der ersten Schleife // Button Next Button next = new Button(); next.Content = "Next Generation"; /* * Ein Befehl der ausgeklammert wurde, er zeigt die Gitterlinien an * gridname.ShowGridLines = true; */ // Elemente die dem StackPanel überwiesen werden stack_container.Children.Add(grid_oberf); stack_container.Children.Add(next); // Der Inhalt bekommt das StackPanel & der Content wird der Größe des Inhaltes angepasst this.Content = stack_container; this.SizeToContent = System.Windows.SizeToContent.WidthAndHeight; }// Ende der Classe MainWindow }// Ende der partical Class }// Ende des namespace´s Zitieren
Klotzkopp Geschrieben 30. Juli 2012 Geschrieben 30. Juli 2012 Benutze nicht die Steuerelemente, um den Zustand des Programms zu speichern. Denk dir eine Datenstruktur aus, die den Zustand des Programms speichern kann, und benutze die Steuerelemente des GUI nur, um diesen Zustand anzuzeigen. cbs = new CheckBox[i, j];Hier erzeugst du cbs immer wieder neu, mit anderen Größen, 100 mal. Nirgendwo speicherst du einen einzigen Verweis auf eine erzeugte Checkbox in cbs. Und noch eins: if(A) { B = true; } else { B = false; }[/code] ist eine umständliche Schreibweise für [code]B = A; Zitieren
Colibri Geschrieben 30. Juli 2012 Autor Geschrieben 30. Juli 2012 @Klotzkopp Danke für die schnelle Antwort. Also das ich die cbs Checkbox neu erzeuge weiß ich. Ich wollte so die Checkboxes nummerieren, also ich will Checkbox 0,1 (oder 98/100) mal ändern, so kann ich sie anspringen. (zumindest hab ich mir das so gedacht) So ganz genau weiß ich jetzt nicht genau, was du mit dem Verweis meinst. Ich dachte ich komme später über die Positionsabfragen auf die Checkbox zu. Naja und Datenstruktur sagt mir auch wenig gerade. ^^ Bin halt noch Anfänger im Programmieren und daher ist es für mich gerade nen bissel schwierig, wie du das gerade meinst. Zitieren
Klotzkopp Geschrieben 30. Juli 2012 Geschrieben 30. Juli 2012 Also das ich die cbs Checkbox neu erzeuge weiß ich.cbs ist keine Checkbox. cbs ist ein zweidimensionales Array von Checkbox-Verweisen. Ich wollte so die Checkboxes nummerieren, also ich will Checkbox 0,1 (oder 98/100) mal ändern, so kann ich sie anspringen.Die Idee ist ja auch gar nicht schlecht. Aber damit das funktioniert, solltest du die Objektverweise der erzeugte Checkboxen (in deinem Fall cb) auch in cbs ablegen. Und vor allem nicht cbs ständig neu erzeugen, damit gehen alle vorher darin gespeicherten Verweise verloren. Zitieren
mcn Geschrieben 30. Juli 2012 Geschrieben 30. Juli 2012 Check mal deine PMs, Colibri. schoenen abend noch. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.