====== Projekt: Mastermind – den Geheimcode knacken ======
In diesem kurzen Projekt programmierst du das klassische Knobelspiel **Mastermind**. Du brauchst dazu nur die bekannten Werkzeuge: Variablen, Verzweigungen (`if`/`elif`/`else`), Schleifen (`while`/`for`), Listen und das `random`-Modul.
[[https://if2.ksr.ch/mastermind/|Mastermind Online]]
===== - Die Spielregeln =====
{{youtube>_wCMg8Stg5c?}}
Der Computer denkt sich einen geheimen Code aus **4 Ziffern** aus. Jede Ziffer liegt zwischen **1 und 6**. Du hast **12 Versuche**, den Code zu erraten. Nach jedem Tipp verrät dir der Computer zwei Zahlen:
* **rot** = so viele Ziffern sind //richtig und an der richtigen Stelle//
* **weiss** = so viele Ziffern kommen zwar im Code vor, stehen aber //an der falschen Stelle//
Mehr sagt er nicht – //welche// Ziffern es sind, musst du selbst herausfinden. Genau das ist der Reiz.
Wir programmieren zwei Varianten des Spiels:
1. **Vereinfachung:** Eine Zahl kann höchstens *einmal* vorkommen.
2. **Original:** Eine Zahl kann *mehrfach* vorkommen. Das macht den Code deutlich anspruchsvoller.
**Beispiel (Original).** Der geheime Code sei ``3 3 1 2`` (beachte: die $3$ kommt doppelt vor).
^ Dein Tipp ^ rot ^ weiss ^ Erklärung ^
| ``1 2 3 4`` | 0 | 3 | 1, 2, 3 sind im Code, aber am falschen Platz; 4 gar nicht |
| ``3 3 3 3`` | 2 | 0 | zwei 3er sitzen richtig; die beiden übrigen 3er zählen **nicht**, weil der Code nur zwei 3er enthält |
| ``3 3 1 2`` | 4 | 0 | geknackt! |
Die mittlere Zeile ist der springende Punkt: Jede Ziffer im Code kann nur **einmal** getroffen werden. Das macht die Auswertung interessanter, als sie auf den ersten Blick aussieht.
===== - Der Auftrag =====
**Aufgabe I:** Programmiere eine leicht vereinfachte Version von Mastermind, bei der **jede Ziffer im Code höchstens einmal vorkommt**. Dein Programm muss:
- Den geheimen 4-stelligen Code zufällig erzeugen (Ziffern 1–6, **Wiederholungen nicht erlaubt**), in Liste speichern. Tipp: Leere Liste erstellen, dann so lange Zufallszahlen hinzufügen, bis vier //verschiedene// drin sind.
- Player auffordern, vierstellige Zahl einzugeben, z.B. ``1234``.
- In Liste mit vier einzelnen Zahlen umwandeln.
- **Rot** und **weiss** korrekt berechnen und beide ausgeben.
- Alles ab 2. Punkt in Endlosschleife `while True`.
- Schleife abbrechen (`break`), sobald Player richtige Zahlen erraten hat oder $12$ Versuche erreicht wurde.
- Finale Ausgabe: "Gewonnen" oder "Verloren" sowie Anzahl Versuche.
**Aufgabe II:** Starte mit einer Kopie von I und passe sie so an, dass eine Zahl *mehrfach* vorkommen kann (das ist das echte Mastermind). //Tipp:// Überlege dir zuerst auf Papier, wie du beim Beispiel ``3 3 3 3`` gegen ``3 3 1 2`` verhinderst, dass du eine Ziffer doppelt zählst.