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.
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;
}
}
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;
}
}
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?