Android will doch nur spielen. Ein Spieleframework stellt sich vor

Ähnliche Dokumente
Einführung in die Methoden der Künstlichen Intelligenz. Suche bei Spielen

Strategiespiele mit Java WS 07

Einführung in die Methoden der Künstlichen Intelligenz. Suche bei Spielen

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Wiederholung: Gerüstbeispiel. Vererbungshierarchie: Typ 0

Dieses Dokument enthält alle Teilaufgaben zur Java-Pflichtaufgabe für das Sommersemester Aufgabe 1 (Vier Gewinnt 1. Teil)

Zwei-Spieler-Spiele. Einführung in die Methoden der Künstlichen Intelligenz. Suche bei Spielen. Schach. Schach (2)

Informatik II Übung 7. Gruppe 2 Carina Fuss

7. Schnittstellen Grundlagen zu Schnittstellen. 7. Schnittstellen

Weitere Beispiele. Beispiel CD-Spieler: Exemplare eines abstrakten Konzepts. 7. Schnittstellen. Schnittstelle: Syntax

Objektorientierte Programmierung. Kapitel 14: Interfaces

IT I: Heute. abstrakte Methoden und Klassen. Interfaces. Interfaces List, Set und Collection IT I - VO 7 1

Zwei-Spieler-Spiele. Einführung in die Methoden der Künstlichen Intelligenz. Suche bei Spielen. Schach. Schach (2)

Objektorientierte Programmierung. Kapitel 12: Interfaces

Objektorientierte und Funktionale Programmierung SS 2014

Das Interface-Konzept am Beispiel der Sprache Java

Suche in Spielbäumen Spielbäume Minimax Algorithmus Alpha-Beta Suche. Suche in Spielbäumen. KI SS2011: Suche in Spielbäumen 1/20

OOP. Tagesprogramm. Software-Entwurfsmuster. Factory-Method. Prototype

Einführung in die Programmierung

Vorlesung Datenstrukturen

12 Abstrakte Klassen, finale Klassen und Interfaces

Javakurs für Anfänger

185.A Software-Entwurfsmuster 1 OOP. Software-Entwurfsmuster

Präsentation Interfaces

Zwei-Spieler-Spiele. Einführung in die Methoden der Künstlichen Intelligenz. Suche bei Spielen. Schach. Schach (2)

Die abstrakte Klasse Expression:

Javakurs für Anfänger

Der Alpha-Beta-Algorithmus

EINFÜHRUNG IN DIE PROGRAMMIERUNG

Einführung: Verteilte Systeme - Remote Method Invocation -

Probeklausur: Programmierung WS04/05

EINFÜHRUNG IN DIE PROGRAMMIERUNG

Programmieren in Java -Eingangstest-

TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK

1 Aufgaben 1.1 Umgebungsvariable setzen: CLASSPATH

OOP. Tagesprogramm. Aspekte und Annotationen. Software-Entwurfsmuster. Factory-Method. Prototype

Informatik II Übung 8

Prüfung Softwareentwicklung II (IB)

Inhaltsverzeichnis. Grundlagen und Einführung (1. Band) 1

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Einstieg in die Informatik mit Java

Informatik II Übung 7 Gruppe 3

Objektorientierte Programmierung Studiengang Medieninformatik

Vererbung. Generalisierung und Spezialisierung Vererbung und Polymorphismus

JTable. W. Lang HWR Berlin, SS

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen

Künstliche Intelligenz - Optimierungsprobleme - Suche in Spielbäumen

Aufgabenblatt 4. Aufgabe 3. Aufgabe 1. Aufgabe 2. Prof. Dr. Th. Letschert Algorithmen und Datenstrukturen

Einführung in die Programmierung

Aufgabe 2 - Spiele mit Zyklen Gegeben sei folgendes einfache Spiel:

Softwareentwicklung Schrittweise Verfeinerung, Programmieren üben: Tic-Tac-Toe in Raten

Übungsserie Nr. 6. Ausgabe: 1. April 2015 Abgabe: 15. April Hinweise

Objektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types)

6. Spiele Arten von Spielen. 6. Spiele. Effizienzverbesserung durch Beschneidung des Suchraums

Programmieren II. Java im Vergleich zu anderen Sprachen. Einführung: GUI. Einführung: Grafische Benutzeroberflächen. Dr.

Praktikum Algorithmen-Entwurf (Teil 7)

Javakurs für Anfänger

Software-Entwurfsmuster

Informatik II - Übung 07

ALP II Dynamische Datenmengen Datenabstraktion

Vererbung und Polymorphie

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 15/16. Kapitel 7. Grafische Benutzeroberflächen 1

