game programming mit lua universität zu köln historisch kulturwissenschaftliche...
TRANSCRIPT
Game Programming mit Lua
Universität zu KölnHistorisch Kulturwissenschaftliche InformationsverarbeitungReferent: Jens Wangenheim
Gliederung
1. Game Programming mit LUA
• 1.1 Rundenbasiertes Spiel
• 1.2 Endlosspiel
2. KI definieren und kontrollieren
1. Game Programming mit LUA
Game Programming mit Lua
• Unterscheidung zwischen einem rundenbasierten Spiel und einem „Endlosspiel“
• Rundenbasiert: Der Spieler macht einen Zug, es gibt keinen wirklichen „Flow“ (Beispiel: Tic, Tac, Toe)
• Endlosspiel: Es gibt einen durchgehenden Spielfluss, der Spieler kann sich bewegen und es sind Gegner vorhanden (Beispiel: Pacman)
Rundenbasiertes Spiel
Grundsätzliche Überlegungen:
- Welche Elemente werden benötigt?
- Welche Regeln gibt es bei der Durchführung eines Zuges?
- Welche Bedingung muss für einen Sieg erfüllt werden?
Rundenbasiertes Spiel
Nötige Elemente:- Spielbrett myBoard {0, 0, 0, 0, 0, 0, 0, 0, 0}
Rundenbasiertes Spiel
Nötige Elemente:- 2 verschiedene „Spielfiguren“ um die Felder zu belegen
X O
Rundenbasiertes Spiel
Mögliche Belegungen der Felder vorbereiten
Rundenbasiertes Spiel
EnableObject( EX + 1, 0, 0)
1. Stelle: Position auf dem Feld
2. Stelle: Objekt auf Spielfeld rendern?
3. Stelle: Soll Objekt auf Benutzereingabe reagieren?
Rundenbasiertes Spiel
Regeln bei der Durchführung eines Zuges:
- „Besondere“ Situation vor dem ersten Zug im Spiel überhaupt:
Spiel muss initialisiert werden, Startwerte müssen gesetzt werden.
Rundenbasiertes Spiel
Durchführung eines Zuges:
- Spieler wählt Feld
- Prüfe: Ist Feld belegt?
- Wenn nicht: MakeMove();
Rundenbasiertes Spiel
Funktion MakeMove();
- Prüft Position auf die geklickt wurde
- Rendere Objekt auf Spielfeld EnableObject( EX + 1, 1, 1)
- Update Spielfeld Array myBoard( X, 0, 0, 0, 0, 0, 0, 0, 0)
- Führe WinCheck(); durch
Rundenbasiertes Spiel
Prüfe Position mit getBoardLocation();- X und Y Koordinaten werden an Funktion übergeben
If (X > 0) and (X < 100) and (Y > 0) and (Y < 100) then
myPostion = 1
If (X > 100) and (X < 200) and (Y > 0) and (Y < 200) then
myPostion = 2
usw.
Rundenbasiertes Spiel
Funktion WinCheck();- Prüfe ob 3 gleiche Symbole in einer Reihe:
If myBoard[1] == currTurn then
if myBoard[2] == currTurn then
if myBoard[3] == currTurn then
theGame == currTurn
- Prüfe ob Cat‘s game zutrifft (Unentschieden)
Beispiel: „Die Fürsten von Catan“
Spieler ist am Zug:• Würfeln (Beide Würfel mit math.random(); berechnen)• Wähle zu spielende Karte
- Prüfe ob Voraussetzungen für Karte erfüllt sind ( z.B. legalCheck();). Genug Rohstoffe? Bauplatz vorhanden? Weitere Voraussetzungen erfüllt (bestimmte Gebäude)?
• Wähle Bauplatz (Position des Mausklicks bestimmen), rendere Karte auf Spielfeld und wähle entsprechende Grafik- Falls Aktionskarte: Führe Aktion durch, sortiere Karte aus
• WinCheck();
Endlosspiel
Ein Endlosspiel erhöht die Komplexität und hat, im Gegensatz zum Rundenbasierten Spiel, einige weitere Anforderungen:
- Spiel ist laufend in Bewegung- Es befinden sich Gegner auf dem Spielfeld- Punkte werden nach verschiedenen Regeln vergeben- Die „Kontrolle“ der Spielfigur rückt in den Fokus- Spielfiguren können durch „Abschuss“ zerstört werden
2. KI definieren und kontrollieren
KI – Computergegner
• Der Computergegner gibt nur vor zu denken
• Im Prinzip werden nur Daten verarbeitet und dem entsprechende Anweisungen ausgeführt
• Der Computergegner hat eventuell mehr Informationen vorliegen als der menschliche Spieler
KI - Computergegner
Beispiele im Buch:• Blac Jack• Tic Tac Toe• Take Away
Für uns relevant:• Elemente der KI aus Black Jack und Tic Tac Toe
KI - Computergegner
Elemente aus Black Jack:• Zufälliger, endlicher Stapel von Elementen
- In unserem Fall mehrere Stapel. Einige mit verschiedenen zufälligen Elementen, einige mit einer bestimmten Anzahl gleicher Elemente
• Klare Festlegung was welche Wirkung eine Karte hat- Jede Karte bringt auf oberster Ebene entweder einen Vorteil oder einen Nachteil. Auf der darunter liegenden Ebene entweder Siegpunkte, Fortschrittspunkte, Handelspunkte, Stärkepunkte, Rohstoffe etc.
KI - Computergegner
Elemente aus Tic Tac Toe:• Zugbasiertes Spiel, keine Flow
- Computer muss nicht in Echtzeit auf Gegner reagieren bzw. andersherum. Weniger Komplexität!
• Spielfeld als Grundlage- Fungiert als Schnittstelle
KI – Computergegner
Erste Schritte:• Verschiedene Kartentypen klassifizieren und Wirkung
gewichten:- Siegpunkt: 5
- Fortschrittspunkt: 4
- Stärkepunkt/Handelspunkt: 3
- Geschicklichkeitspunkt: 2
- Rohstoff: 1
• Dabei auf Multiplikatoren achten!
KI - Computergegner
Erste Schritte:• Stapel erzeugen und durchmischen
- Geht 1000 mal durch den Stapel und tauscht jedes mal die Position 2 zufälliger Karten
KI - Computergegner
Computer ist am Zug:
• Timer Funktion simuliert den Prozess des Nachdenkens• Idealerweise benötigen wir nur eine Funktion, die alle
möglichen Züge bewertet• Bewertung wird durch einen Algorithmus durchgeführt
(z.B. Minimax-Verfahren)• Je nach gewähltem Schwierigkeitsgrad wird der
erstrebenswerteste Zug zu x% durchgeführt
KI - Computergegner
Minimax-Verfahren:• Im Kern vom Spiel unabhängig (egal ob Schach oder
Dame)• Schnittstellen zum speziellen Spiel:
- Welche Züge sind in konkreter Spielsituation möglich?
- Wie wird eine Spielsituation numerisch bewertet?
• Vorschlag:- Siegpunkt: 5, Fortschrittspunkt: 4, Stärkepunkt/Handelspunkt: 3 usw.
KI - Computergegner
Vorteile des Minmax-Verfahrens:• Kann durch traversieren durch den Spielbaum
optimierende bzw. minimierende Spielzüge ermitteln.
Nachteil des Minmax-Verfahrens:• Zugmöglichkeiten des Gegners müssen bekannt sein
- Durch Zufallskomponente(n) eventuell ungeeignet für unseren Zweck?
KI - Computergegner
Der Spielbaum:
- Führt eine Bewertungsfunktion ein, die jeder Spielstellung einen Zahlenwert zuweist, der umso höher ist, je günstiger die Spielstellung für Spieler A ist, und umso niedriger, je günstiger die Spielstellung für Spieler B ist. Dann ist es möglich, durch Analyse des Spielbaums den optimalen Zug für Spieler A zu finden.
KI - Computergegner
KI in Endlosspielen:
• Viel komplexere Berechnungen durch:- Antizipation
- Defensivverhalten
- Enorm viele mögliche „Reisewege“
- Rücksicht auf eventuell weitere vorhandene Gegner
KI - Computergegner
• Vergleichen von Ergebnissen: Verloren ist zwar schlechter als unentschieden, aber unentschieden nicht besser als Verloren…
• Gibt es keine gültigen Züge mehr, spielt der Computergegner nicht weiter
Usw.
Deshalb gilt:• Gehe davon aus das alles falsch ist, bevor du nicht
geprüft hast ob es richtig ist!