using System.Windows.Forms;
public partial class Form1 : Form
private readonly Label[,] Spielfeld = new Label[7, 6];
private bool IstRotAmZug = true;
private readonly int[] SpaltenHoehe = { 5, 5, 5, 5, 5, 5, 5 };
private int VerbleibendeZuege = 42;
private bool IstSpielGegenComputer = false;
private void ErstelleSpielfeld()
var rundeForm = new GraphicsPath();
rundeForm.AddEllipse(0, 0, 100, 100);
BackColor = Color.FromArgb(0, 0, 64);
for (int spalte = 0; spalte < 7; spalte++)
for (int zeile = 0; zeile < 6; zeile++)
public partial class Form1 : Form
private readonly Label[,] Spielfeld = new Label[7, 6];
private bool IstRotAmZug = true;
private readonly int[] SpaltenHoehe = { 5, 5, 5, 5, 5, 5, 5 };
private int VerbleibendeZuege = 42;
private bool IstSpielGegenComputer = false;
private void ErstelleSpielfeld()
var rundeForm = new GraphicsPath();
rundeForm.AddEllipse(0, 0, 100, 100);
BackColor = Color.FromArgb(0, 0, 64);
for (int spalte = 0; spalte < 7; spalte++)
public partial class Form1 : Form
private readonly Label[,] Spielfeld = new Label[7, 6];
private bool IstRotAmZug = true;
private readonly int[] SpaltenHoehe = { 5, 5, 5, 5, 5, 5, 5 };
private int VerbleibendeZuege = 42;
private bool IstSpielGegenComputer = false;
private void ErstelleSpielfeld()
var rundeForm = new GraphicsPath();
rundeForm.AddEllipse(0, 0, 100, 100);
BackColor = Color.FromArgb(0, 0, 64);
for (int spalte = 0; spalte < 7; spalte++)
for (int zeile = 0; zeile < 6; zeile++)
public partial class Form1 : Form
private readonly Label[,] Spielfeld = new Label[7, 6];
private bool IstRotAmZug = true;
private readonly int[] SpaltenHoehe = { 5, 5, 5, 5, 5, 5, 5 };
private int VerbleibendeZuege = 42;
private bool IstSpielGegenComputer = false;
private void ErstelleSpielfeld()
var rundeForm = new GraphicsPath();
rundeForm.AddEllipse(0, 0, 100, 100);
BackColor = Color.FromArgb(0, 0, 64);
for (int spalte = 0; spalte < 7; spalte++)
for (int zeile = 0; zeile < 6; zeile++)
Spielfeld[spalte, zeile] = new Label
Spielfeld[spalte, zeile] = new Label
for (int zeile = 0; zeile < 6; zeile++)
Spielfeld[spalte, zeile] = new Label
Spielfeld[spalte, zeile] = new Label
Location = new Point(spalte * 100, zeile * 100),
Name = $"label{spalte * 6 + zeile + 2}",
Size = new Size(100, 100),
TabIndex = spalte * 6 + zeile + 2,
Region = new Region(rundeForm),
AccessibleDescription = ""
Spielfeld[spalte, zeile].Click += Label_Click;
Controls.Add(Spielfeld[spalte, zeile]);
private bool IstInReihe(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4)
if (Spielfeld[x1, y1].AccessibleDescription == Spielfeld[x2, y2].AccessibleDescription &&
Spielfeld[x2, y2].AccessibleDescription == Spielfeld[x3, y3].AccessibleDescription &&
Spielfeld[x3, y3].AccessibleDescription == Spielfeld[x4, y4].AccessibleDescription &&
Spielfeld[x1, y1].AccessibleDescription != "")
private bool IstDiagonale1()
for (int spalte = 0; spalte < 4; spalte++)
for (int zeile = 5; zeile >= 3; zeile--)
if (IstInReihe(spalte, zeile, spalte + 1, zeile - 1, spalte + 2, zeile - 2, spalte + 3, zeile - 3))
private bool IstDiagonale2()
for (int spalte = 0; spalte < 4; spalte++)
for (int zeile = 0; zeile <= 2; zeile++)
if (IstInReihe(spalte, zeile, spalte + 1, zeile + 1, spalte + 2, zeile + 2, spalte + 3, zeile + 3))
private bool HatGewonnen(int spalte, int zeile)
for (int i = 0; i < 4; i++)
if (IstInReihe(i, zeile, i + 1, zeile, i + 2, zeile, i + 3, zeile))
for (int i = 0; i < 3; i++)
if (IstInReihe(spalte, i, spalte, i + 1, spalte, i + 2, spalte, i + 3))
if (IstDiagonale1() || IstDiagonale2())
private void Reset(string gewinner)
MessageBox.Show($"{gewinner} hat gewonnen!", "Spiel beendet");
for (int i = 0; i < 7; i++)
foreach (Label label in Spielfeld)
label.BackColor = Color.White;
label.AccessibleDescription = "";
private void ZugComputer()
Random zufall = new Random();
} while (SpaltenHoehe[spalte] < 0);
int zeile = SpaltenHoehe[spalte]--;
Spielfeld[spalte, zeile].BackColor = (IstRotAmZug ? Color.Red : Color.Yellow);
Spielfeld[spalte, zeile].AccessibleDescription = (IstRotAmZug ? "rot" : "gelb");
if (HatGewonnen(spalte, zeile))
Reset(IstRotAmZug ? "Rot" : "Gelb");
else if (VerbleibendeZuege <= 0)
IstRotAmZug = !IstRotAmZug;
private void Label_Click(object sender, EventArgs e)
if (IstSpielGegenComputer && !IstRotAmZug)
int spalte = ((Label)sender).Location.X / 100;
int zeile = SpaltenHoehe[spalte]--;
Spielfeld[spalte, zeile].BackColor = (IstRotAmZug ? Color.Red : Color.Yellow);
Spielfeld[spalte, zeile].AccessibleDescription = (IstRotAmZug ? "rot" : "gelb");
if (HatGewonnen(spalte, zeile))
Reset(IstRotAmZug ? "Rot" : "Gelb");
else if (VerbleibendeZuege <= 0)
IstRotAmZug = !IstRotAmZug;
private void NeuesSpiel()
foreach (Label label in Spielfeld)
label.BackColor = Color.White;
label.AccessibleDescription = "";
for (int i = 0; i < 7; i++)
if (IstSpielGegenComputer)
private void neuesSpielGegenComputerToolStripMenuItem_Click(object sender, EventArgs e)
IstSpielGegenComputer = true;
private void neuesSpielGegenSpielerToolStripMenuItem_Click(object sender, EventArgs e)
IstSpielGegenComputer = false;