Entwickler-Ecke
C# - Die Sprache - c# hilfe bei "vier gewinnt programierung" benötigt^^
mr.eddy - So 06.01.08 19:11
Titel: c# hilfe bei "vier gewinnt programierung" benötigt^^
hallo leute
ich habe in der schule die aufgabe gekriegt das spiel vier gewinnt zu
programmieren bin aber noch nicht so gut in diesem fach und frage hier
ob mir vllt jemand helfen kann^^
Christian S. - So 06.01.08 19:16
Hallo und :welcome:!
Vorweg: Ändere bitte den Titel Deines Threads, sodass er ein bisschen mehr über den Inhalt aussagt. Danke! :)
Nun zu Deinem Problem: Komplette Hausaufgaben machen wir Dir hier nicht, aber wir helfen Dir sehr gerne dabei, wenn Du irgendwo nicht weiterkommst. Wenn Du also mal schaust, wie weit Du kommst und Dich meldest, wenn es hakt, wirst Du hier sicherlich Hilfe finden. :-)
Grüße
Christian
mr.eddy - So 06.01.08 19:28
joa mit dem anfang tue ich es mir noch schwerhabe daran gedacht das spielfeld mit 2 arrays zu erstellen weiß aber noch nicht so genau wie ich auf der oberflächer darstelle und wie ich beide verbinde ^^"
mr.eddy - So 06.01.08 20:18
sieht gut und doch nen wenig kompleziert aus ^^
ich probiers mal
danke
mr.eddy - So 06.01.08 22:47
hmm ich hab mir eine oberfläche aus labels für die spielfläche erstellt und das array dafür in einer eigenen klasse
doch wie kann ich es bewerkstelligen das wenn ich ein label anklicke diese stelle im array auch den wert kriegt besonders ohne
das bei allen 42 labels einzeln zu machen???
Christian S. - Mi 09.01.08 18:34
Hallo!
Du kannst allen Labels das gleiche Klick-Ereignis zuweisen. Der Sender-Parameter des Ereignisses verrät Dir, welches Label geklickt wurde. Danach kannst Du dann die entsprechende Stelle im Array setzen. Du kannst über die Tag-Eigenschaft eines jeden Labels (die Du frei belegen kannst, dafür ist sie da) den entsprechenden Index im Array speichern, dann ist das recht kurz und bündig zu lösen.
Grüße
Christian
mr.eddy - Sa 12.01.08 16:06
oO ich blick da ehrlich gesagt nicht so durch wie geht das genau allen labels den selben code anzufügen
Christian S. - Sa 12.01.08 16:31
Also:
- Du kannst für das Click-Ereignis aller Labels ein und dieselbe Methode verwenden. Kannst Du dann so benutzen:
C#-Quelltext
1: 2: 3: 4: 5:
| public void labels_Click(object sender, EventArgs e) { Label clickedLabel = (Label) sender; MessageBox.Show(clickedLabel.Text); } |
- Du kannst bei jedem Label in der Tag-Eigenschaft eine beliebige Information hinterlegen, so zum Beispiel den Index im Array, zu dem das Label gehört:
C#-Quelltext
1: 2:
| int einIndex = 42; someLabel.Tag = einIndex; |
Die Tag-Eigenschaft kannst Du natürlich auch im Click-Ereignis auslesen, wie ich es oben mit der Text-Eigenschaft gemacht habe. Nur ein bisschen casten musst Du dann noch.
- Schonmal dran gedacht, die Labels auch in einem Array zu erstellen und nicht mit dem Form-Designer:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| Label[] labels = new Label[42]; for (int i = 0; i < labels.Length-1; i++) { labels[i] = new Label(); labels[i].Parent = this; labels[i].Left = i*20; labels[i].Tag = i; } |
Hier habe ich schon den Index im Array in der Tag-Eigenschaft gespeichert, sodass Du im Click-Ereignis genau weißt, an welcher Stelle im Array das Label steht.
So, anhand dieser Code-Beispiele (die Du natürlich noch für Dich anpassen musst, es sind nur Beispiele) solltest Du weiter kommen.
Grüße
Christian
mr.eddy - So 13.01.08 14:59
hmm ich häng noch einen schritt zurück
ich hab erstmal das spielfeld mit labels erstellen lassen
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| private void Form1_Load(object sender, EventArgs e) { int x = 1; int y = 1;
for (int i1 = 0; i1 < 7; i1++) { for (int i2 = i2; i2 < 6; o++) {
Label mylabel = new Label(); mylabel.BackColor = Color.Black; mylabel.Size = new Size(20, 20); mylabel.Location = new Point(x, y); this.Controls.Add(mylabel); y = y + 30; } y = 1; x = x + 30; } } |
doch weiß ich derzeit nicht wie ich das event click hinzufügen kann?
Christian S. - So 13.01.08 15:48
Mit dem "+="-Operator und einer passenden Methode:
C#-Quelltext
1:
| myLabel.Click += deineKlickMethode; |
mr.eddy - So 13.01.08 17:10
geht es genauer?
Christian S. - So 13.01.08 17:13
Du musst doch nur noch eine Click-Methode für das Label anlegen. :nixweiss:
mr.eddy - So 13.01.08 17:17
xD ja aber wie? kannst du mir nicht den quellcode davon zeigen ?^^
Christian S. - So 13.01.08 17:20
Nö, musst schon noch selber was machen.
Du weißt, wie man Methoden anlegt und wie die Click-Methode aussehen muss, ist entweder aus der Doku zu erfahren oder Du lässt Dir von der IDE einfach mal eine anlegen. "Eigeninitiative" heißt hier das Stichwort :mahn:
Christian S. - So 13.01.08 17:34
Guck Dir doch bitte nur mal den Link an. Da steht was von Office und Word drin, das kann wohl kaum das sein, was Du suchst :roll:
Du könntest aber einfach nochmal ganz in Ruhe meine Beiträge hier durchlesen, da versteckt sich auch eine Click-Methode für Labels drin. :les:
mr.eddy - So 13.01.08 17:52
ich muss ja einmal innerhalb der for-schleife ein click-ereigniss eintragen und dann zusätzlich eine methode erstellen
nachdem ich mir anguckte wie der formdesigner dieses ereigniss einfügt :
C#-Quelltext
1:
| this.label1.Click += new System.EventHandler(this.label1_Click); |
hab ich es mal so probiert mylabel.Click += new EventHandler(...);
doch hab ich kleinen plan was in die klammer kommt
Christian S. - So 13.01.08 17:56
Die von mir mehrmals erwähnt Methode fürs Click-Ereignis ...
mr.eddy - So 13.01.08 18:09
ahhh xD ich habs
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| ... mylabel.Click += new EventHandler(labels_Click); ... public void labels_Click(object sender, EventArgs e) { Label clickedLabel = (Label)sender; if (status == 1) { clickedLabel.BackColor = Color.Red; } else clickedLabel.BackColor = Color.Blue; ; if (status == 1) { status = 2; } else status = 1; |
vielen dank
mr.eddy - So 13.01.08 18:18
hmm wie kann das programm erkennen wann 4 in einer reihe sind?
Christian S. - So 13.01.08 18:28
Da die ursprüngliche konkrete Frage (in Deinem zweiten Posting) beantwortet ist, möchte ich Dich bitten, einen neuen Thread zu erstellen. Eine neue Frage geht dann unter, außerdem kannst Du dann mal einen Titel nehmen, der konkreter den Inhalt der Frage angibt.
*closed*
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!