Softwareentwicklungspraktikum Nebenfach

Ähnliche Dokumente
Softwareentwicklungspraktikum Nebenfach

Softwareentwicklungspraktikum Nebenfach

Arbeitsblatt 6: Programmierung geometrischer Figuren

Anwendung Kamel-Simulation

Füllen von Primitiven

Maps installieren. dort auf Maps and Weather. Wähle das Plugin links oben: Klicke auf Download

Was bisher geschah. 1. Zerlegung in monotone Polygone 2. Triangulierung der monotonen Teilpolygone

Softwareentwicklungspraktikum Nebenfach

Abschnitt 10: Datenstrukturen

Geographische Modellierung und Visualisierung von Ereignissen im Bereich digitaler Produktgedächtnisse. Bachelor Seminar

Einführung in die objektorientierte Programmierung mit C++

COPLANER - ERSTE SCHRITTE. Benutzerleitfaden. Verfasserin: Petra Hendrich COPLANER - ERSTE SCHRITTE!... 2 LOGIN UND EIGENE DATEN ÄNDERN!...

Projektarbeit Java. 4-Gewinnt. Berner Fachhochschule. 2004, Labor für Technische Informatik

PSE Kick-off. Prof. Bernhard Beckert, Dr. Mattias Ulbrich, Alexander Weigl

3-stellige Postleitzahlen

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung

Gliederung. Übungsbeispiel Autovermietung

Aufgabenblatt 9. Die Abgabe muss bis Sonntag, 21. Juni 2009, 24 Uhr, erfolgen. Verspätet eingereichte Lösungen werden nicht berücksichtigt.

Gui-Objekte und Datenmodellobjekte

37. Bundeswettbewerb Informatik Anregungen für den Unterricht

Ein PDF erstellen. aus Adobe InDesign CC. Tipps und Tricks rund um Ihr Marketing, Grafik und Design

Baumeditor (Bryce 5.01) (ein wenig anders)

Objektorientierung. Programmierstarthilfe WS 2010/11 Fakultät für Ingenieurwissenschaften und Informatik

Neue Digitalisierfunktion Erfassen und verwalten Sie eigene Geodaten im GeoPortal

Lastenheft Gruppe HK-03 erstellt am: Lastenheft

TinkerCAD Basics. Eine kleine Übersicht über die wichtigsten Funktionen und Möglichkeiten beim 3D-Modellieren mit dem bowserbasierten TinkerCAD.

Intensivübung zu Algorithmen und Datenstrukturen

Einführung. Unterstützte Daten. Inhalt. OpenJUMP Image PlugIn

Import / Export Teil1 DXF und ESRI Shape. Webinar Hans Andorfer

Übungen zu Computergrafik

AquaSoft Earth Pilot. Handbuch

Vorstellung der Aufgabe Nonogramme

Was ändert sich, wenn zu Beginn eine andere Anzahl n an Streichhölzern auf dem Haufen liegt?

ECDL-Advanced Excel 2010 Advanced

Vorstellung der Aufgabe Nonogramme

Schriftliche Prüfung zur Computergestützten Mathematik zur Linearen Algebra (PO 2014: Erste Klausur / PO 2008: Klausur)

Buchungen im falschen Monat/Buchungskreis erfasst oder Abrechnungsnummer falsch angelegt

Route erstellen in Kurviger

Name, Vorname... Matrikelnummer... Rechnername... Grundlagen der Darstellung II (Einführung in CAD), Prüfung WS 2011/2012

High Performance Computing Blatt 7

GEVITAS MobileCatalog

Mensch ärgere dich nicht

Geodateninfrastruktur Hessen Geoportal Hessen

Ausbildungsziel: Erstellung eines Briefes mit Hilfe von Vorlagen

VektorWorks - Einführungskurs

Einführung GAM. Beispiel 1: Quader

DepoTrend 0 INSTALLATION 1 DATEN SICHERN UND IMPORTIEREN 1.1 STARTEN DES PROGRAMMS 1.2 PROJEKTE ANLEGEN 1.3 IMPORTIEREN DER ROHDATEN

Übungen zu Computeranwendung und Programmierung WS 17/18. CSV-Dateien einlesen und die darin enthaltenen Daten auswerten.

JavaFX Koordinaten und Transformationen

RIO Raum Information Oberberg - Hilfe

Expertenschulung. ActivInspire

Praktikum zur Vorlesung Einführung in die Programmierung WS 14/15 Blatt 3

Übungsbeispiel Bild speichern und bearbeiten

Ein Secondo-basierter Routenplaner mit Berücksichtigung von Steigungen

OpenFireMap.org oder Wie kommt der Hydrant ins Internet?

