Pacman - Prototyp

Aus Nettundfroh
Wechseln zu: Navigation, Suche

Der hier vorgestellte Prototyp stellt eine Nachahmung des Computerspieleklassikers Pac-Man dar. Er spiegelt den Stand der Entwicklung am 28.11.2012 wieder und ist Kern der Abgabe von Aufgabe 3 im Kurs GEA im WS2012/13.

Stand der Funktionalität

  • funktioneller Prototyp
  • Singleplayer spielbar
  • Multiplayer spielbar
  • rudimentäre Menüsteuerung

Dateien

Präsentation - Prototyp (Powerpoint 2010)

Präsentation - Prototyp (pdf)

Singleplayer

  • Modus: Klassisch
    • Spieler muss alle Pellets im Feld sammeln um ein Level zu gewinnen
    • NPCs kosten bei Berührung Leben oder geben Punkte im Powermodus
    • Powermodus erlaubt NPCs (Geister) zu vertilgen

Multiplayer

  • Modus: Jeder gegen Jeden
    • Spieler mit höchster Punktzahl gewinnt
    • Powermodus erlaubt Punkte abziehen beim Gegner
  • wesentliches Element: NetvorkView - Klasse
    • Vorraussetzung für Zustandssynchronisierung und RPC-Aufrufe
  • Erweiterung der Instanziierung der GameObjects mit Network.Instantiate() statt Instantiate()
  • keine NPCs
    • Bei weiteren Multiplayer-Modi Integration von NPCs möglich

  • Datenrepräsentation der Level: 2-dimensionales int-Array
    • int Werte korrespondieren mit einem Objekt am jeweiligen Ort: Pacman, Geister, Wand, Pellet, usw...
    • Standardlevel orientiert sich am Level des Original-Spiels
  • Automatischer, scriptgesteuerter Levelaufbau
    • Umrechnung Array-Indexwerte zu Spielfeldpositionen (x,y,z)

Pseudocode:

var level = [
	[1,1,1,1,1]
	[1,0,2,0,1],
	[1,0,1,0,1],
	[1,0,3,0,1],
        [1,1,1,1,1],
        ];


  • Level-Script stellt vielfältige Funktionen zur Verfügung
    • Respawn-Location für Pacman
    • Respawn-Location für Geister
    • Prüfung Wand in (x,y)
      • erlaubt Steuerung von Pacman in Abhängigkeit von Wand
    • Prüfung Bewegungsmöglichkeiten Spielfigur
      • Abfrage für Geister, liefert bis zu 4 Optionen

Bewegung PacMan

Pseudocode:

function GridMove(){
    vec forward = getUserInput
    forward.reduceToVerticalOrHorizontalMovement
    vec startPosition = this.position
    vec endPosition = startPosition + gridSize * forward
    if (!endPosition.isWall()) this.position = transformFromTo(startPosition, endPosition)
}

Bewegung Geister

  • Eigenimplementierung
  • Prüfung an jedem Punkt des Gitters der vom Geist erreicht wird
    • mögliche Richtungen
    • aktuelle Ausrichtung
  • Reaktion kontextabhängig
    • Entscheidung Kreuzung: abbiegen (Zufallswert)
    • Gerade Strecke: geh weiter geradeaus
    • Ecken: Richtung wechseln (Zufallswert)
  • Geister sehen Pacman und reagieren mit erhöhter Laufgeschwindigkeit

Pseudocode:

function GhostMove(){
    int[] possibleDirections = getDirections(x,y, walkingDirection);
    int direction = decideForDirection(possibleDirections)
    this.turnToDirection(direction)
    this.walk()
    if (Raycast.seePacMan) this.speed = run

}

  • getaggte Objekte
    • "PacMan", "Ghost", "Pellet", usw...
  • Kollisionserkennung über Trigger
    • Reaktion abhängig vom Tag bzw. entsprechendem Objekt
  • OnTrigger statt OnCollision
    • Bewegung von PacMan nicht über Physikengine

Momentan befindet sich das Spiel im Prototyp-Stadium. In den folgenden Abschnitten werden die wesentlichen Punkte genannt, die als nächstes umgesetzt werden sollen. Hierbei steht insbesondere die visuelle Aufbereitung des Spiels im Vordergrund. Die eigentliche Spiellogik soll an bestimmten Stellen jedoch ebenfalls noch erweitert werden.


Levelaufbau


Bewegung Geister

  • Individualisierung über Bewegungsparameter
  • Wegfindung
  • Geister bei aufsteigenden Leveln schneller / klüger
    • Implementierung schon vorbereitet
    • Balancing der Werte


Multiplayer

  • Weitere Modi?
    • Optionen: Coop, Capture-the-Flag Varianten


Menü

  • vollständige Menüführung
  • Änderung von Optionen / Einstellungen ermöglichen
    • Siegbedingungen Singleplayer / Multiplayer
    • Was passiert bei Pacman vs. Pacman im Multiplayer
    • ...


audiovisuelle Aufbereitung

Design

  • grundsätzliche Modelle (PacMan, Geister, Items)
  • Animationen
    • verschiedene Zustände PacMan
      • normal
      • PowerPacman
    • verschiedene Zustände Geister
      • auf der Jagd
      • auf der Flucht
      • getötet
  • Leveldesign


Sound

  • Hintergrundmusik
  • Soundeffekte
    • Bewegung
    • Objekte einsammeln
    • Interaktionen mit Geistern


Bugs

  • Multiplayer: LevelNr wird beim Client nicht hochgezählt (immer)
  • Multiplayer: Pac-Man bleibt steckenbeim Warp (selten)
  • Multiplayer: Töten / getötet werden wird nicht richtig erkannt (selten)
  • Raycast: Geister merken nicht das Pacman vor ihnen ist (manchmal)

Implementieren sie einen funktionellen Prototypen Ihres Spiels. Der Prototyp sollte bereits spielbar sein, und die wesentliche Logik Ihrer Spielidee demonstrieren. Investieren sie bis zu diesem Punkt noch keine Zeit in die visuelle Ausgestaltung des Spiels mit Spezialeffekten wie Partikelsystemen, Post-Processing Effekten oder aufwändigen Modellen, Animationen und Materialien. Testen und optimieren sie statt dessen Ihre Spielidee und die Implementierung der Spiellogik mit einfachen Objekten wie Würfeln Kugeln und Zylindern.

Nutzen sie die Möglichkeit Unity Anwendungen mit dem Unity-Webplayer zu deployen und stellen sie den Prototypen auf Ihrer Abgabeseite online.

Dokumentieren sie Ihren Prototypen, die Spielidee und die wesentlichen Aspekte Ihrer Implementierung in einem HTML Dokument. Stellen sie das Dokument auf Ihrer Abgabenseite online.

https://public.beuth-hochschule.de/~tramberend/12-ws/mmi-gea/exercises/03-prototype/

Webdemo des Prototyps (bitte JavaScript aktivieren!)

Zurück zur Game Engine Architecture Hauptseite

Master Semester 2