Programmierstarthilfe WS 2009/10 Organisatorisches

Werbung
Programmierstarthilfe WS 2009/10
Fakultät für Ingenieurwissenschaften und Informatik
10. Blatt
Für die Woche vom 21.12.2009 bis zum 8.1.2010 (KW 52 und KW 1)
Organisatorisches
Dieses Mal behandeln wir keinen neuen Stoff sondern bieten dir ein Bonusblatt mit einem kleinen
abgeschlossenen Projekt zum Üben des bisherigen Stoffs an.
Wir wünschen dir ein frohes Weihnachtsfest und einen guten Rutsch ins neue Jahr!
Im Web unter http://www.uni-ulm.de/in/programmierstarthilfe.html
Programmierstarthilfe
Blatt 10
1 Wiederholung
Zur Wiederholung des Stoffs der letzten Woche findest du hier Aufgaben, die du am besten schriftlich
und direkt auf dem Blatt löst. Versuche zunächst, ob du die Lösung auswendig kennst.
1.1 Objektorientierung
Ergänze folgendes Programm:
• Vervollständige den Kontruktor der Klasse Insekt so, dass beide Attribute mit den entsprechenden Werten belegt werden.
• Erstelle in der main-Methode zwei Insekten. Die Initialwerte darfst du selbst bestimmen.
• Verringere das Attribut anzBeine eines Insekts um eins.
• Setze das Attribut frabe des anderen auf ”lilablassblau”.
1
2
3
class Insekt {
public int anzBeine;
public String farbe;
4
public Insekt(int anzBeine, String farbe){
5
6
7
8
9
}
10
11
}
12
13
14
public class Krabbelwiese {
public static void main (String[] args) {
15
16
17
18
19
20
21
22
}
23
24
}
2
Programmierstarthilfe
Blatt 10
2 Bonusaufgaben
2.1 Mensch ärgere dich nicht
Ziel dieser Aufgabe ist es, ein “Mensch ärgere dich nicht”-Spiel zu programmieren.
2.1.1 Spielregeln
• Initialisierung: Jeder Spieler platziert 4 Spielfiguren im zugehörigen Startfeld.
• Spielrunde:
– Falls der Spieler mind. eine Figur in der Startposition hat, muss er versuchen, die Figuren aus der Startposition auf das eigentliche Spielfeld zu bringen. Er hat dazu drei
Versuche eine 6 zu würfeln. Bei Erfolg darf er eine Spielfigur von der Startposition auf
sein Anfangsfeld setzen und ein zweites Mal würfeln, um die Figur vom Anfangsfeld
weg zu bewegen. Andere Figuren dürfen nicht gezogen werden, das Anfangsfeld muss
frei gemacht werden.
– Falls der Spieler keine Figur mehr in der Startposition hat: Würfeln und beliebige Figur
ziehen. Falls eine 6 gewürfelt wurde: Das Ganze wiederholen.
– Falls eine Figur auf ein Feld gezogen wird, auf dem bereits eine gegnerische Figur steht:
Gegnerische Figur wird geschlagen, d.h. eigene Figur nimmt den Platz der gegnerischen
Figur ein und die gegnerische Figur muss zurück auf die Startposition.
– Falls eine Figur auf ein Feld gezogen wird, auf dem bereits eine eigene Figur steht: Die
Figur auf dem besetzen Feld wird um ein Feld weiter gezogen um Platz zu machen.
– Falls eine Figur einmal das gesamte Spielfeld umrundet hat (von Anfangsfeld bis Anfangsfeld), wird sie auf die Zielposition gestellt.
• Falls ein Spieler alle vier Figuren auf der Zielposition hat: Spieler hat gewonnen, Spiel beendet.
• Andernfalls: Zurück zu “Spielrunde”.
2.1.2 Tipps
• Programmiere nicht einfach drauf los, sondern überleg dir vorher, was du tun willst. Notiere dir
beispielsweise den groben Ablauf des Programms in Pseudocode oder zeichen ein Diagramm.
• Um dein Programm übersichtlich zu halten ist es sinnvoll, die einzelnen Aufgaben in eigene
Methoden auszulagern. Statt das ganze Spiel in eine einzige Methode zu packen, sollte es
also eine Hauptmethode geben, von der aus mehrere Hilfsmethoden wie wuerfeln() oder
zieheFigur(...) aufgerufen werden. Im Optimalfall enthält die Hauptmethode die reine
Anwendungslogik - legt also fest was getan werden soll - während die Hilfsmethoden festlegen
wie etwas getan werden soll.
3
Programmierstarthilfe
Blatt 10
• Achte beim Programmieren auf die Programmierkonventionen: Einrücken, Groß-/Kleinschreibung, sinnvolle Benennung der Variablen, usw.. Methodennamen sollten immer Verben enthalten und selbsterklärend sein, z.B. zieheFigur(int von, int nach, int spieler)
statt zug(int a, int b, int c).
2.1.3 Model.java
Eine wichtige Klasse ist die Klasse Model. Sie soll den kompletten Zustand des laufenden Spiels
speichern - also die Anzahl der Spieler und Positionen der einzelnen Figuren.
1
2
3
4
5
public class Model {
public int playerCount = 0;
public int[] start = new int[4];
public int[] goal = new int[4];
public int[] board = new int[40];
6
public Model() {
for(int i=0; i<40; i++)
board[i] = -1;
}
7
8
9
10
11
}
Die Variable Model.playerCount speichert die Anzahl der Spieler beginnend mit Spieler 0.
Das Array Model.start speichert für jeden Spieler die Anzahl der Figuren, die sich noch in der
Startposition befinden. Hat Spieler 0 noch alle vier Figuren im Start, gilt also
Model.start[0] == 4. Analoges gilt bei Model.goal.
Das Array Model.board speichert die Besetzung der 40 Spielfelder. Befindet sich beispielsweise
auf Feld 5 eine Figur von Spieler 2, so gilt: Model.board[5] == 2. Ist ein Spielfeld leer, hat
das Array dort den Wert -1 (nicht 0!). Die Anfangsfelder von Spieler 0, 1, 2 und 3 befinden sich im
Array an den Positionen 0, 10, 20 und 30.
2.1.4 View.class
Die Klasse View ist ebenfalls nützlich. Sie verfügt über die statische Methode show(Model model).
Ein Aufruf dieser Methode öffnet ein Fenster, in dem ein “Mensch ärgere dich nicht”-Spielbrett zu
sehen ist, das die aktuelle Spielsituation gemäß dem übergebenen Model-Objekt darstellt. Um die
Darstellung des Spiels am Bildschirm musst du dich also nicht kümmern! Wird die Methode ein
weiteres Mal aufgerufen, aktualisiert sich das Spielbrett entsprechend.
3 Für das nächste Blatt
Nächstes Mal werden wir mit Objektorientierung weiter machen. Lies dazu das ganze Kapitel Objektorientierung im Skript.
4
Herunterladen