261 lines
8.6 KiB
C#
261 lines
8.6 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Drawing;
|
|
using System.Windows.Forms;
|
|
|
|
namespace LottoGame
|
|
{
|
|
public partial class Form1 : Form
|
|
{
|
|
|
|
private int meinGeld = 2000;
|
|
private List<int> meineZahlen = new List<int>();
|
|
private int spielAnzahl = 0;
|
|
|
|
|
|
private Button[] alleButtons = new Button[49];
|
|
private Label geldAnzeige;
|
|
private Label ergebnisAnzeige;
|
|
private Button spielButton;
|
|
private Label spielZaehler;
|
|
|
|
|
|
private const int KOSTEN_PRO_SPIEL = 5;
|
|
private const int ZAHLEN_AUSWAHL = 7;
|
|
private const int MAX_ZAHL = 49;
|
|
|
|
public Form1()
|
|
{
|
|
InitializeComponent();
|
|
SpielfeldErstellen();
|
|
}
|
|
|
|
private void SpielfeldErstellen()
|
|
{
|
|
|
|
this.Text = "Lotto Spiel";
|
|
this.Size = new Size(800, 600);
|
|
this.BackColor = Color.FromArgb(240, 248, 255);
|
|
|
|
|
|
int buttonGroesse = 45;
|
|
int abstand = 8;
|
|
int startX = 30;
|
|
int startY = 30;
|
|
|
|
|
|
ErstelleZahlenButtons(buttonGroesse, abstand, startX, startY);
|
|
|
|
|
|
int rechteSeiteX = startX + 7 * (buttonGroesse + abstand) + 40;
|
|
int rechteSeiteY = startY + 30;
|
|
|
|
|
|
ErstelleSpielButton(rechteSeiteX, rechteSeiteY);
|
|
|
|
|
|
ErstelleGeldAnzeige(rechteSeiteX, rechteSeiteY);
|
|
|
|
|
|
ErstelleSpielZaehler(rechteSeiteX, rechteSeiteY);
|
|
|
|
|
|
ErstelleErgebnisAnzeige(startX, startY, buttonGroesse, abstand);
|
|
}
|
|
|
|
private void ErstelleZahlenButtons(int buttonGroesse, int abstand, int startX, int startY)
|
|
{
|
|
for (int i = 0; i < MAX_ZAHL; i++)
|
|
{
|
|
alleButtons[i] = new Button();
|
|
alleButtons[i].Size = new Size(buttonGroesse, buttonGroesse);
|
|
alleButtons[i].Location = new Point(
|
|
startX + (i % 7) * (buttonGroesse + abstand),
|
|
startY + (i / 7) * (buttonGroesse + abstand)
|
|
);
|
|
alleButtons[i].Text = (i + 1).ToString();
|
|
alleButtons[i].Tag = i + 1;
|
|
alleButtons[i].BackColor = Color.White;
|
|
alleButtons[i].FlatStyle = FlatStyle.Flat;
|
|
alleButtons[i].Font = new Font("Segoe UI", 11, FontStyle.Bold);
|
|
alleButtons[i].Click += ZahlenButton_Click;
|
|
this.Controls.Add(alleButtons[i]);
|
|
}
|
|
}
|
|
|
|
private void ErstelleSpielButton(int x, int y)
|
|
{
|
|
spielButton = new Button();
|
|
spielButton.Size = new Size(180, 60);
|
|
spielButton.Location = new Point(x, y);
|
|
spielButton.Text = "Spielen";
|
|
spielButton.Font = new Font("Segoe UI", 14, FontStyle.Bold);
|
|
spielButton.BackColor = Color.FromArgb(0, 120, 215);
|
|
spielButton.ForeColor = Color.White;
|
|
spielButton.FlatStyle = FlatStyle.Flat;
|
|
spielButton.Enabled = false;
|
|
spielButton.Click += SpielButton_Click;
|
|
this.Controls.Add(spielButton);
|
|
}
|
|
|
|
private void ErstelleGeldAnzeige(int x, int y)
|
|
{
|
|
geldAnzeige = new Label();
|
|
geldAnzeige.Size = new Size(180, 50);
|
|
geldAnzeige.Location = new Point(x, y + 80);
|
|
geldAnzeige.Text = "Mein Geld: " + meinGeld + "€";
|
|
geldAnzeige.Font = new Font("Segoe UI", 13, FontStyle.Bold);
|
|
geldAnzeige.ForeColor = Color.DarkGreen;
|
|
geldAnzeige.BackColor = Color.FromArgb(230, 255, 230);
|
|
geldAnzeige.TextAlign = ContentAlignment.MiddleCenter;
|
|
geldAnzeige.BorderStyle = BorderStyle.FixedSingle;
|
|
this.Controls.Add(geldAnzeige);
|
|
}
|
|
|
|
private void ErstelleSpielZaehler(int x, int y)
|
|
{
|
|
spielZaehler = new Label();
|
|
spielZaehler.Size = new Size(180, 50);
|
|
spielZaehler.Location = new Point(x, y + 150);
|
|
spielZaehler.Text = "Spiele gespielt: 0";
|
|
spielZaehler.Font = new Font("Segoe UI", 13, FontStyle.Bold);
|
|
spielZaehler.ForeColor = Color.DarkBlue;
|
|
spielZaehler.BackColor = Color.FromArgb(230, 230, 255);
|
|
spielZaehler.TextAlign = ContentAlignment.MiddleCenter;
|
|
spielZaehler.BorderStyle = BorderStyle.FixedSingle;
|
|
this.Controls.Add(spielZaehler);
|
|
}
|
|
|
|
private void ErstelleErgebnisAnzeige(int startX, int startY, int buttonGroesse, int abstand)
|
|
{
|
|
ergebnisAnzeige = new Label();
|
|
ergebnisAnzeige.Size = new Size(700, 120);
|
|
ergebnisAnzeige.Location = new Point(startX, startY + 7 * (buttonGroesse + abstand) + 30);
|
|
ergebnisAnzeige.Text = "Wähle 7 Zahlen aus";
|
|
ergebnisAnzeige.Font = new Font("Segoe UI", 11, FontStyle.Bold);
|
|
ergebnisAnzeige.TextAlign = ContentAlignment.TopLeft;
|
|
ergebnisAnzeige.AutoSize = false;
|
|
ergebnisAnzeige.BorderStyle = BorderStyle.FixedSingle;
|
|
ergebnisAnzeige.BackColor = Color.FromArgb(255, 255, 224);
|
|
this.Controls.Add(ergebnisAnzeige);
|
|
}
|
|
|
|
private void ZahlenButton_Click(object sender, EventArgs e)
|
|
{
|
|
Button geklickterButton = (Button)sender;
|
|
int zahl = (int)geklickterButton.Tag;
|
|
|
|
if (meineZahlen.Contains(zahl))
|
|
{
|
|
|
|
meineZahlen.Remove(zahl);
|
|
geklickterButton.BackColor = Color.White;
|
|
}
|
|
else if (meineZahlen.Count < ZAHLEN_AUSWAHL)
|
|
{
|
|
|
|
meineZahlen.Add(zahl);
|
|
geklickterButton.BackColor = Color.LightGreen;
|
|
}
|
|
|
|
|
|
spielButton.Enabled = (meineZahlen.Count == ZAHLEN_AUSWAHL);
|
|
ergebnisAnzeige.Text = "Ausgewählte Zahlen: " + string.Join(", ", meineZahlen);
|
|
}
|
|
|
|
private void SpielButton_Click(object sender, EventArgs e)
|
|
{
|
|
|
|
if (meinGeld < KOSTEN_PRO_SPIEL)
|
|
{
|
|
MessageBox.Show("Du hast nicht genug Geld zum Spielen!");
|
|
return;
|
|
}
|
|
|
|
|
|
meinGeld -= KOSTEN_PRO_SPIEL;
|
|
|
|
|
|
List<int> gezogeneZahlen = ZieheZufallszahlen();
|
|
|
|
|
|
int treffer = ZaehleTreffer(gezogeneZahlen);
|
|
|
|
|
|
int gewinn = BerechneGewinn(treffer);
|
|
meinGeld += gewinn;
|
|
|
|
|
|
AktualisiereAnzeigen(gezogeneZahlen, treffer, gewinn);
|
|
|
|
|
|
SetzeSpielZurueck();
|
|
}
|
|
|
|
private List<int> ZieheZufallszahlen()
|
|
{
|
|
List<int> zahlen = new List<int>();
|
|
Random zufall = new Random();
|
|
|
|
while (zahlen.Count < ZAHLEN_AUSWAHL)
|
|
{
|
|
int zahl = zufall.Next(1, MAX_ZAHL + 1);
|
|
if (!zahlen.Contains(zahl))
|
|
{
|
|
zahlen.Add(zahl);
|
|
}
|
|
}
|
|
|
|
return zahlen;
|
|
}
|
|
|
|
private int ZaehleTreffer(List<int> gezogeneZahlen)
|
|
{
|
|
int treffer = 0;
|
|
foreach (int zahl in meineZahlen)
|
|
{
|
|
if (gezogeneZahlen.Contains(zahl))
|
|
{
|
|
treffer++;
|
|
}
|
|
}
|
|
return treffer;
|
|
}
|
|
|
|
private int BerechneGewinn(int treffer)
|
|
{
|
|
switch (treffer)
|
|
{
|
|
case 3: return 20;
|
|
case 4: return 400;
|
|
case 5: return 20000;
|
|
case 6: return 100000;
|
|
case 7: return 1000000;
|
|
default: return 0;
|
|
}
|
|
}
|
|
|
|
private void AktualisiereAnzeigen(List<int> gezogeneZahlen, int treffer, int gewinn)
|
|
{
|
|
geldAnzeige.Text = "Mein Geld: " + meinGeld + "€";
|
|
ergebnisAnzeige.Text = "Gezogene Zahlen: " + string.Join(", ", gezogeneZahlen) + "\n" +
|
|
"Deine Zahlen: " + string.Join(", ", meineZahlen) + "\n" +
|
|
"Treffer: " + treffer + "\n" +
|
|
"Einsatz: -" + KOSTEN_PRO_SPIEL + "€\n" +
|
|
"Gewinn: " + (gewinn > 0 ? "+" : "") + gewinn + "€";
|
|
|
|
spielAnzahl++;
|
|
spielZaehler.Text = "Spiele gespielt: " + spielAnzahl;
|
|
}
|
|
|
|
private void SetzeSpielZurueck()
|
|
{
|
|
meineZahlen.Clear();
|
|
foreach (Button button in alleButtons)
|
|
{
|
|
button.BackColor = Color.White;
|
|
}
|
|
spielButton.Enabled = false;
|
|
}
|
|
}
|
|
} |