Fremdartikel über das dbase-format in Eplan importieren. Version 5.40

Kurzanleitung Vorlagen erstellen in Kronen-Design PRO

Universität Augsburg, Institut für Informatik Sommersemester 2001 Prof. Dr. Martin Ester 16. Juli Klausur

(6) Verknüpfen der GUI mit dem Spiel

Tutoraufgabe 1 (Programmanalyse):

Programmieren in Java -Eingangstest-

Unterrichtsmaterialien in digitaler und in gedruckter Form. Auszug aus: Rechnen 3./4. Klasse, Teil I. Das komplette Material finden Sie hier:

Datenbanken Kapitel 3

MVC Ein wichtiges Konzept der Software-Architektur

Zeichnen von Graphen

Funktionen Funzioni. Zivilschutzbrowser. Dr. Martina Inderst Dr. Susanne Rizzolli Formazione. Schulung. Browser della Protezione Civile

Übung Programmierung WS 2007/08 - Blatt 6

Feuerwehr-, Flucht- und Rettungspläne

PowerPoint Unterrichtsskript WIHOGA Dortmund. 1 Einführung und Formatierung Verschiedenes Folienmaster Animationen...

Softwareentwicklung II (IB) Blatt 2. Prof. Dr. Oliver Braun. Fakultät für Informatik und Mathematik Hochschule München

Kurzanleitung: Online-Audiobearbeitung mit Myna Stand: Februar 2012

3. Mit Dateien arbeiten

Sie wollen Bestand messen und dokumentieren. Wir zeigen, wie s geht, und was zu beachten ist.

Datenstrukturen und Algorithmen in Open Street Map. Modul: Algorithmische Geometire Von: Elisabeth Lehmann 12INB-P

Parallele Algorithmen in der Bildverarbeitung

Mitschriebe Literatur Taschenrechner

3 Properties, Bindings und JavaFX-Collections

3D-Druck Feriencamp OpenSCAD - Der Schlüsselanhänger

MDA V8 Schnellstarthandbuch. Sofort loslegen!

10-Finger-System kinderleicht gemacht

EIDI 1 Einführung in die Informatik 1. PGdP Praktikum Grundlagen der Programmierung. Harald Räcke 2/217

Erstellen von Layouts

Software Design Patterns Zusammensetzung. Daniel Gerber

66 Das Kartenspiel. Inhaltsverzeichnis

Aufgabe 4 (Musterlösung) Corel Draw

Transkript:

PD Dr. Ulrich Schöpp Ludwig-Maximilians-Universität München Dr. Steffen Jost Institut für Informatik Stephan Barth WS 2016/17 Softwareentwicklungspraktikum Nebenfach Blatt 3 Dieses Arbeitsblatt ist innerhalb der nächsten drei Wochen in der Gruppe zu bearbeiten. Gruppenprojekt Filler Aufgabe ist die Implementierung des Spiels Filler. Bei diesem Spiel treten zwei Spieler gegeneinander an und versuchen einen möglichst großen Teil des Spielfelds einzunehmen. Das Spielfeld ist eine Landkarte, die in viele kleine Regionen unterteilt ist. Jede Region hat eine Farbe. Ein einfaches Spielfeld mit zehn hexagonalen Regionen könnte zum Beispiel so aussehen: Spieler 1 Spieler 2 Zu Beginn des Spiels sind die en der Spieler besonders gekennzeichnet. Im Beispiel ist das jeweils ein Hexagon. Einem Spieler gehören alle Regionen, zu denen man von einer seiner en laufen kann, ohne dass sich dabei die Farbe wechselt. Im Beispiel gehören Spieler 1 also die oberen drei blauen Regionen. Spieler zwei gehören die beiden grünen Regionen am rechten Rand. Die Spieler kommen nun immer abwechselnd dran. Wer dran ist, wählt eine Farbe aus und färbt alle seine Regionen mit dieser Farbe ein. Dabei darf nicht die aktuelle Farbe des Gegners gewählt werden und es darf nicht die gleiche Farbe beibehalten werden. Abgesehen davon kann die Farbe beliebig gewählt werden. Wenn zum Beispiel Spieler 1 zuerst am Zug ist und rot wählt, dann sieht das Spielfeld danach so aus, da der Spieler seine drei blauen Regionen rot gefärbt hat: Spieler 1 Spieler 2

