wollte TicTacToe programmieren und bis jetzt klappt auch alles gut. Allerdings schaffe ich es nicht abzufragen, wer gewonnen hat.
Als Spielfeld hab ich ein Panel genommen von der Größe 300x300. Hab mit Graphics.DrawString 4 Linien durchzogen und habe 9 Felder die je 100x100 Groß sind. Mit ner simplen Abfrage bekomme ich die Koordinaten des Mausklicks und die werden dann abgefragt, also zum welchen Feld sie gehören und dann wird dort entweder ein X oder ein O gezeichnet.
Dann wird in einem 2d Array gespeichert, dass das Feld einen Wert bekommen hat, entweder 1 (spieler 1) oder 2 (spieler 2).
Nun weiß ich nicht wie ich das abfragen soll. Hab mir überlegt.
Code:
if (logik[0,0] && logik[0,1] && logik[0,2] == 1 { //Spieler 1 hat gewonnen }
Quellcode (ich weiß, bei der Feldabsteckung hätte man weit aus einfacher handeln können aber ich lerne ja im moment noch)
Code:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace tictactoe { public partial class Form1 : Form { Pen stift = new Pen(Color.Black);//Nötig für Zeichnen Bitmap feld; int[,] logik = new int[3, 3];//Erstellt den "Spielstand" bool spieler = false;//Spielerreihenfolge, true = Spieler 1 und false = Spieler 2 Graphics g;//Ermöglicht das Zeichnen public Form1() { InitializeComponent(); Array.Clear(logik, 0, logik.Length);//Setzt alle Werte im Array auf 0 } public void panel1_Paint(object sender, PaintEventArgs e) { panel1.BackColor = Color.White; //Hintergrundfarbe wird auf Weiß gestellt g = panel1.CreateGraphics(); //Ermöglicht das Zeichnen auf dem Panel g.DrawLine(stift, 100, 0, 100, 300);//Zeichnet das Feld (1) g.DrawLine(stift, 200, 0, 200, 300);//Zeichnet das Feld (2) g.DrawLine(stift, 0, 100, 300, 100);//Zeichnet das Feld (3) g.DrawLine(stift, 0, 200, 300, 200);//Zeichnet das Feld (4) } private void panel1_MouseClick(object sender, MouseEventArgs e) //Überprüft Klicks auf das Panel, liest Koordinaten aus und löst "Klick" aus { Point point = panel1.PointToClient(Cursor.Position); Point mouse = Cursor.Position; mouse = panel1.PointToClient(mouse); Klick(mouse); } public void Klick(Point loc) //Überprüft welches Feld geklickt worden ist, welcher Spieler dran ist und malt X/O { #region 1. Reihe if (loc.X < 100 && loc.Y < 100) //Erstes Feld wird abgesteckt { if (spieler == true) { g.DrawLine(stift, 0, 0, 100, 100); //Malt \ g.DrawLine(stift, 0, 100, 100, 0); //Malt / logik[0, 0] = 1; //Spielstand wird gespeichert } else { g.DrawEllipse(stift, new Rectangle(0, 0, 99, 99)); //Malt O logik[0, 0] = 2; //Spielstand wird gespeichert } spieler = !spieler; //Ändert den Zug } if (loc.X > 100 && loc.X < 200 && loc.Y < 100) { if (spieler == true) { g.DrawLine(stift, 100, 0, 200, 100); g.DrawLine(stift, 100, 100, 200, 0); logik[0, 1] = 1; } else { g.DrawEllipse(stift, new Rectangle(100, 0, 99, 99)); logik[0, 1] = 2; } spieler = !spieler; } if (loc.X > 200 && loc.X < 300 && loc.Y < 100) { if (spieler == true) { g.DrawLine(stift, 200, 0, 300, 100); g.DrawLine(stift, 200, 100, 300, 0); logik[0, 2] = 1; } else { g.DrawEllipse(stift, new Rectangle(200, 0, 99, 99)); logik[0, 2] = 2; } spieler = !spieler; } #endregion #region 2. Reihe if (loc.X < 100 && loc.Y < 200 && loc.Y > 100) { if (spieler == true) { g.DrawLine(stift, 0, 100, 100, 200); //Malt \ g.DrawLine(stift, 0, 200, 100, 100); //Malt / logik[1, 0] = 1; //Spielstand wird gespeichert } else { g.DrawEllipse(stift, new Rectangle(0, 100, 99, 99)); //Malt O logik[1, 0] = 2; //Spielstand wird gespeichert } spieler = !spieler; //Ändert den Zug } if (loc.X > 100 && loc.X < 200 && loc.Y < 200 && loc.Y > 100) { if (spieler == true) { g.DrawLine(stift, 100, 100, 200, 200); g.DrawLine(stift, 100, 200, 200, 100); logik[1, 1] = 1; } else { g.DrawEllipse(stift, new Rectangle(100, 100, 99, 99)); logik[1, 1] = 2; } spieler = !spieler; } if (loc.X > 200 && loc.X < 300 && loc.Y < 200 && loc.Y > 100) { if (spieler == true) { g.DrawLine(stift, 200, 100, 300, 200); g.DrawLine(stift, 200, 200, 300, 100); logik[1, 2] = 1; } else { g.DrawEllipse(stift, new Rectangle(200, 100, 99, 99)); logik[1, 2] = 2; } spieler = !spieler; } #endregion #region 3. Reihe if (loc.X < 100 && loc.Y < 300 && loc.Y > 200) { if (spieler == true) { g.DrawLine(stift, 0, 200, 100, 300); //Malt \ g.DrawLine(stift, 0, 300, 100, 200); //Malt / logik[2, 0] = 1; //Spielstand wird gespeichert } else { g.DrawEllipse(stift, new Rectangle(0, 200, 99, 99)); //Malt O logik[2, 0] = 2; //Spielstand wird gespeichert } spieler = !spieler; //Ändert den Zug } if (loc.X > 100 && loc.X < 200 && loc.Y > 200) { if (spieler == true) { g.DrawLine(stift, 100, 200, 200, 300); g.DrawLine(stift, 100, 300, 200, 200); logik[2, 1] = 1; } else { g.DrawEllipse(stift, new Rectangle(100, 200, 99, 99)); logik[2, 1] = 2; } spieler = !spieler; } if (loc.X > 200 && loc.X < 300 && loc.Y > 200) { if (spieler == true) { g.DrawLine(stift, 200, 200, 300, 300); g.DrawLine(stift, 200, 300, 300, 200); logik[2, 2] = 1; } else { g.DrawEllipse(stift, new Rectangle(200, 200, 99, 99)); logik[2, 2] = 2; } spieler = !spieler; } #endregion } } }