Übungen zu Softwareentwicklung 1, WS 2009/10 Übung 6

Ähnliche Dokumente
Übung Grundlagen der Programmierung. Übung 03: Schleifen. Testplan Testergebnisse

Klausur zur Vorlesung: Einführung in die objektorientierte Programmierung mit Java WS1415

Grundzüge der Wirtschaftsinformatik WS 2002/03. Wiederholung Java. Programmierzyklus. Heiko Rossnagel Problem

PIWIN 1 Übung Blatt 5

Vererbung und Polymorphie

Einstieg in die Informatik mit Java

Praktikum aus Programmierung Dr. Michael Hahsler (WS 05/06) Projekt: Würfelpoker

Nachname: Vorname: Matr.-Nr.: Punkte: 1. Aufgabe: ( / 25 Pkt.) Gegeben ist das folgende Struktogramm zur Berechnung von sin(x) mit Hilfe einer Reihe.

Javakurs 2013 Objektorientierung

Verschlüsseln eines Bildes. Visuelle Kryptographie. Verschlüsseln eines Bildes. Verschlüsseln eines Bildes

public class SternchenRechteckGefuellt {

Programmieren I. Strategie zum Entwurf von Klassen. Beispiele. Design von Klassen. Dr. Klaus Höppner. Beispiel: Bibliothek

Übung Grundlagen der Programmierung. Übung 05: Arrays. Abgabetermin: xx.xx.xxxx. Java-Programm Testplan Testergebnisse

JAVA für Nichtinformatiker - Probeklausur -

Anwendungspraktikum aus JAVA Programmierung im SS 2006 Leitung: Albert Weichselbraun. Java Projekt. Schiffe Versenken mit GUI

Java Kurs für Anfänger Einheit 5 Methoden

Programmentwicklung ohne BlueJ

Schreiben Sie ein Programm, welches folgende Bestandteile besitzt. Verwenden Sie diese Elemente geeignet, um eine Sortierung des Feldes zu erzielen!

Technische Universität München WS 2004/2005 Fakultät für Informatik 11. Dezember 2004 Prof. Dr. Seidl

Tutoraufgabe 1 (Zweierkomplement): Lösung: Programmierung WS16/17 Lösung - Übung 2

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 6

Hochschule Niederrhein Grundlagen der Prof. Dr. Nitsche Fachbereich 03 Java Programmierung Bachelor Informatik SS 2015 Übung 1. Grundlagen von Java

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

1 Aufgaben 1.1 Umgebungsvariable setzen: CLASSPATH

Algorithms & Datastructures Midterm Test 1

5.5.8 Öffentliche und private Eigenschaften

JAVA PROJEKT. Schiffe Versenken mit GUI. Projektheft

Klassen und Objekte. Einführung in Java. Folie 1 von Mai Ivo Kronenberg

Die for -Schleife HEUTE. Schleifen. Arrays. Schleifen in JAVA. while, do reichen aus, um alle iterativen Algorithmen zu beschreiben

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Statistics, Data Analysis, and Simulation SS 2015

Wie entwerfe ich ein Programm?

AuD-Tafelübung T-B5b

16. Dezember 2004 Dr. M. Schneider, P. Ziewer

Objects First With Java A Practical Introduction Using BlueJ. Mehr über Vererbung. Exploring polymorphism 1.0

Selbststudium OOP Programmieren 1 - H1103 Felix Rohrer

VGM. VGM information. HAMBURG SÜD VGM WEB PORTAL USER GUIDE June 2016

UML / Fujaba. Generierung von Java-Quellcode aus UML-Diagrammen. Marcel Friedrich

Brainfuck. 1 Brainfuck. 1.1 Brainfuck Geschichte und Umfeld. 1.2 Esoterische Programmiersprachen

Übungen zum Vortrag Backtracking mit Heuristiken

Java Projekt: Tic Tac Toe + GUI

5. Tutorium zu Programmieren

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

Java Einführung Abstrakte Klassen und Interfaces

2. Methoden. n Generelles zum Aufruf von Methoden. n Parameterübergabemechanismen (call by value, call by reference)

Hochschule Augsburg, Fakultät für Informatik Name:... Prüfung "Programmieren 1", IN1bac, WS 10/11 Seite 1 von 6

Dynamische Datentypen

Einführung in die Programmierung für Wirtschaftsinformatik

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 1. Kapitel 11. Listen. Listen

Thomas Gewering Benjamin Koch Dominik Lüke. (geschachtelte Schleifen)

Studentische Lösung zum Übungsblatt Nr. 7

Globale Variablen Diverses. Globale Variablen. Globale Variablen

HTW IMI-B Informatik 1 Kara Worksheet 2 Seite: 1. Variables to store a true/false state: boolean movingright = true;

Grundlagen Programmierung

Übung Programmierung WS 2007/08 - Blatt 5

FAKULTÄT FÜR INFORMATIK

Allgemeine Hinweise:

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

Hochschule Darmstadt Informatik-Praktikum WS 2016/2017 WIng Bachelor 4. Aufgabenblatt Modularisierung, Funktionen, Unterprogramme

Objektorientierte Programmierung

Tutoraufgabe 1 (Programmanalyse):

Klausur Programmieren 2 WS2016/17

VGM. VGM information. HAMBURG SÜD VGM WEB PORTAL - USER GUIDE June 2016

II.3.1 Rekursive Algorithmen - 1 -

Es ist für die Lösung der Programmieraufgabe nicht nötig, den mathematischen Hintergrund zu verstehen, es kann aber beim Verständnis helfen.

Objektorientierte Programmierung

B I N G O DIE SCHULE. Bingo card: Classroom Items abcteach.com

Grundlagen der Programmierung Teil1 Einheit III Okt. 2010

Einführung in die Programmierung Vorlesungsprüfung

Info B VL 8: Abstrakte Klassen & Interfaces

Java Einführung Klassendefinitionen

Einführung in die Informatik

3.2 Prozessumschaltung

Javakurs für Anfänger

IT 2 WS 2014/2015 Übungsblatt 3

Klassendefinitionen verstehen

Jetzt sollt ihr von der Vorlage der Grundversion 1.0 ein eigenes Textadventure erstellen.

Programmierkurs Java

Ersetzbarkeit und Verhalten

Client-Server-Beziehungen

Notice: All mentioned inventors have to sign the Report of Invention (see page 3)!!!

Statische und Nichtstatische Methoden Properties/ Eigenschaften

Dokumentation des Projektes Tic Tac Toe

Programmieren II. Aufzählungstypen (enum) Heusch -- Ratz Institut für Angewandte Informatik

Übung Datenstrukturen. Objektorientierung in C++

Algorithmen und Datenstrukturen

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

Programmieren II. Abstrakte Klassen, Interfaces Heusch 13.8, 13.9 Ratz Institut für Angewandte Informatik

Grundlagen der Programmierung Prof. H. Mössenböck. 14. Schrittweise Verfeinerung

! 1. Rekursive Algorithmen.! 2. Rekursive (dynamische) Datenstrukturen. II.3.2 Rekursive Datenstrukturen - 1 -

Javakurs für Anfänger

Probeklausur: Programmierung WS04/05

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

Vererbung. Martin Wirsing. Ziele. Vererbung

13 Java 4 - Entwurfsmuster am Beispiel des Rucksackproblems

Programmieren 2 Java Überblick

Algorithmen und Programmierung II

Lösung zu Praktikum 1 -Programmierung eines Java Card Applets-

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Java programmieren mit JavaKara. Eine Zusammenfassung in Beispielen

Transkript:

Übungen zu Softwareentwicklung 1, WS 2009/10 Übung 6 Name: Abzugeben bis: Mi, 2.12.2009 12:00 Matrikelnummer: Bearbeitungsdauer in Stunden: Nummer der Übungsgruppe: Name des Tutors: Name des Übungsleiters: Punkte: Beispiel 1: Schiffe versenken Punkte Implementieren Sie das Spiel Schiffe versenken. Dabei soll der Computer bei Programmstart die Schiffe am Spielfeld platzieren, diese sind dann vom Spieler (mit möglichst wenigen) Versuchen vollständig zu versenken. Das Spielende ist erreicht, wenn alle Schiffe des Computers versenkt wurden. Implementieren Sie die Schiffe und die Spielfelder in eigenen Klassen mit geeigneten Zugriffsmethoden (alle Variablen sind private zu deklarieren). Es existieren vier Arten von Schiffen (Länge 2 bis 5), die Schiffe dürfen am Spielfeld nur vertikal und horizontal liegen, sich nicht überlappen, und auch nicht aus dem Spielfeld ragen. Das Spielfeld selbst soll eine Größe von 20 x 20 Feldern haben. Die Platzierung der Schiffe (x-koordinate, y- Koordinate, Lage horizontal/vertikal) ist durch Zufallszahlen (java.util.random) zu realisieren. Schiffe der Länge 2: Schiffe der Länge : 2 Schiffe der Länge : 1 Schiff der Länge 5: Nach jedem Schuss des Spielers (Einlesen von x- und y-koordinate; für die Eingabe verwenden Sie wahlweise Zahlen, Buchstaben, oder eine Kombination) ist auszugeben, ob ein Schiff oder das Wasser getroffen wurde, ob das Schiff/Wasser an der Position bereits zuvor einmal getroffen worden ist, bzw. ob ein Schiff mit diesem Schuss gesunken ist; also zb. (wahlweise deutsch/englisch): Hit Water Already shot into the water at this place Hit Ship Ship with length <shiplen> sunk Weiters ist zu prüfen ob die eingegebenen Koordinaten gültig sind (innerhalb des Spielfelds liegen), andernfalls ist eine Fehlermeldung auszugeben, zb. Shot did not hit the battleground... Wurden alle Schiffe versenkt, so ist eine entsprechende Meldung sowie die Spielstatistik (=Anzahl der benötigten Versuche) auszugeben, zb. Fleet has sunk. The player needed <numshots> shots Hinweise: Definieren Sie Konstanten (final static ) für Werte die sich während des Spieles nicht verändern (zb. FIELD_WIDTH = 20). Sie können Ihr Spiel (während der Entwicklungsphase) mit kleineren Feldgrößen und/oder weniger Schiffen testen.

Verwenden Sie folgende Klassenstruktur, Felder und Methoden: public class Battleships { // declare global constants public static final int MAX_SHIPS = 10; public static final int MAX_HITS = *2 + * + 2* + 1*5; // 0 hits public static final int MIN_SHIP_LENGTH = 2; public static final int MAX_SHIP_LENGTH = 5; public static final int... // shot on ships; array of MAX_SHIPS ships, each ship has MIN_SHIP_LENGTH to MAX_ SHIP_LENGTH fields private static Ship[] ships = new Ship[MAX_SHIPS]; // playg round, two dimensional ar ray [x][y] private static Field[][] water = new Field[...][...]; // game statist ics private static int shots = 0; // random number generator private static Random rand = new Random(); // place a ship (random position and orientation) with length=<len> on the battlefield; use the method isplaceable(...) for finding a valid location public static void placeship(int len) // check if a ship can be placed on the battlefield using actual parameters for coordinates, length, and orientation public static boolean isplaceable (int x, int y, int len, boolean horiz) // additional methods public static... public class Field { // coordinates of this field private int x; private int y; // has this field been hit by a shot? private boolean hit = false; // the ship on this field; 'null' if there is no ship on this field private Ship ship = null; private... // 1 constructors // 2 setter methods // getter methods // additional methods public class Ship { // array of fields representing the ship (MIN_SHIP_LENGTH <= length <= MAX_SHIP_LENGTH fields) private Field[] deck; private... nstru // 1 co ctors public Ship(Field[] deck)

// 2 setter methods // getter methods // additional methods // returns the length of this ship public int getlength() // counts the number of hits of this ship (<= length of the ship!) public int counthits() // returns true if all fields of the ship have been hit public boolean isdestroyed() public... Mögliche Ausgabe (Beispiel 1): 2 2 1 Ship with length 2 sunk. 1 1 15 15 Already shot into the water at this place 9 1 Ship with length 2 sunk. 9 10 11 Ship with length sunk.

5 6 6 7 Ship with length 5 sunk. Fleet has sunk. The player needed 56 shots. Für Beispiel 1 sind folgende Abgaben gefordert: Lösungsidee Quelltext Testplan und Grenzen des Programms Ausgabe des Programms für die Testfälle aus dem Testplan Beispiel 2: Erweiterung zu Schiffe versenken Punkte Um dem Spieler eine bessere Übersicht über den aktuellen Spielstatus zu geben, erweitern Sie das Spiel aus Beispiel 1 um eine Funktionalität grafische Spielstatusausgabe. Spielfelder bzw. Schiffe sollen sich selber zeichnen (entsprechende Methoden/Variablen in den Klassen vorsehen). Überlegen Sie ob Sie zusätzliche Variablen und/oder Methoden in den Schiff- bzw. Spielfeld-Klassen benötigen, um eine möglichst effektive Ausgabe zu realisieren. Nach jedem Spielzug ist die Spielfläche inklusive Koordinatensystem in Textform auszugeben (siehe unten). Dabei soll folgende Symbolik verwendet werden: Alle noch nicht beschossenen Felder (und damit auch noch unsichtbare Schiffe) sind mit einem - darzustellen W für ein getroffenes Wasser-Feld S für ein getroffenes Schiff-Feld Bei vollständig getroffenen Schiffen sind alle S durch X zu ersetzen (nach dem letzten Treffer)

Weiters ist im Anschluss an die Spielfläche nach jedem Schuss ein aktueller Status der versenkten/verbleibenden Schiffe auszugeben. Implementieren Sie ihre Lösung so, dass die main()-methode nur um die folgenden beiden Methodenaufrufe ergänzt werden muss: public static void printplayground(); // displays the entire playground public static void printgamestat(); // displays game statistics Mögliche Ausgabe (Beispiel 2): A B C D E F G H I J K L M N O P Q R S T 1 - - - - - - - - - - - - - - - - - - - - 2 - W - - - - - - - - - - - - - - - - - - - - - W - - - - - - - - - - - - - - - - - - - - - - - - - - - - W - W W - - - - 5 - - - - - S S S S - - - - - - - - - - - 6 - - - - - - - - - - - - W - - - - - - - 7 - - - - - - - - - S - - - - - - - - - - - - - W - - - - - - - - - - - - - W - - 9 - - - - - - X X X X - - W - - - - - - - 10 - - - - - - - - - - - - - S - - - - - - 11 - - - - - - - - - - - - - S - - - - - - 12 - - - W - - - - - - - - - - - - - - - - 1 - - - - - W - - - X - - - S - - - - - - 1 - - - - - - - - - X - - - - - - - W - - 15 - - - - - - - - - X - - - - - - - - - - - - - - - - W - - - - - - - - W - - - - 17 - - - - - - - - - - - - - - - - - - - - 1 - - - - - - - - - - - - - - - - - - - - 19 - - - - - - - - - - - - - - - - - - - - 20 - - - - - - - - - - - - - - - - - - - - Game Statistic: Ships with len 2 (): 2 sunk, 2 remaining Ships with len (): 0 sunk, remaining Ships with len (2): 2 sunk, 0 remaining Ships with len 5 (1): 0 sunk, 1 remaining Shots: 9 Für Beispiel 2 sind folgende Abgaben gefordert: Lösungsidee Quelltext Ausgabe des Programms für die Testfälle aus dem Testplan von Beispiel 1