Autor |
Beitrag |
mr.eddy
      
Beiträge: 23
|
Verfasst: So 06.01.08 19:11
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^^
Zuletzt bearbeitet von mr.eddy am So 06.01.08 19:30, insgesamt 2-mal bearbeitet
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: So 06.01.08 19:16
Hallo und  !
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
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
mr.eddy 
      
Beiträge: 23
|
Verfasst: 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 ^^"
|
|
Chryzler
      
Beiträge: 1097
Erhaltene Danke: 2
|
Verfasst: So 06.01.08 20:02
Für das Spielfeld nimmst du am besten ein zwei-dimensionales Array. Für die Felder auf dem Spielfeld würde ich einen Aufzählungstypen deklarieren, der dafür geeignet ist. Z.B:
C#-Quelltext 1: 2: 3: 4: 5: 6:
| public enum Feld { Free, Player1, Player2 } |
Dann kannst du das Spielfeld als Feld[,] spielfeld deklarieren.
|
|
mr.eddy 
      
Beiträge: 23
|
Verfasst: So 06.01.08 20:18
sieht gut und doch nen wenig kompleziert aus ^^
ich probiers mal
danke
|
|
mr.eddy 
      
Beiträge: 23
|
Verfasst: 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.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: 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
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
mr.eddy 
      
Beiträge: 23
|
Verfasst: 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.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: 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
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
mr.eddy 
      
Beiträge: 23
|
Verfasst: 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.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: So 13.01.08 15:48
Mit dem "+="-Operator und einer passenden Methode:
C#-Quelltext 1:
| myLabel.Click += deineKlickMethode; |
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
mr.eddy 
      
Beiträge: 23
|
Verfasst: So 13.01.08 17:10
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: So 13.01.08 17:13
Du musst doch nur noch eine Click-Methode für das Label anlegen. 
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
mr.eddy 
      
Beiträge: 23
|
Verfasst: So 13.01.08 17:17
xD ja aber wie? kannst du mir nicht den quellcode davon zeigen ?^^
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: 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 
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
mr.eddy 
      
Beiträge: 23
|
Verfasst: So 13.01.08 17:26
 ich habs ja versucht ...
hab zwar einiges gefunden wie z.B. msdn2.microsoft.com/...on.click(VS.80).aspx
aber wurd ich daraus nicht schlau xD deswegen frag ich hier ja nach 
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: 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
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. 
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
mr.eddy 
      
Beiträge: 23
|
Verfasst: 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.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: So 13.01.08 17:56
Die von mir mehrmals erwähnt Methode fürs Click-Ereignis ...
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
mr.eddy 
      
Beiträge: 23
|
Verfasst: 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
|
|