Quellcode?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

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.
Woher ich das weiß:Berufserfahrung – Seit 10+ Jahren aktiv in Web- und Softwareentwicklung

verreisterNutzer  12.01.2023, 13:14

Gibt es in C++ auch ähnliche Methoden wie switch-case?

1
SimpleWebDude  12.01.2023, 13:27
@verreisterNutzer

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;
  }
}
1
SimpleWebDude  12.01.2023, 13:56

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;
    }
}
1
  angle
  ...
  step walk 
  not if
    180 +
    360 mod
  then
  ...

( Forth )

Bushmills145  12.01.2023, 13:48

"..." 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.

1