Abschnitt 14: Schnittstellen: Interfaces

Factory Method (Virtual Constructor)

Abstrakte Basisklassen

Programmierung Nachklausurtutorium

Programmieren 1 09 Vererbung und Polymorphie

Informatik II Übung 6

Kapitel 13. Abstrakte Methoden und Interfaces. Fachgebiet Knowledge Engineering Prof. Dr. Johannes Fürnkranz

Hackenbusch und Spieltheorie

Grundlagen des Spiels

Polymorphie/Späte Bindung Abstrakte Klassen Interfaces. Polymorphie/Späte Bindung Abstrakte Klassen Interfaces

Informatik II Übung 6 Gruppe 7

A&R TECH C++ Chess Challenge

Projekt 1: Constraint-Satisfaction-Probleme Abgabe: 7. Juni 2009

Netzwerkprogrammierung in Java Protokollspezifikation Vier Gewinnt

Waitomo. Compilerbaupraktikum Wintersemester 2006/2007. Stefan Wehr. 24. Oktober 2006

Outline. WWU Münster. Ziele dieser Uebung. Mini-Einfuehrung in git. Neue Matrix-Klassen. Dateien. Aufgaben. Ausblick living knowledge

Abstrakte Basisklassen

Dokumentation des Projektes Tic Tac Toe

... die Funktion Ñ Ò µ einer Klasse ÂÚÑ:

BRING DEINE STRATEGIE INS ROLLEN THE STRATEGIC BOARD GAME WITH SHIFTING MARBLES

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

Tag 9: Grafische Benutzeroberflächen

Programmieren 2 Java Überblick

Modellierung und Programmierung 1

Objektorientierte Programmierung mit C++ SS 2007

// compiliert, aber Programmabbruch zur Laufzeit: einesuppe = ((EßbarerPilz)einPilz).kochen();

Java I Vorlesung 6 Referenz-Datentypen

Ein Entwurfsmuster der GoF. vorgestellt von. Sigrid Weil 16. Januar 2008

Javakurs für Fortgeschrittene

Aufgabenblatt 3. Kompetenzstufe 2. Allgemeine Informationen zum Aufgabenblatt:

C++ - Objektorientierte Programmierung Polymorphie

