Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
projektewise24:projekt8:doku [2025/03/31 23:13] jck8erlin [Code und Rohdaten] |
projektewise24:projekt8:doku [2025/04/01 09:55] (aktuell) jf155 |
||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ====== Projektdokumentation ====== | + | ====== 4-Gewinnt-Roboter ====== |
Zeile 18: | Zeile 18: | ||
===== Überblick über das Gesamtsystem ===== | ===== Überblick über das Gesamtsystem ===== | ||
+ | <figure Gesamtsystem1> | ||
+ | {{:projektewise24:projekt8:komponentengesamtsystem.jpg?500 |}} | ||
+ | <caption>Überblick über die Komponenten</caption> | ||
+ | </figure> | ||
+ | |||
+ | <figure Gesamtsystem2> | ||
+ | {{:projektewise24:projekt8:komponentengesamtsystemm2.jpg?500 |}} | ||
+ | <caption>Überblick über die Komponenten</caption> | ||
+ | </figure> | ||
+ | |||
+ | <figure Gesamtsystem3> | ||
+ | {{:projektewise24:projekt8:komponentengesamtsystem3.jpg?500 |}} | ||
+ | <caption>Überblick über die Komponenten</caption> | ||
+ | </figure> | ||
+ | ===== Schaltplan ===== | ||
<figure Schaltplan> | <figure Schaltplan> | ||
Zeile 158: | Zeile 173: | ||
=== Spiellogik === | === Spiellogik === | ||
+ | |||
+ | |||
+ | Wenn man ein 4-gewinnt Spiel programmiert ist die erste Aufgabe ein Gerüst für das Spiel zu schaffen mit mit Spielmechaniken. Unter Spielmechaniken verstehen wir die Initialisierung des Spielfelds, der Spielzug und die Überprüfung ob gewonnen wurde. Wie man sehen kann auf den den Fotos (drunter), sind diese Codes meist simpler und mit for-Schleifen. Diese For-Schleifen ermöglichen uns die Überprüfung vertikal sowie diagonal sehr simple aufzubauen. Ein großer Vorteil der für uns dadurch entsteht ist, dass wir kein Zeilen Angabe brauchen sondern nur die Spalte in die gespielt wird. Das entsteht dadurch, dass die for-Schleife von Zeile eins in unserer gewünschten Spalte hochklettern bis das Feld leer ist und dann den Spielstein digital setzt. Dieser Ablauf passiert in unserer Funktion "Zug" (erste bild von links). | ||
+ | |||
+ | {{:projektewise24:projekt8:bildschirmfoto_2025-03-31_um_23.14.32.png?200|}}{{:projektewise24:projekt8:bildschirmfoto_2025-03-31_um_23.13.43.png?200|}}{{:projektewise24:projekt8:bildschirmfoto_2025-03-31_um_23.18.17.png?200|}} | ||
+ | |||
+ | Nun zur Spiellogik, die Spiellogik des Vier-Gewinnt-Roboters bildet sein Herzstück. Sie bestimmt, wie der Roboter das Spielfeld analysiert, Züge berechnet und strategisch auf den Gegner reagiert. Die Grundlage dieser Logik ist ein Algorithmus, der das aktuelle Spielfeld auswertet und mögliche Spielzüge im Vorraum bewertet. Dabei wird sichergestellt, dass der Roboter stets über eine optimale Strategie verfügt und dennoch eine moderate Schwierigkeitsstufe bietet, um dem Spieler eine faire Herausforderung zu bieten.\\ | ||
+ | |||
+ | Zunächst erkennt unser KI gesteuerter Roboter die aktuelle Spielsituation, indem er alle freien und belegten (seiner + Spielers) Felder analysiert. Das passiert durch die Erstellung eines digitalem Spielfeldes, wie eben schon benannt in Bezug auf die Spielmechaniken.\\ | ||
+ | |||
+ | Anschließend werden verschiedene Zugmöglichkeiten simuliert in einem MiniMax-Algorithmus. Dieser Algorithmus arbeitet nach einem einfachen Prinzip, die KI versucht, ihren eigenen besten Zug zu maximieren, während die KI gleichzeitig annimmt, dass der Gegner ebenfalls optimal spielt und dessen beste Option minimiert. Durch diese Vorgehensweise kann die Spiellogik, nicht nur offensive, sondern auch defensive Spielzüge erkennen und entsprechende Entscheidungen treffen.\\ | ||
+ | Hier der Code des MiniMax-Algorithmus:\\ | ||
+ | |||
+ | {{:projektewise24:projekt8:bildschirmfoto_2025-03-31_um_22.42.06.png?200|}}\\ | ||
+ | |||
+ | Bezüglich des Ablaufes des Codes, kommen wir eher langsam voran. Der Lebenszyklus wurde erst vor kurzem angefangen und hat somit eher wenig vor zu zeigen, ist dennoch mit in unseren Codes (unten) enthalten.\\ | ||
===== Technische Daten===== | ===== Technische Daten===== | ||
Zeile 202: | Zeile 233: | ||
==== Ergebnis und Diskussion ==== | ==== Ergebnis und Diskussion ==== | ||
- | Das Ziel unseres Projekts war die Entwicklung eines Roboters, der das Spiel „4-Gewinnt“ gegen einen menschlichen Spieler autonom spielen kann. Der Roboter sollte dazu in der Lage sein, die eigenen Spielsteine gezielt in das Spielfeld einzuwerfen, Spielzüge zu analysieren und mit dem Spieler zu interagieren. | + | Das Ziel unseres Projekts war die Entwicklung eines Roboters, der das Spiel „4-Gewinnt“ gegen einen menschlichen Spieler autonom spielen kann. Der Roboter sollte dazu in der Lage sein, die eigenen Spielsteine gezielt in das Spielfeld einzuwerfen, Spielzüge zu analysieren und mit dem Spieler zu interagieren. |
+ | Zum jetzigen Zeitpunkt kann der Roboter bereits den Beginner per Zufallsauswahl bestimmen und dies durch LEDs signalisieren. Er kann anzeigen, wer am Zug ist. Ist der Roboter am Zug, kann er die gewünschte Spalte präzise ansteuern und seinen Spielstein meist in das Spielfeld fallen lassen. Wenn der Mensch am Zug ist, kann dieser seinen Spielzug über Knöpfe eingeben. | ||
+ | Dieser Vorgang ist aktuell noch fehlerhaft, da die Input-Werte nicht immer stabil sind. Das führt zu einer fehlerhaften Spielzugerkennungen, wenn man diese nicht noch genauer kalibriert. Mögliche Lösungsansätze wären die Verwendung anderer Widerstände oder eine verbesserte Codevariante, um Spannungsschwankungen besser auszugleichen. | ||
+ | Der Spielausgang wird durch LEDs und einen Piezo-Lautsprecher verdeutlicht. | ||
- | Zum jetzigen Zeitpunkt kann der Roboter bereits den Beginner per Zufallsauswahl bestimmen und dies durch LEDs signalisieren. Er kann anzeigen, wer am Zug ist. Ist der Roboter am Zug, kann er die gewünschte Spalte präzise ansteuern und seinen Spielstein mit meist in das Spielfeld fallen lassen. Wenn der Mensch am Zug ist, kann dieser seinen Spielzug über Knöpfe eingeben (nachdem diese kalibriert wurden). Der Spielausgang wird durch LEDs und einen Piezo-Lautsprecher verdeutlicht. Mithilfe der LEDs und dem Piezo-Lautsprecher kann deutlich gemacht werden, wie das Spiel ausgegangen ist. | + | Allerdings bestehen derzeit noch Probleme mit der Kommunikation zwischen den einzelnen Komponenten. Dadurch ist kein reibungsloser Spielablauf möglich. Die einzelnen Code-Abschnitte müssen wir noch miteinander verbinden, um diese Probleme lösen zu können. Dies ist bis jetzt aus Zeitgründen noch nicht geschehen. |
- | Allerdings bestehen derzeit noch Probleme mit der Kommunikation zwischen den einzelnen Komponenten. Dadurch ist kein reibungsloser Spielablauf möglich. Die einzelnen Code-Abschnitte müssen wir noch miteinander verbinden, um diese Probleme lösen zu können. Dies ist bis jetzt aus Zeitgründen noch nicht geschehen. \\ | + | Ein weiteres geplantes Feature war die Implementierung einer KI, die das Spielfeld auswertet und Spielzüge auf einer moderaten Schwierigkeitsstufe trifft. Aus zeitlichen Gründen konnten wir das bis jetzt noch nicht umsetzen. Unsere Idee wäre die Nutzung eines Minimax-Algorithmus, um den Roboter zu einem anspruchsvolleren Gegner zu machen. |
- | Die Kommunikation über die Knöpfe ist aktuell noch fehlerhaft, da die Input-Werte nicht immer stabil sind. Das führt zu einer fehlerhaften Spielzugerkennungen, wenn man diese nicht erneut kalibriert. Mögliche Lösungsansätze wären die Verwendung anderer Widerstände oder eine verbesserte Codevariante, um Spannungsschwankungen besser auszugleichen. \\ | + | |
- | Ein weiteres geplantes Feature war die Implementierung einer KI, die das Spielfeld auswertet und Spielzüge auf einer moderaten Schwierigkeitsstufe trifft. Aufgrund von Zeitbeschränkungen konnten wir dies bislang nicht umsetzen. Unsere Idee wäre die Nutzung eines Minimax-Algorithmus, um den Roboter zu einem anspruchsvolleren Gegner zu machen. | + | |
==== Code und Rohdaten ==== | ==== Code und Rohdaten ==== | ||
- | |||
- | Wenn man ein 4-gewinnt Spiel programmiert ist die erste Aufgabe ein Gerüst für das Spiel zu schaffen mit mit Spielmechaniken. Unter Spielmechaniken verstehen wir die Initialisierung des Spielfelds, der Spielzug und die Überprüfung ob gewonnen wurde. | ||
- | |||
- | Die Spiellogik des Vier-Gewinnt-Roboters bildet sein Herzstück. Sie bestimmt, wie der Roboter das Spielfeld analysiert, Züge berechnet und strategisch auf den Gegner reagiert. Die Grundlage dieser Logik ist ein Algorithmus, der das aktuelle Spielfeld auswertet und mögliche Spielzüge im Vorraum bewertet. Dabei wird sichergestellt, dass der Roboter stets über eine optimale Strategie verfügt und dennoch eine moderate Schwierigkeitsstufe bietet, um dem Spieler eine faire Herausforderung zu bieten.\\ | ||
- | |||
- | Zunächst erkennt unser KI gesteuerter Roboter die aktuelle Spielsituation, indem er alle freien und belegten (seiner + Spielers) Felder analysiert. Das passiert durch die Erstellung eines digitalem Spielfeldes.\\ | ||
- | |||
- | Anschließend werden verschiedene Zugmöglichkeiten simuliert in einem MiniMax-Algorithmus. Dieser Algorithmus arbeitet nach einem einfachen Prinzip, die KI versucht, ihren eigenen besten Zug zu maximieren, während die KI gleichzeitig annimmt, dass der Gegner ebenfalls optimal spielt und dessen beste Option minimiert. Durch diese Vorgehensweise kann die Spiellogik, nicht nur offensive, sondern auch defensive Spielzüge erkennen und entsprechende Entscheidungen treffen.\\ | ||
- | Hier der Code des MiniMax-Algorithmus:\\ | ||
- | |||
- | {{:projektewise24:projekt8:bildschirmfoto_2025-03-31_um_22.42.06.png?200|}}\\ | ||
- | |||
- | |||
- | |||
- | **Hier solltet Ihr eine lauffähige Version eures Codes inkl. aller verwendeten Libraries als .zip-Datei zum Download anbieten.** | + | Diese zip-Datei enthält den aktuellen Stand des Codes mit Ausnahme der Sound+Stepper Codes, diese befinden sich in der zweiten Zip Datei. |
+ | {{:projektewise24:projekt8:code_4gewinnt_robotik.zip|}}{{:projektewise24:projekt8:zweitezip_stepper_sound_4gewinnt_robotik.zip|}} | ||
+ | [[https://github.com/PClara101/4Gewinn-t-er]] | ||
\\ | \\ | ||
\\ | \\ |