Durch den Zug gehören Spieler 1 nun also sechs statt vorher drei Regionen. Die Spieler wechseln sich ab, bis kein Spieler mehr neue Regionen dazugewinnen kann. Gewonnen hat der Spieler, dem die meisten Regionen gehören. Aufgabe Die Aufgabe im Gruppenprojekt ist, das Spiel Filler mit JavaFX-GUI zu implementieren. Ihr Programm soll das Spielen nicht nur auf Karten mit hexagonalen Regionen, sondern auf beliebigen Landkarten erlauben. Dazu soll ihr Programm zu Beginn die geografische Landkarte von einer JSON-Datei einlesen. Das Dateiformat der Kartendaten ist unten beschrieben, Beispiele finden Sie auf der Praktikumshomepage. Es genügt, wenn der Dateiname im Programmcode eingestellt werden kann. Beachten Sie, dass die Regionen auf einer Landkarten nicht immer eine einzige zusammenhängende Fläche bilden müssen. Wenn die Regionen zum Beispiel Länder auf der Weltkarte sind, wären die Regionen in Amerika nicht mit denen in Europa verbunden. Ihr Programm sollte mit nichtzusammenhängenden Karten umgehen können und darauf sinnvolles Spielen erlauben. Wie sie an den Beispielkarten sehen werden, ist es manchmal schwer kleine Regionen auf einer Karte zu erkennen. Ihr Programm soll deshalb Zoomen und Scrollen der Karte erlauben, z.b. wie in Google Maps. Es gibt viele weitere Entscheidungsmöglichkeiten, die Sie selbst geeignet festlegen können. Zum Beispiel könnte es möglich sein, dass zwei Spieler gegeneinander spielen, oder aber dass ein Spieler gegen den Computer spielt. Für die Anzeige von Informationen zum Spiel, z.b. des aktuellen Punktestands, gibt es viele Möglichkeiten. Zum Abnahme des Projekts soll eine Präsentation vorbereitet werden, in der Sie das Ergebnis vorstellen und Ihre Entscheidungen erklären. Details zum Ablauf der Präsentation werden im Plenum besprochen. Datenformat der Landkarten Landkarten sind im JSON-Format gegeben. Die Beschreibung einer Landkarte besteht aus einem einzigen JSON-Array, das alle Regionen der Karte enthält: [ { "name": "Region1", "boundary": <Array von Koordinaten>, "holes": [ <Array von Koordinaten>, <Array von Koordinaten>,... ] { "name": "Region2", "boundary": <Array von Koordinaten>, "holes": [ <Array von Koordinaten>, <Array von Koordinaten>,... ]... ]

Jede Region in dem Array ist selbst durch ein JSON-Objekt mit den Attributen name, boundary und holes gegeben. Die Attribute name und holes sind optional und können auch weggelassen sein. Der Wert von name ist ein nicht weiter spezifizierter Name der Region. Namen müssen nicht eindeutig sein. Der Wert von boundary ist der geografische Umriss der Region. Er ist durch ein Array von Koordinaten gegeben, das den Umriss der Region als einen geschlossenen Linienzug definiert. Zum Beispiel könnte der Wert von boundary folgendes JSON-Array von Koordinaten sein. [ [0.0, 0.0], [1.0, 0.0], [1.0, 1.0], [0.0, 1.0], [0.0, 0.0] ] Die Paare sind dabei als Koordinaten aus Breitengrad ( 180 bis 180 ) und Längengrad ( 90 bis 90 ) zu verstehen. Wenn man die Punkte durch Linien verbindet, entsteht ein geschlossener Linienzug. Allgemein steht <Array von Koordinaten> für Array von Koordinaten der Form [ [longitude1, latitude1], [longitude2, latitude2],... ] welches einen geschlossenen Linienzug definiert. Sie können annehmen, dass die erste und die letzte Koordinate in solch einem Array stets identisch sind. Schlussendlich kann die Beschreibung jeder Region noch ein Array von Löchern enthalten im Attribut holes gegeben. Dies ist eine Liste von geschlossenen Linienzügen. Ist kein Loch angegeben, so ist die Region durch den in boundary definierten Umriss gegeben. Ansonsten ist jede der in holes definierten Flächen daraus auszuschneiden. Beispiel. Ein vollständiges Beispiel ist folgende kleine Datei: [ ] { "name": "Region1", "boundary": [ [0, 0], [1, 0], [1, 1], [0, 1], [0, 0] ] { "name": "Region2", "boundary": [ [1, 0], [2, 0], [2, 1], [1, 1], [1, 0] ], "holes": [ [ [ 1.25, 0.25], [1.5, 0.75], [ 1.75, 0.25], [ 1.25, 0.25] ] ] } Sie repräsentiert die folgenden beiden Regionen (Region1 in rot, Region2 in blau). latitude 1 1 2 3 longitude

Nachbarschaft. Sie können annehmen, dass die Daten stets so beschaffen sind, dass man folgendermaßen erkennen kann, ob zwei Regionen benachbart sind. Region 1 ist Nachbar von Region 2, wenn es in boundary oder holes von Region 1 eine Koordinate gibt, die sehr nah an einer Koordinate liegt, welche in boundary oder holes von Region 2 vorkommt. Im obigen Beispiel erkennt man, dass Region1 und Region2 benachbart sind, da in der boundary beider Regionen die Koordinate [1,0] vorkommt. (N.B.: Wenn man nicht weiß, dass die Daten die hier garantierte Form haben, dann ist die Bestimmung der Nachbarschaft von Polygonen nicht mehr so einfach. Würde man im obigen Beispiel zum Beispiel die Koordinate [1,0] in Region1 durch [2,0] ersetzen, dann würde das einfache Verfahren dann nicht mehr das richtige Ergebnis liefern.) Hinweise a) Lösen Sie die Aufgabe zunächst für Regionen ohne Löcher, d.h. ignorieren Sie die holes- Attribute zunächst. Wenn Sie später auch Regionen mit Löchern bearbeiten, können Sie zur grafischen Darstellung solcher Regionen auf die Methode Shape.subtract aus JavaFX zurückgreifen. Diese erlaubt das Ausschneiden einer geometrischen Form aus einer anderen. b) JSON ist nur zum Datenaustausch gedacht und nicht dafür, um intern mit Daten zu arbeiten. Verwenden Sie JSON nur beim Einlesen der Daten ins Modell und nicht zur Datenhaltung. Wir empfehlen die Bibliothek org.json zum Umgang mit JSON-Daten. c) Sie können die Koordinaten aus Längen- und Breitengrad zunächst direkt als (x, y)- Koordinate für die grafische Darstellung verwenden. Die Darstellung der Landkarte ist dann nicht geografisch exakt, genügt aber evtl. für ein Spiel. Für eine genauere Anzeige kann eine Projektion (z.b. die Mercator-Projektion) verwendet werden. Beachten Sie, dass der Bereich der Koordinaten auf einer Karte klein sein kann. Zum Beispiel liegt Deutschland zwischen den Längengraden 5 und 15 und zwischen den Breitengraden 47 und 55. Weiterhin wird der Breitengrad nach Norden größer, während in JavaFX die y-koordinate nach unten wächst. d) Es empfiehlt sich, frühzeitig mit der Planung des Projektablaufs zu beginnen und beides im nächsten Treffen mit dem Tutor zu besprechen. Als Hilfestellung sind im Folgenden einige Aufgaben umrissen, die auch parallel bearbeitet werden können. Einlesen und Verarbeiten der JSON-Kartendaten. Berechnen Sie Minimum und Maximum des Längen- und Breitengrades der eingelesenen Daten und lassen Sie sich die Karte in einem ganz einfachen Fenster anzeigen (z.b. Polygon-Objekte auf einem Pane; zunächst ohne Verschieben und Zoomen). Entwicklung einer Datenstruktur, in die Landkarten eingelesen werden. Man könnte zum Beispiel Klassen Coordinate, Region und FillerMap mit folgenden Aufgaben schreiben. Ein Objekt der Klasse Coordinate speichern eine einzige geographische Koordinate. Ein Objekt der Klasse Region speichert eine einzige