/** Main-Methode erzeugt einen neuen Editor zum Testen */ public static void main(string[] args) { new Editor();

Abstrakte Klassen und Interfaces

Grundkonzepte java.util.list

Transkript:

Android will doch nur spielen Ein Spieleframework stellt sich vor 1

Agenda Motivation Eine allgemeine Spieleschnittstelle Reguläre Brettspiele TicTacToe Visualisierung und Steuerung Spieleagenten Weitere Spielideen 2

Motivation Definition eines Frameworks: Programmgerüst Wiederverwendbare Komponenten i.d.r. objektorientiert Möglichst generisch Gründe für ein Framework: Häufig auftretenden Code nur einmal implementieren Verwendung von Standards Reduzierung von Fehlern Optimierung der Qualität Wissenstranfer 3

Eine allgemeine Spieleschnittstelle (I) Beschränkung auf Taktikspiel Beispiel: Mühle Dame TicTacToe VierGewinnt Generische Algorithmen langsam verfeinern 4

Eine allgemeine Spieleschnittstelle (II) Gemeinsamkeiten: Endlich viele Zugmöglichkeiten Zu einer Zeit ein Spieler an der Reihe Spielsituation nach jedem Zug vorberechenbar Spielende: Sieg oder keine weiteren Züge mehr möglich Spielsituation bewertbar Dennoch viele Unterschiede: Art der Züge Art des Spielfeldes 5

Eine allgemeine Spieleschnittstelle (III) Höchste Abstraktionstufe: Schnittstelle Game mit generischem Type für Züge Angebotene Methoden: Ermittlung der augenblicklich erlaubten Spielzüge Ausführung eines Spielzugs Ermittlung des Spielers, der an der Reihe ist Ermittlung des wartenden Spielers Überprüfung auf eine das Spiel beendende Situation Überprüfung ob ein Spieler gewonnen hat Auswertung der augenblicklichen Spielsituation 6

Reguläre Brettspiele (I) Schnittstelle bislang für alle Spiele gültig Jetzt Einschränkung: Rechteckiges Spielfeld Eindeutig identifizierbare Felder Spielzug besteht aus dem Setzen einer Marke auf ein Feld Beschränkung auf 2 Spieler Jetzt ausgeschlossene Spiele: Mühle Dame 7

Reguläre Brettspiele (II) Neue Methoden: Ermittlung der Anzahl der Reihen und Spalten Ermittlung einer ID für Spieler 1, 2 und für leere Felder Ermittlung der Situation an einem bestimmten Punkt Veränderung der Situation an einem bestimmten Punkt 8

Abstrakte Implementierung eines regulären Spiels (I) Erste generische Implementierung einiger Methoden Vorgehen ohne konkretes Spiel Weiterhin abstrakt, um Allgemeingültigkeit zu bewahren Implementiert außerdem Cloneable Zeigt an, dass Objekt kopiert werden kann Methode clone() steht zur Verfügung 9

Abstrakte Implementierung eines regulären Spiels (II) Implementierte Methoden: Klassenkonstruktor Ermittlung der Spieler / leeren IDs Ermittlung des augenblicklich aktiven Spielers Ermittlung des nächsten Spieler Ermittlung des vorigen Spielers Ermittlung der Anzahl der Reihen des Spielfeld Ermittlung der Anzahl der Spalten des Spielfeld Ermittlung der Situation an einem bestimmten Punkt Überprüfung ob ein Spieler gewonnen hat Überprüfung ob ein Spieler vorbei ist 10

Warum Cloneable? Spielzug erzeugt neuen Spielzustand Daher eine Kopie des aktuellen Spielzustandes anlegen clone aus Object erzeugt komplette Kopie eines Objektes TODO: implements Cloneable Achtung: Nur flache Kopien werden erzeugt! Keine Kopie von Referenzen! In diesem Fall: Keine Kopie des Spielfeldes Daher: @Override public AbstractRegularGame clone() 11

Eigene clone() Methode 1. super.clone() 2. clone() auf Spielfeld 3. Da Spielfeld zweidimensional: Anwendung von clone() auf innere Komponente 4. CloneNotSupportedException abfangen 12

Abstrakte Implementierung eines regulären Spiels (III) Weiterhin abstract: setatposition evalstate wins nomoremove domove moves 13

Einschub: Klasse für Spielzüge Idee: Ein Zug besteht aus einem x und y Wert Type der Werte allgemein halten Unsere Klasse beinhaltet: Zwei Werte vom Type A und B Konstruktor zum Erzeugen eines Paars Getter und Setter für die beiden Werte 14

TicTacToe Spielfeld der Dimension 3 x 3 Bedingung für Sieg: 3 Steine vertikal, horizontal oder diagonal anordnen Zug ist ein Paar mit Type byte extends AbstractRegularGame<Pair<Byte, Byte>> Standardkonstruktor mit 3 x 3 Spielfeld 15

TicTacToe Implementierung der Methoden (I) Methode zum Setzen eines Steins delegiert an domove Methode zur Ermittlung der erlaubten Spielzüge erzeugt LinkedList besucht alle Zeilen und Spalten liefert Felder mit Besitzer NONE Methode zum Ausführen eines Zugs kopiert das Spielfeld wechselt aktiven Spieler belegt Feld erhöht die Anzahl der getätigten Züge 16

TicTacToe Implementierung der Methoden (II) Auswertung des Spielzustandes: Spiel beendet, wenn Movescounter = Zeilen * Spalten Spiel gewonnen, wenn eine Horizontale, Vertikale oder Diagonale besetzt Je eine Methode für Horizontale und Vertikale Zwei Methoden für Diagonalen Spielzustand evaluieren: Naive Implementierung Sieg wird hoch bewertet Niederlage tief Alles andere neutral 17

Visualisierung und Steuerung Implementierung mit Swing Ableitung eines JPanel-Objekts Steuerung mit der Maus Neuen Listener für Mausklicks definieren AWT und Swing würden den Rahmen des Workshop sprengen Aber: Komponenten wurden im Framework umgesetzt 18

Spieleagenten Implementierung einer KI Computer bewertet alle Züge und wählt besten aus Aufbau von Spielbäumen Min-Max Suche: Werte alle Züge bis Spielende aus Wähle Pfad mit größter Erfolgsaussicht Besser: Alpha-Beta Suche: Bestimme für Teilbäume maximalen Wert, der mindestens erzielt wird Untersuche nur besseren Teilbaum 19

Weitere Spielideen Im Framework enthalten: TicTacToe Vier gewinnt Des weiteren vorstellbar: Othello (Reversi) 8-Damen 20

Vier Gewinnt Benötigte Anpassungen: Größeres Spielfeld Spieler kann bei Zügen nur noch x-wert angeben Prüfung auf Sieg deutlich komplexer Bewertung der Spielzüge komplexer KI muss erheblich verbessert oder unterstützt werden 21