Warning: include_once(/var/www/html/pmwiki-2.2.86/cookbook/soap4pmwiki/soap4pmwiki.php): failed to open stream: No such file or directory in /var/www/html/fields/dbp13/local/config.php on line 4

Warning: include_once(): Failed opening '/var/www/html/pmwiki-2.2.86/cookbook/soap4pmwiki/soap4pmwiki.php' for inclusion (include_path='.:/opt/php/lib/php') in /var/www/html/fields/dbp13/local/config.php on line 4

Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/fields/dbp13/local/config.php:4) in /var/www/html/pmwiki-2.2.86/pmwiki.php on line 1250
Datenbankpraktikum SS 2013 - MMOG - Schiffe Und Missionen Kampfmechanismus

Kampfmechanismus

von Isaak Mitschke

Einleitung

Wann immer ein Spieler einen anderen angreift kommt unser Kampfmechanismus zum Einsatz. Dieser sorgt dafür, dass Kämpfe nach einer bestimmten Logik ablaufen. Entscheidend für unsere Berechnungen sind die Angriff- und Verteidigungskraft einer Flotte. Der Angriff-/Verteidigungswert einer Flotte ist die Summe der entsprechenden Werte aller Schiffe in einer Flotte. Wir haben uns dafür entschieden, dass ein Schiff sowohl einen Angriffs- als auch einen Verteidigungswert hat, damit wir Schiffe mit verschiedenen Funktionen erstellen können. So hat z.B. eine Verteidigungsplattform einen hohen Verteidigungswert aber einen niedrigen Angriffswert, analog ein Zerstörer einen höheren Angriffswert.

Ablauf und Implementierung

Bei einem Angriff tritt der Angreifer gegen den Verteidiger und seine Verbündeten an (falls Mitglieder seiner Allianz Flotten bei ihm stationiert haben). Als erstes wird der „Kampfwert“ berechnet. Dieser ist die Differenz zwischen Angriffswert des Angreifers und Summe der Verteidigungswerte der Verteidigerflotten. Nun wird entschieden:

  • Kampfwert > 0: Angriff erfolgreich.
  • Kampfwert < 0: Angriff fehlgeschlagen
  • Kampfwert = 0: Unentschieden

Der Verlierer verliert immer alle Schiffe, je nachdem wie stark er aber war, verliert auch der Gewinner Schiffe. Um dies zu realisieren wird nun vom Gewinner solange ein zufällig gewähltes Schiff gelöscht bis der Angriff-/Verteidigungswert des Gewinners kleiner oder gleich dem „Kampfwert“ ist. Damit Kämpfe aber nicht jedes Mal gleich ablaufen wird in der Schleife der Kampfwert mit einem Zufallswert zwischen 0,8 und 1,2 Multipliziert.

Zum berechnen der Verluste haben wir uns anfangs für folgendes Verfahren entschieden: Wähle zufällig eine der Gewinner Flotten (Falls Verteidiger der Sieger ist), wähle dann Zufällig einen der Schiffstypen. Von diesem wird dann die Anzahl in der Flotte entsprechend dekrementiert. Dies führt allerdings dazu, dass eine Flotte von jedem Schiffstyp etwa gleichviel Schiffe verliert, was zur Folge hat das besonders „wertvolle“ Schiffe von denen man nur wenige in seiner Flotte hat in der Regel alle zerstört werden. Da uns diese Ergebnisse aber zu vorhersehbar erschienen, haben wir stattdessen alle Schiffe in ein Array getan um dieses Problem zu lösen. Von diesem Array wird dann immer ein Schiff zufällig gewählt, dass gelöscht wird. Dadurch erhöht sich die Chance, ein teures, starkes Schiff nicht zu verlieren, wenn man beispielsweise mit 1000 kleinen Schiffen und einem sehr starken angreift.

Beispielkampf

Sollte der Angreifer gewinnen, stiehlt dieser dem Verteidiger Ressourcen. Dies geschieht auch wieder zufällig. Erst wird die Lagerkapazität der Flotte (im Zustand nach dem Kampf) berechnet und dann wird für jeden Rohstoff ein zufälliger Prozentsatz festgelegt, sodass die Summe aller Prozentsätze kleiner oder gleich eins ist. Dann wird für jede Ressource die Anzahl der zu stehlenden Masse festgelegt. Die Anzahl Berechnet sich wie folgt: Lagerkapazität*Prozentsatz. Dann wird versucht, für jede Ressource die gewünschte Anzahl vom Planeten zu stehlen. Sollte der Planet nicht so viel von der Ressource haben, wird die Differenz auf die anderen Ressource addiert.

Fazit und Ausblick

Die Kämpfe funktionieren wie wir es uns vorgestellt haben und sind abwechslungsreich, da durch die Zufallswerte das Ergebnis immer ein wenig anders ist. Wir wollten eigentlich noch einen weiteren Missionstypen hinzufügen, der vorsieht, dass vom Verlierer noch einige Schiffe fliehen können, dies haben wir aber nicht mehr in der Zeit geschafft. Wir hatten außerdem noch die Idee, jedem Schiff eine „Gesundheit“ zu geben, sodass Schiffe nicht nur zerstört, sondern auch beschädigt werden können. Dies wäre jedoch zu zeitaufwändig geworden, da für jedes Schiff die Gesundheit gespeichert werden müsste, was zu einer sehr vollen Datenbanktabelle führen würde. Zudem würde es bei einem Kampf zu sehr vielen Datenbankzugriffen kommen, wenn viele Schiffe beschädigt würden. Weiterhin müsste man auch festlegen, wie sich solch eine Beschädigung auf den Angriffs- und Verteidigungswert, auf die Lagerkapazität,Geschwindigkeit usw. einer Flotte auswirkt. All das wäre zeitlich und in seiner Komplexität nicht machbar gewesen. Insgesamt sind wir mit dem Kampfmechanismus jedoch zufrieden, er funktioniert nach unseren Vorstellungen.


Page last modified on August 24, 2013, at 01:35 AM