Übungsstunde 7
Einführung in die Programmierung
Probleme bei Übung 6
[TODO Assistent]
Nachbesprechung Übung 7
Aufgabe 1 & 2: Linked List
DEMO
Aufgabe 3: Dominator (Bonus!)
Feedback nach der Korrektur direkt per SVN
Aufgabe 4: Self-avoiding Random Walks
WalkResult walk(int n) {
boolean trapped = false;
LinkedIntList directions = new LinkedIntList();
do {
int[] dirs = grid.unmarkedDirectionsFrom(posX, posY);
if (dirs.length > 0) { // check if there still exists unvisited junction int decision = rand.nextInt(dirs.length);
int chosenDirection = dirs[decision];
int[] dxs = { 0, 1, 0, -1 };
int[] dys = { -1, 0, 1, 0 };
posX += dxs[chosenDirection];
posY += dys[chosenDirection];
grid.mark(posX, posY); // mark visited directions.addLast(chosenDirection);
pathLength++;
} else {
trapped = true;
}
} while (!trapped && !grid.isAtBorder(posX, posY));
return new WalkResult(!trapped, pathLength, directions);
}
Vorbesprechung Übung 8
LinkedPersonList first:
last : size : 3
PersonNode next : prev : person:
PersonNode next : prev : person:
PersonNode next : prev : person:
Person ...
Person ...
Person ...
× ×
Kasse
Kasse
Kasse
PongGame
Spiel-Logik Methoden
● move()
● step()
● collides()
PongGui
Zeichnet
● Spielfeld
● Spieler (Balken, Punktestand)
● Ball
Reagiert auf Tastatur
● up/down, w/s Objekte
● Players: p1, p2
● Ball
a) Erstellen Sie zwei weitere Klassen Player und Ball, welche alle Informationen zu Spieler und Ball beinhalten.
Ein Spieler hat eine (px, py)-Position, eine Balkenlänge und einen Punktestand.
Ein Ball hat ebenfalls eine Position und zusätzlich eine (vx, vy)-Geschwindigkeit (in Pixel/Spielschritt).
public class Ball {
double x; // Position double y;
double vx; // Geschwindigkeit double vy;
public Ball( ... ){
// TODO }
}
Ändern Sie ausserdem den Konstruktor von PongGame, dass er zwei Player- und eine Ball-Instanz erstellt und in Feldern speichert. Der Ball soll zu Beginn des Spiels in der Mitte starten und eine zufällige Geschwindigkeit haben.
PongGame(int width, int height) { this.width = width;
this.height = height;
// erstelle Player- und Ball-Instanzen }
// PongGui
while(window.isOpen()) {
if(window.isKeyPressed("w")) { game.move(game.p1, true);
}
game.step();
drawPlayer(window, game.p1);
drawPlayer(window, game.p2);
drawBall(window, game.ball);
window.refreshAndClear(20);
}
// PongGame
void move(Player player, boolean up) {
// TODO }
// PongGame
public void step() {
// Berechne die neue Position des Balls }
Wie berechnet man die Position (x,y) im nächsten Schritt ?
Kollision
vx
vy
bevor Kollision
vx’
nach Kollision
vy’ = -vy
Kollision
Oops!
Ball.x < 0 p2.score += 1PongGame
Spiel-Logik Methoden
● move()
● step()
● collides()
PongGui
Zeichnet
● Spielfeld
● Spieler (Balken, Punktestand)
● Bälle
Reagiert auf Tastatur
● up/down, w/s Objekte
● Players: p1, p2
● LinkedBallList Alle Bälle
verschieben und auf Kollision testen