Architekturbesprechung: Unterschied zwischen den Versionen

Aus Das Sopra Wiki
Dietsch (Diskussion | Beiträge)
K Dietsch verschob die Seite Architektur Präsentation nach Architekturpräsentation, ohne dabei eine Weiterleitung anzulegen
K TobiasK verschob die Seite Architekturpräsentation nach Architekturbesprechung
 
(6 dazwischenliegende Versionen von 4 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
Die Studenten stellen die Architektur die sie sich für ihr Spiel ausgedacht haben vor, und bekommen Verbesserungsvorschläge zu ihrer Architektur, und Hinweise auf eventuelle Architekturfehler.
Bei der Architekturbesprechung soll eine Gruppe die Softwarearchitektur, die sie sich für Ihr Spiel ausgedacht hat, den Dozenten vorstellen. Dabei sollte wenigstens ein Komponentendiagramm vorgestellt werden (dieses kann aber gern einfach von Hand gezeichnet und eingescannt worden sein).
 
Bei der Vorstellung diskutieren wir diese Architektur und versuchen, Schwachstellen oder Unvollständigkeiten zu finden.
 
==Besprechung anhand von Szenarien ==
==Besprechung anhand von Szenarien ==
Das Treffen sollte damit beginnen, dass die Studenten kurz ihre Spielidee und die Grundlegenden Mechaniken vorstellen. Nach einer kurzen einführung in ihr Komponentendiagramm und einer kurzen Zusammenfassung zu den einzelnen komponenten, präsentieren die Studenten anhand ihrer Architektur die vorgefertigte Szenarien. Im Anschluss gibt es Fragen und eventuell weitere Szenarien, die direkter mit der Architektur/der Spielmechanik verknüpft sind.
Die Architekturbesprechung ist folgendermaßen strukturiert:
===Vorgefertigte Szenarien===
* Die Gruppe stellt kurz ihre Spielidee und die grundlegenden Spielmechaniken vor.  
* Die Gruppe gibt eine kurze Einführung in ihr Komponentendiagramm zusammen mit einer zusammenfassenden Beschreibung der einzelnen Komponenten.
* Die Gruppe stellt die durch die vorgefertigten Szenarien ausgelösten Abläufe innerhalb ihrer Architektur vor.
* Zum Schluss werden eventuell noch Fragen gestellt und weitere Szenarien, die direkter mit der Architektur/der Spielmechanik verknüpft sind, diskutiert.  


Für alle Szenarien die hier vorgestellt werden können sie annehmen, dass die ''Quelle'' des Szenarios die Auftraggeber (oder Dozenten sind), und der ''Auslöser'' des Szenarios der Spieler ist. Die Einleitenden Texte klären die ''Umgebung'', gefolgt von einer ''Beschreibung'' des Szenarios. Die ''Antwort'' sollte in allen Fällen sein, dass das Gefragte vorhanden und in der Architektur sinnvoll gelöst ist.
==Vorgefertigte Szenarien==
Für alle Szenarien die hier vorgestellt werden können Sie annehmen, dass  
* die ''Quelle'' des Szenarios die Auftraggeber (oder Dozenten sind),  
* der ''Auslöser'' des Szenarios der Spieler ist,
* die einleitenden Texte die ''Umgebung'' bestimmen,  
* die ''Beschreibung'' des Szenarios danach folgt, und
* die ''Antwortmetrik'' in allen Fällen "dass das Gefragte vorhanden und in der Architektur sinnvoll gelöst ist" ist.


====== Ich befinde mich nicht im Spiel, starte die ausführbare Datei, und befinde mich danach im Hauptmenü. ======
=== Ich befinde mich nicht im Spiel, starte die ausführbare Datei, und befinde mich danach im Hauptmenü. ===
*Es existiert ein ''Einstieg'' in das Diagramm (in welcher Komponente ist <code>Game1.cs</code>).
*Es existiert ein ''Einstieg'' in das Diagramm (in welcher Komponente ist <code>Game1.cs</code>).
*Es gibt einen Ort, an dem die einzelnen ''Benutzeroberflächenelemente'' definiert sind.
*Es gibt einen Ort, an dem die einzelnen ''Benutzeroberflächenelemente'' definiert sind.
*Was wird sonst noch alles getan um das Menü zu laden?
*Was wird sonst noch alles getan um das Menü zu laden?


====== Ich befinde mich im Hauptmenü und drücke auf ''Achievements'', und sehe danach die bisher im Spiel erreichten Achievements. ======
=== Ich befinde mich im Hauptmenü und drücke auf ''Achievements'', und sehe danach die bisher im Spiel erreichten Achievements. ===
*Die Achievements werden ''persistiert''.
*Die Achievements werden ''persistiert''.
*Der Filesystemzugriff ist gekapselt (wie geschieht Laden u. Speichern).
*Der Filesystemzugriff ist gekapselt (wie geschieht Laden u. Speichern).


====== Ich drücke im Hauptmenü auf ''Spiel Starten'', und befinde mich danach im Spiel. ======
=== Ich drücke im Hauptmenü auf ''Spiel Starten'', und befinde mich danach im Spiel. ===
*Es wird eine ''Karte'' erzeugt.
*Es wird eine ''Karte'' erzeugt.
*Es werden ''Spielobjekte'' erzeugt.
*Es werden ''Spielobjekte'' erzeugt.


====== Ich bin bereits im Spiel und selektiere eine Einheit. ======
=== Ich bin bereits im Spiel und selektiere eine Einheit. ===
*Die Position des Mauszeigers wird auf die Karte umgerechnet.
*Die Position des Mauszeigers wird auf die Karte umgerechnet.
*Die selektierte Einheit wird anhand der Karten- oder Weltposition ermittelt.
*Die selektierte Einheit wird anhand der Karten- oder Weltposition ermittelt.
*Die Selektion wird visuell verarbeitet d.h. das Aussehen der Figur und der HUD ändern sich.
*Die Selektion wird visuell verarbeitet d.h. das Aussehen der Figur und der HUD ändern sich.


====== Ich bin bereits im Spiel und habe eine Einheit selektiert. Ich wähle einen Punkt auf der Karte und schicke die Einheit mit einem Mausklick da hin. ======
=== Ich bin bereits im Spiel und habe eine Einheit selektiert. Ich bewege die Einheit. ===
*Es wird der Pfad zum Ziel berechnet.
*Direkte oder indirekte Steuerung?
*Es gibt Datenstrukturen die für das Pathfinding verwendet werden.
*Wenn einige Frames verstrichen sind und sich auch andere Einheiten bewegt haben: Wie reagiert die sich bewegende Einheit auf diese Änderungen?
*Wenn einige Frames verstrichen sind und sich auch andere Einheiten bewegt haben: Wie reagiert die sich bewegende Einheit auf diese Änderungen?
*Es gibt Kollisionen zwischen den Einheiten. Welche Instanzen sind daran beteiligt?
*Es gibt Kollisionen zwischen den Einheiten. Welche Instanzen sind daran beteiligt?
*Es gibt Datenstrukturen die zur Berechnung der Kollisionen verwendet werden.
*Es gibt Datenstrukturen die zur Berechnung der Kollisionen verwendet werden.


====== Ich bin bereits im Spiel und habe eine Einheit selektiert. Ich wähle ein anderes Spielobjekt aus und starte eine Interaktion zwischen der selektierten Einheit und dem anderen Spielobjekt (z.B. Ressource sammeln, Einheit angreifen, Bauauftrag geben, etc.). ======
=== Ich bin bereits im Spiel und habe eine Einheit selektiert. Ich wähle ein anderes Spielobjekt aus und starte eine Interaktion zwischen der selektierten Einheit und dem anderen Spielobjekt (z.B. Ressource sammeln, Einheit angreifen, Bauauftrag geben, etc.). ===
*Der Zustand des agierenden Spielobjekts ändert sich.
*Der Zustand des agierenden Spielobjekts ändert sich.
*Es gibt es einen "normalen" Zustand des agierenden Spielobjekts (z.B. wenn es keine Befehle hat).
*Es gibt es einen "normalen" Zustand des agierenden Spielobjekts (z.B. wenn es keine Befehle hat).
Zeile 38: Zeile 49:
*Die Effekte der Interaktion (Kampf, Ressourcen sammeln…) werden in der Spielwelt propagiert.
*Die Effekte der Interaktion (Kampf, Ressourcen sammeln…) werden in der Spielwelt propagiert.
**Ändert z.B. die agierende Einheit direkt Werte bei der reagierenden? Können dann beide gleichzeitig “sterben”?
**Ändert z.B. die agierende Einheit direkt Werte bei der reagierenden? Können dann beide gleichzeitig “sterben”?
**Ändert die agierende Einheit Werte in der Welt? Wie ist da der Datenfluss? Muss die Einheit Dinge wie “Global Ressources” direkt kennen? (Law of Demeter, SoC, Tell don't ask)
**Ändert die agierende Einheit Werte in der Welt? Wie ist da der Datenfluss? Muss die Einheit Dinge wie “Global Resources” direkt kennen? (Law of Demeter, SoC, Tell don't ask)


====== Ich bin der zweite Spieler... (alles von oben) ======
=== Ich bin der zweite Spieler... (alles von oben) ===
*Die Beschreibungen funktionieren für den zweiten Spieler (z.B. im Netzwerkspiel für den Client).
*Die Beschreibungen funktionieren für den zweiten Spieler (z.B. im Netzwerkspiel für den Client).
*Die Eingaben so abstrahiert, dass sich Spieler und KI (oder Netzwerkspieler) ein gemeinsames Interface teilen.
*Die Eingaben so abstrahiert, dass sich Spieler und KI (oder Netzwerkspieler) ein gemeinsames Interface teilen.


====== Ich bin bereits im Spiel (oder im Pausenmenü) und speichere das Spiel ab ======
=== Ich bin bereits im Spiel (oder im Pausenmenü) und speichere das Spiel ab ===
*Der aktuelle Spielzustand wird vollständig persistiert.
*Der aktuelle Spielzustand wird vollständig persistiert.


====== Ich bin bereits im Spiel und öffne die Optionen. Ich ändere... ======
=== Ich bin bereits im Spiel und öffne die Optionen. Ich ändere... ===
*Die Änderung der Auflösung wird durch das Spiel propagiert (wird dabei alles neu geladen?).
*Die Änderung der Auflösung wird durch das Spiel propagiert (wird dabei alles neu geladen?).
===Weitere Szenarien===
===Weitere Szenarien===
Die Dozenten (und gerne auch Tutoren) überlegen sich weitere Szenarien anhand des geplanten Spiels.
Die Dozenten (und gerne auch Tutoren) überlegen sich weitere Szenarien anhand des geplanten Spiels.

Aktuelle Version vom 8. November 2024, 09:41 Uhr

Bei der Architekturbesprechung soll eine Gruppe die Softwarearchitektur, die sie sich für Ihr Spiel ausgedacht hat, den Dozenten vorstellen. Dabei sollte wenigstens ein Komponentendiagramm vorgestellt werden (dieses kann aber gern einfach von Hand gezeichnet und eingescannt worden sein).

Bei der Vorstellung diskutieren wir diese Architektur und versuchen, Schwachstellen oder Unvollständigkeiten zu finden.

Besprechung anhand von Szenarien

Die Architekturbesprechung ist folgendermaßen strukturiert:

  • Die Gruppe stellt kurz ihre Spielidee und die grundlegenden Spielmechaniken vor.
  • Die Gruppe gibt eine kurze Einführung in ihr Komponentendiagramm zusammen mit einer zusammenfassenden Beschreibung der einzelnen Komponenten.
  • Die Gruppe stellt die durch die vorgefertigten Szenarien ausgelösten Abläufe innerhalb ihrer Architektur vor.
  • Zum Schluss werden eventuell noch Fragen gestellt und weitere Szenarien, die direkter mit der Architektur/der Spielmechanik verknüpft sind, diskutiert.

Vorgefertigte Szenarien

Für alle Szenarien die hier vorgestellt werden können Sie annehmen, dass

  • die Quelle des Szenarios die Auftraggeber (oder Dozenten sind),
  • der Auslöser des Szenarios der Spieler ist,
  • die einleitenden Texte die Umgebung bestimmen,
  • die Beschreibung des Szenarios danach folgt, und
  • die Antwortmetrik in allen Fällen "dass das Gefragte vorhanden und in der Architektur sinnvoll gelöst ist" ist.

Ich befinde mich nicht im Spiel, starte die ausführbare Datei, und befinde mich danach im Hauptmenü.

  • Es existiert ein Einstieg in das Diagramm (in welcher Komponente ist Game1.cs).
  • Es gibt einen Ort, an dem die einzelnen Benutzeroberflächenelemente definiert sind.
  • Was wird sonst noch alles getan um das Menü zu laden?

Ich befinde mich im Hauptmenü und drücke auf Achievements, und sehe danach die bisher im Spiel erreichten Achievements.

  • Die Achievements werden persistiert.
  • Der Filesystemzugriff ist gekapselt (wie geschieht Laden u. Speichern).

Ich drücke im Hauptmenü auf Spiel Starten, und befinde mich danach im Spiel.

  • Es wird eine Karte erzeugt.
  • Es werden Spielobjekte erzeugt.

Ich bin bereits im Spiel und selektiere eine Einheit.

  • Die Position des Mauszeigers wird auf die Karte umgerechnet.
  • Die selektierte Einheit wird anhand der Karten- oder Weltposition ermittelt.
  • Die Selektion wird visuell verarbeitet d.h. das Aussehen der Figur und der HUD ändern sich.

Ich bin bereits im Spiel und habe eine Einheit selektiert. Ich bewege die Einheit.

  • Direkte oder indirekte Steuerung?
  • Wenn einige Frames verstrichen sind und sich auch andere Einheiten bewegt haben: Wie reagiert die sich bewegende Einheit auf diese Änderungen?
  • Es gibt Kollisionen zwischen den Einheiten. Welche Instanzen sind daran beteiligt?
  • Es gibt Datenstrukturen die zur Berechnung der Kollisionen verwendet werden.

Ich bin bereits im Spiel und habe eine Einheit selektiert. Ich wähle ein anderes Spielobjekt aus und starte eine Interaktion zwischen der selektierten Einheit und dem anderen Spielobjekt (z.B. Ressource sammeln, Einheit angreifen, Bauauftrag geben, etc.).

  • Der Zustand des agierenden Spielobjekts ändert sich.
  • Es gibt es einen "normalen" Zustand des agierenden Spielobjekts (z.B. wenn es keine Befehle hat).
  • Es werden Animationen in Abhängigkeit vom Zustand abgespielt.
  • Es werden Soundeffekte in Abhängigkeit vom Zustand abgespielt. Dabei wird die Kameraposition berücksichtigt.
  • Die Effekte der Interaktion (Kampf, Ressourcen sammeln…) werden in der Spielwelt propagiert.
    • Ändert z.B. die agierende Einheit direkt Werte bei der reagierenden? Können dann beide gleichzeitig “sterben”?
    • Ändert die agierende Einheit Werte in der Welt? Wie ist da der Datenfluss? Muss die Einheit Dinge wie “Global Resources” direkt kennen? (Law of Demeter, SoC, Tell don't ask)

Ich bin der zweite Spieler... (alles von oben)

  • Die Beschreibungen funktionieren für den zweiten Spieler (z.B. im Netzwerkspiel für den Client).
  • Die Eingaben so abstrahiert, dass sich Spieler und KI (oder Netzwerkspieler) ein gemeinsames Interface teilen.

Ich bin bereits im Spiel (oder im Pausenmenü) und speichere das Spiel ab

  • Der aktuelle Spielzustand wird vollständig persistiert.

Ich bin bereits im Spiel und öffne die Optionen. Ich ändere...

  • Die Änderung der Auflösung wird durch das Spiel propagiert (wird dabei alles neu geladen?).

Weitere Szenarien

Die Dozenten (und gerne auch Tutoren) überlegen sich weitere Szenarien anhand des geplanten Spiels.