Skip to content

Commit 0b684ae

Browse files
author
Marcel Kaufmann
committed
Level 5 A 1
1 parent 4bca40a commit 0b684ae

File tree

8 files changed

+155
-2
lines changed

8 files changed

+155
-2
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ Start now!
1212
|[2](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level2/Processing_Tutorial_Level_%232-CatcherGameTutorial.md)|:star: :star: :star:|
1313
|[3](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level3/Processing_Tutorial_Level_%233-CatcherGameTutorial.md)|:star: :star: :star:|
1414
|[4](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level4/Processing_Tutorial_Level_%234-CatcherGameTutorial.md)|:star: :star:|
15+
|[5](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level5/Processing_Tutorial_Level_%235-CatcherGameTutorial.md)|:star: :star: :star: :star:|
1516

1617
:gb::us: English version coming soon
1718
## Android Screenshots

tutorial/Level4/CatcherTutorialLevel4A1/Coin.pde

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ class Coin {
1616
}
1717

1818
void display( ) {
19-
shape(c, xPos, yPos);
19+
shape(c, xPos, -coinWidth);
2020
c.translate(0, 2);
2121
}
22-
}
22+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
class Catcher {
2+
PShape c;
3+
float yPos;
4+
float xPos;
5+
float catcherWidth;
6+
float catcherHeight;
7+
8+
public Catcher( ) {
9+
catcherWidth = gameWidth/8;
10+
catcherHeight = gameHeight/100;
11+
rectMode(CENTER);
12+
fill(255);
13+
c = createShape(RECT, 0, 0, catcherWidth, catcherHeight);
14+
yPos = gameHeight-(gameHeight/8);
15+
xPos = gameWidth/2;
16+
}
17+
18+
void draw() {
19+
xPos = playerPosX;
20+
shape(c, xPos, yPos);
21+
}
22+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
float playerPosX;
2+
float gameHeight;
3+
float gameWidth;
4+
Game game;
5+
6+
void setup() {
7+
size(400, 640);
8+
//fullScreen(P2D);
9+
gameWidth = width;
10+
gameHeight = height;
11+
game = new Game();
12+
}
13+
14+
void draw() {
15+
background(50);
16+
if (mousePressed) {
17+
playerPosX = mouseX;
18+
}
19+
game.execute();
20+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
class Coin {
2+
PShape c;
3+
float xPos;
4+
float yPos;
5+
float coinWidth;
6+
float coinHeigth;
7+
8+
public Coin() {
9+
coinWidth = gameHeight/50;
10+
coinHeigth = gameHeight/50;
11+
xPos = random(coinWidth, (gameWidth-1)-coinWidth);
12+
yPos = -coinHeigth;
13+
ellipseMode(CENTER);
14+
c = createShape(ELLIPSE, 0, 0, coinWidth, coinHeigth);
15+
c.setFill(color(255, 255, 0));
16+
}
17+
18+
void display( ) {
19+
shape(c, xPos, -coinWidth);
20+
c.translate(0, 2);
21+
yPos += 2;
22+
}
23+
}
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
import java.util.Stack;
2+
3+
class Game {
4+
int lives;
5+
ArrayList<Coin> coinListInGame = new ArrayList<Coin>();
6+
Stack<Coin> waitingStack = new Stack();
7+
8+
Catcher catcher;
9+
10+
int interval = 1000;
11+
int savedTime = millis();
12+
13+
public Game () {
14+
lives = 5;
15+
println("Lives: " + lives);
16+
catcher = new Catcher();
17+
for (int i = 0; i < 6; i++) {
18+
Coin coin = new Coin();
19+
waitingStack.push(coin);
20+
}
21+
}
22+
23+
24+
void execute() {
25+
catcher.draw();
26+
if (isTimeForNextOne() && !waitingStack.isEmpty()) {
27+
Coin newCoin = waitingStack.pop();
28+
coinListInGame.add(newCoin);
29+
}
30+
31+
for (int i = 0; i < coinListInGame.size(); i++) {
32+
Coin currentCoin = coinListInGame.get(i);
33+
boolean isOut = isInOutZone(currentCoin);
34+
if (isOut) {
35+
coinListInGame.remove(currentCoin);
36+
lives --;
37+
println("Lives: " + lives);
38+
} else {
39+
currentCoin.display();
40+
}
41+
}
42+
}
43+
44+
boolean isInOutZone(Coin coin) {
45+
return coin.yPos + coin.coinHeigth/2 >= gameHeight-1;
46+
}
47+
48+
boolean isTimeForNextOne( ) {
49+
int currentTime = millis();
50+
if (savedTime + interval < currentTime) {
51+
savedTime = currentTime;
52+
return true;
53+
}
54+
return false;
55+
}
56+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
# Zusammenfassung
2+
In diesem Level bauen wir Spielmechanik ein! Du lernst Kollisionsprüfungen hinzuzufügen und Zähler für den Spielstand und Leben. Außerdem sollen nicht nur eine endliche Anzahl an Objekten herunterfallen sondern ein dauerhafter Objektregen implementiert werden.
3+
4+
| Thema | Voraussetzungen |
5+
| --------------------- | ----------------------- |
6+
| Schwierigkeit | :star: :star: :star: :star: |
7+
| Hardware | PC (Windows/Mac/Linux), Android-Smartphone (optional) |
8+
| Software | Browser, Internetzugang, Processing IDE |
9+
| CatcherTutorial Level | [0](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level0/Processing_Tutorial_Level_%230-CatcherGameTutorial.md),[1](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level1/Processing_Tutorial_Level_%231-CatcherGameTutorial.md),[2](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level2/Processing_Tutorial_Level_%232-CatcherGameTutorial.md),[3](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level3/Processing_Tutorial_Level_%233-CatcherGameTutorial.md),[4](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level4/Processing_Tutorial_Level_%234-CatcherGameTutorial.md) |
10+
| Programmierung | Aufruf von Funktionen, Variablen, Events (mousePressed), Bedingte Anweisung und Verzweigung (if, else)), Funktionen, for-Schleife, Klassen, Objekte, Instanzen, Konstruktor|
11+
12+
### Aufgabe 1
13+
1. Um die Anzahl der noch übrigen Leben zu zählen, integriere eine Variable dafür. Der derzeitige Stand muss derzeit nicht im Fenster angezeigt werden. Um die Anzahl trotzdem sichtbar zu machen, kannst du dir in der Konsole den Wert der Variablen ausgeben lassen.
14+
```processing
15+
int lives = 5;
16+
...
17+
println("Lives: "+ lives); // Innerhalb der zyklischen Ausführung
18+
```
19+
2. Überlege eine Kollisionserkennung für die herunterfallenden Objekte, sobald diese das Ende des Bildschirms erreicht habe. Beachte die Größe der Objekte. Beispiel: Bei einem PShape, der im Modus *CENTER* gezeichnet wurde, ist die unterste Kante an der Y-Position des Objektes + (Höhe des Objektes / 2)).
20+
<div>
21+
<img src="https://github.com/Flocksserver/CatcherTutorial/raw/master/tutorial/Level5/collision.png" width="400">
22+
</div>
23+
<br>
24+
25+
3. Implementiere die Kollisionserkennung. Tipp: Du kannst die Y-Position des herunterfallenden Objektes aus dem PShape-Objekt extrahieren, oder die einfachere Variante: Jedesmal beim Aufruf von *translate()* die eine Variable zur yPosition um denselben Wert wie translate erhöhen (achte aber darauf, dass du beim Zeichnen des Objektes nicht die nun erstellte yPos nimmst!).
26+
4. Zähle ein Leben runter, sobald ein Objekt das Ende des Bildschirms erreicht. Entferne das entsprechenden Objekt aus der *ingame*-Liste
27+
28+
[Mögliche Lösung](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level5/CatcherTutorialLevel5A1)
29+
30+
# Nächstes Level
31+
Hier geht es weiter zum [nächsten Level :arrow_right:](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level6/Processing_Tutorial_Level_%236-CatcherGameTutorial.md)

tutorial/Level6/Processing_Tutorial_Level_#6-CatcherGameTutorial.md

Whitespace-only changes.

0 commit comments

Comments
 (0)