Dokumentation zum Massive Multiplayer Online Game - Universität ...
Dokumentation zum Massive Multiplayer Online Game - Universität ...
Dokumentation zum Massive Multiplayer Online Game - Universität ...
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
4. Schiffe und Missionen<br />
36<br />
class Fleet < ActiveRecord::Base<br />
has_many :shipfleets, dependent: :delete_all<br />
has_many :ships, :through => :shipfleets<br />
belongs_to :start_planet, class_name: "Planet", foreign_key: "start_planet"<br />
belongs_to :target_planet, class_name: "Planet", foreign_key: "target_planet"<br />
belongs_to :origin_planet, class_name: "Planet", foreign_key: "origin_planet"<br />
belongs_to :user<br />
belongs_to :mission<br />
...<br />
end<br />
Attribute<br />
| Ausschnitt des ER Diagramms<br />
Jeder User hat an jedem seiner Planeten eine Heimatflotte (eventuell auch ohne Schiffe). Sobald eine Flotte<br />
auf Mission geschickt werden soll, wird sie gesplittet und die neu entstandene Flotte erhält Attribute für den<br />
Flug (Zeit, Ziel, Mission, ...). Diese neue Flotte existiert nur solange sie unterwegs ist, denn wenn sie wieder<br />
zurückkehrt oder zu einem anderen eigenen Planeten fliegt, werden ihre Schiffe der dortigen Heimatflotte<br />
hinzugefügt und die Flotte wird gelöscht. Lediglich eine Ausnahme stellt die erfolgreiche Kolonialisierung dar,<br />
wo die Flotte am Ziel auch die neue Heimatflotte darstellt.<br />
Diese Umsetzung war nötig um die Technologiefaktoren miteinbeziehen zu können. Sollte während eines<br />
Fluges <strong>zum</strong> Beispiel eine Technologie für erhöhte Geschwindigkeit erforscht worden sein, dann sollte sich das<br />
nur auf stationierte Flotten auswirken. Abhilfe schaffen also die temporären fliegenden Flotten, indem sie die<br />
beim Abflug aktuellen Werte für Technologien abspeichern. So kann bei Abbruch der Mission oder Rückkehr<br />
der Flotte die Zeit für den Rückweg realistisch berechnet werden.<br />
Eine Flotte hat Attribute für Start-, Ziel- und Heimatplanet. Anhand dieser Informationen ist eindeutig ablesbar<br />
wo sie sich zu einem Zeitpunkt befindet. Durch die Angabe eines Heimatplaneten ist immer eindeutig festgelegt,<br />
ob sich die Flotte auf einem Hinflug (Startplanet = Heimatplanet), oder einem Rückflug (Zielplanet = Heimatplanet)<br />
befindet. Außerdem sind sowohl Abflugs- als auch Ankunftszeit in der Flotte abgespeichert, da dies nötig ist<br />
um Missionen abbrechen zu können. Denn mithilfe der Abflugszeit lässt sich die bisher verstrichene Zeit<br />
berechnen, welche bei die Zeitdauer darstellt, die die Flotte für ihren Heimweg benötigt.<br />
Missionsmethoden<br />
Um Flotten auf eine Mission zu schicken gibt es im Fleet-Model eine Methode die eine Mission, einen<br />
Zielplaneten, die Anzahl der jeweiligen Schiffe als Hash und eventuelle Rohstoffe empfängt. Der Ablauf innerhalb<br />
dieser Methode lässt sich wie folgt beschreiben:<br />
Zunächst werden die Eingaben überprüft (Beispiel: ist das Objekt tatsächlich ein Planet). Anschließend wird<br />
die Heimatflotte gesplitted, sodass eine neue Flotte entsteht. An ihr werden dann Attribute für Start-, Ziel- und<br />
Heimatplanet, Start- und Ankunftszeit gesetzt. Daraufhin, wird geschaut, welcher Missionstyp eingegeben<br />
wurde:<br />
def move(mission, destination, ship_hash, ore, crystal, credit)<br />
case mission.id<br />
when 2 then # Colonization<br />
... # missionsspezifische Aktionen<br />
when 3 then # Attack