Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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

Geschrieben

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;

Geschrieben

@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.

Geschrieben
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.

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...