136 lines
4.7 KiB
Markdown
136 lines
4.7 KiB
Markdown
Lotto Spiel - WPF Anwendung
|
|
|
|
1. Was ist das Programm und was macht es?
|
|
Das Lotto Spiel ist eine WPF-Anwendung, die ein deutsches 6/49 Lotto-Spiel simuliert. Der Benutzer kann mehrere Tickets kaufen und wählen, ob er die Zahlen manuell eingeben oder zufällig generieren lassen möchte. Das Programm vergleicht dann die Spieler-Tickets mit den Gewinnzahlen und zeigt die Ergebnisse mit Statistiken und Gewinnwahrscheinlichkeiten an.
|
|
|
|
Hauptfunktionen:
|
|
|
|
Mehrere Tickets gleichzeitig spielen
|
|
Zwei Modi: Alle Tickets zufällig oder individuelle Auswahl pro Ticket
|
|
Manuelle Zahleneingabe mit Validierung (1-49, keine Duplikate)
|
|
Automatische Gewinnzahlen-Generierung
|
|
Vergleich aller Tickets mit Gewinnzahlen
|
|
Statistiken über Matches pro Ticket
|
|
Berechnung der Gewinnwahrscheinlichkeit
|
|
2. Was wurde erfolgreich implementiert
|
|
WPF Interface:
|
|
|
|
Eingabebereich für Ticketanzahl
|
|
Radiobuttons für Spielmodi
|
|
Dynamische Anzeige für manuelle Zahleneingabe
|
|
Ergebnisbereich mit Scroll-Funktion
|
|
Spiellogik:
|
|
|
|
Zufällige Zahlengenerierung ohne Duplikate
|
|
Manuelle Eingabe mit Validierung (Bereich 1-49, keine Duplikate)
|
|
Vergleich von Spieler-Tickets mit Gewinnzahlen
|
|
Recursive Binary Search für Zahlenvergleich
|
|
Statistiken:
|
|
|
|
Zählung der Matches pro Ticket (0-6 Treffer)
|
|
Gesamtstatistik aller gespielten Tickets
|
|
Berechnung der Gewinnwahrscheinlichkeit
|
|
Datenstrukturen:
|
|
|
|
Liste von int-Arrays für Ticket-Verwaltung
|
|
Array für Match-Statistiken
|
|
3. Was nicht implementiert wurde
|
|
Fehlende Sachen:
|
|
|
|
"Spiel wieder starten" Button
|
|
"Programm beenden" Button
|
|
Preisverteilung (wie viel Geld man gewinnt)
|
|
Try-Catch für Fehlerbehandlung
|
|
4. Aufgabenverteilung im Team
|
|
Saad Akki:
|
|
|
|
MainWindow.xaml (XAML-Struktur)
|
|
Design und Layout der Benutzeroberfläche
|
|
Buttons, Labels, TextBoxes
|
|
Styling und Visual Properties
|
|
Grid-Layout und Panel-Anordnung
|
|
Abdelaziz Elouazzani:
|
|
|
|
MainWindow.xaml.cs (Code-Behind)
|
|
Event-Handler für alle Buttons und RadioButtons
|
|
Logik für UI-Interaktionen
|
|
Datenflow zwischen UI und Lotto-Klasse
|
|
Ergebnis-Anzeige und Formatierung
|
|
Khadija:
|
|
|
|
Lotto.cs (Business Logic Klasse)
|
|
Algorithmen für Zahlengenerierung
|
|
Duplicate Checker Methode
|
|
Recursive Binary Search Implementation
|
|
Statistik-Berechnungen und Wahrscheinlichkeits-Mathematik
|
|
Teamarbeit: Wir haben kontinuierlich zusammengearbeitet, um die Verbindung zwischen den Klassen sicherzustellen und die Integration zu testen.
|
|
|
|
5. Entwicklungsansatz
|
|
Wir haben einen Console-First Ansatz verwendet:
|
|
|
|
Phase 1: Vollständige Implementation als Konsolen-Anwendung
|
|
|
|
Klare Vision der Programmlogik entwickeln
|
|
Algorithmen testen und verfeinern
|
|
Einfache Modifikationen ohne UI-Anpassungen
|
|
Phase 2: Konvertierung zu WPF-Anwendung
|
|
|
|
Core-Logik aus Console-Version übernommen
|
|
UI-spezifische Anpassungen hinzugefügt
|
|
Event-driven Programming implementiert
|
|
Dieser Ansatz hat uns geholfen, die komplexe Logik erst zu verstehen, bevor wir sie in eine graphische Oberfläche integrierten.
|
|
|
|
6. Probleme und Lösungen
|
|
Problem 1: Programm-Aufbau
|
|
|
|
Problem: Wie baut man ein komplettes Lotto-System?
|
|
Lösung: Zwei Modi gemacht (alle zufällig oder einzeln wählen) damit es benutzerfreundlicher ist
|
|
Problem 2: Wahrscheinlichkeits-Anzeige
|
|
|
|
Problem: Wie zeigt man sehr kleine Dezimalzahlen richtig an?
|
|
Lösung: F:10 Format verwendet für 10 Dezimalstellen
|
|
Problem 3: Duplicate Checker Problem
|
|
|
|
Problem: DuplicateChecker hat immer "true" gesagt bei gefüllten Arrays
|
|
Was war falsch: Methode hat Zahl gegen sich selbst im Array geprüft
|
|
Lösung: Logik geändert - während des Befüllens prüfen, nicht nachher
|
|
Problem 4: Mehrere Tickets verwalten
|
|
|
|
Problem: Wie kann man viele Tickets gleichzeitig verwalten?
|
|
Lösung: List<int[]> verwendet für alle Tickets
|
|
Problem 5: Interface-Kontrolle
|
|
|
|
Problem: Panels richtig ein- und ausblenden je nach Benutzer-Wahl
|
|
Lösung: Event-Handler für RadioButtons mit Visibility-Eigenschaften
|
|
7. Was wir gelernt haben
|
|
Was wir technisch gelernt haben:
|
|
|
|
Recursive Algorithmen: Binary Search verstehen und programmieren
|
|
String-Formatierung: verschiedene Format-Arten wie F10
|
|
WPF programmieren: Events, XAML-Design, Code-Behind
|
|
Listen und Arrays: praktisch verwenden im Programm
|
|
Input-Prüfung: wie man falsche Eingaben verhindert
|
|
Allgemein:
|
|
|
|
Erst Console-Version machen, dann WPF ist einfacher
|
|
Zusammenarbeit im Team und Code verbinden
|
|
Schwierige Bugs finden und lösen
|
|
8. Was man verbessern könnte
|
|
Try-Catch für bessere Fehlerbehandlung
|
|
"Neues Spiel" und "Exit" Buttons hinzufügen
|
|
Bessere Fehlermeldungen für Benutzer
|
|
Preissystem: wie viel Geld man gewinnt
|
|
Andere Lotto-Arten (6/45, 5/42)
|
|
Schönere Animationen
|
|
Mehrere Sprachen
|
|
9. Quellen
|
|
[Quellen werden später hinzugefügt]
|
|
|
|
Klassen-Struktur:
|
|
|
|
MainWindow.xaml: UI-Layout und Design
|
|
MainWindow.xaml.cs: Event-Handling und UI-Logik
|
|
Lotto.cs: Core-Spiellogik und Mathematik
|
|
Entwickelt von: Saad Akki, Abdelaziz Elouazzani, Khadija
|
|
|