Quellcode?
Wie würde ein If Else Algorithmus aussehen wo pacman an der wand abbounced und in die andere Richtung geht
2 Antworten
Hier ein Beispiel in der Programmiersprache C++
// Funktion um Pac-Man zu bewegen
void movePacman() {
// Prüfen ob Pac-Man die Wand berührt
if (hitsWall()) {
// Change Pac-Man's direction
if (pacman.direction == UP) {
pacman.direction = DOWN;
} else if (pacman.direction == DOWN) {
pacman.direction = UP;
} else if (pacman.direction == LEFT) {
pacman.direction = RIGHT;
} else if (pacman.direction == RIGHT) {
pacman.direction = LEFT;
}
} else {
// Weiter in die aktuelle Richtung bewegen
pacman.x += pacman.direction.x;
pacman.y += pacman.direction.y;
}
}
Hinweis: In diesem Beispiel musst du zuerst pacman.direction und pacman.x und pacman.y als Membervariablen des Objektes pacman deklarieren. Außedem muss die Funktion hitsWall vorher implementiert werden.
- Im obigen Beispiel wird die Funktion movePacman verwendet, um Pac-Man zu bewegen.
- Innerhalb dieser Funktion wird zunächst überprüft, ob Pac-Man mit einer Wand kollidiert, indem die Funktion hitsWall aufgerufen wird. Sie prüft, ob Pac-Man sich an einer bestimmten Position befindet, die als Wand gekennzeichnet ist.
- Wenn Pac-Man mit einer Wand kollidiert, ändert der Algorithmus die Richtung von Pac-Man entsprechend.
- Wenn Pac-Man jedoch nicht mit einer Wand kollidiert, bewegt er sich weiter in seiner aktuellen Richtung.
Ja. Das Beispiel könnte auch so gelöst werden:
void movePacman() {
// Prüfen ob Pac-Man die Wand berührt
if (hitsWall()) {
// Ändere Pac-Man's Richtung
switch (pacman.direction) {
case UP:
pacman.direction = DOWN;
break;
case DOWN:
pacman.direction = UP;
break;
case LEFT:
pacman.direction = RIGHT;
break;
case RIGHT:
pacman.direction = LEFT;
break;
}
} else {
// Weiter in die aktuelle Richtung bewegen
pacman.x += pacman.direction.x;
pacman.y += pacman.direction.y;
}
}
Ich sehe gerade, dass es wohl um eine allgemeine Definition oder Java geht.
In dem Fall will ich natürlich nicht mit dem C++ Beispiel verwirren.
Daher ergänze ich die Antwort.
Allgemeiner Algorithmus
// Wenn Pacman Wand berührt
if pacman_hits_wall:
// Ändere Pacmans Richtung
then pacman_direction = opposite_direction(pacman_direction)
// Ansonsten
else:
// Pacman weiter in die aktuelle Richtung bewegen
then move_pacman(pacman_direction)
In Java:
if(pacmanHitsWall) {
switch(pacmanDirection) {
case NORTH:
pacmanDirection = Direction.SOUTH;
break;
case SOUTH:
pacmanDirection = Direction.NORTH;
break;
case EAST:
pacmanDirection = Direction.WEST;
break;
case WEST:
pacmanDirection = Direction.EAST;
break;
}
} else {
switch(pacmanDirection) {
case NORTH:
pacmanY--;
break;
case SOUTH:
pacmanY++;
break;
case EAST:
pacmanX++;
break;
case WEST:
pacmanX--;
break;
}
}
angle
...
step walk
not if
180 +
360 mod
then
...
( Forth )
"..." steht für "diesen Abschnitt nach Bedarf innerhalb einer mit weiteren Bedingungen oder Aktionen ausbaubaren Schleife abarbeiten oder als getrennt aufrufbare Definition isolieren". Zugefügt um Präsenz der Bewegungsrichtung ( angle ) als Winkel auf dem Stack anzudeuten.
Gibt es in C++ auch ähnliche Methoden wie switch-case?