Region. Ein Objekt der Klasse FillerMap speichert die gesamte Karte, d.h. eine Liste aller Regionen. Die Klasse FillerMap könnte dann Methoden wie zum Beispiel List<Region> getallregions() (Rückgabe aller Regionen der Karte) und boolean isneighbor(region r1, Region r2); (sind Regionen r1 und r2 benachbart?) haben. Entwurf des Modells für das Filler-Spiel. Das Modell benutzt die Klasse FillerMap (oder eine entsprechende Klasse in Ihrer Modellierung) und neben der Karte noch den Spielstand. Wenn Ihre Implementierung von FillerMap noch unvollständig ist, können Sie sich für die Implementierung des Modells zunächst eine ganz einfache Variante von FillerMap mit einem fest kodierten Spielfeld von 10x10 rechteckigen Regionen schreiben. Implementierung von View und Controller für das Spiel. Beginnen Sie zunächst mit einer einfachen Ansicht, z.b. ohne Verschieben und Zoomen, damit Sie das Modell testen können. e) Beachten Sie, dass der Bearbeitungszeitraum auch die Vorbereitung der Abschlusspräsentation einschließt. Sie sollten planen, mit der Programmierung etwas eher fertig zu sein. Für alle Aufgaben (und das ganze Praktikum) gilt: Bei Unsicherheiten und Fragen wenden Sie sich bitte an Ihren Tutor.