rundenbasiertes Multiplayerspiel

Du hast eine Idee für ein Projekt?
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

@nezzcarth und @sma: Ok, danke. Ich hatte da wohl wirklich mehr in Richtung "Rogue for multiplayer" gedacht. Vielleicht ist der Begriff MUD tatsächlich anders belegt, als ich ihn bisher wahrgenommen habe.

Dennoch fände ich einen Text basierten Dungeon-Crawler durchaus als reizvolles Projekt. Die Spielweltstruktur ließe ich einfach modellieren (wie schon x-Mal gezeigt hier im Forum) und die Darstellung wäre auch kein Problem.

Naja, ein "echtes" Multiplayer-Rogue wäre sicherlich in kleinerem Umfang auch denkbar :-)

Ansonsten ist mir noch Konquest eingefallen. Das wäre auch mit reiner Textausgabe leicht darstellbar und vom Spielprinzip passend.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Konquest oder ein Rogue-like würden auch meinen Geschmack und mein Interesse treffen, doch letztlich wollte Saftmixer ja ein paar Ideen und muss sie umsetzen, nicht wir :)

Das Problem mit "erfinde doch einfach mal ein Spiel" ist, dass dies die Aufgabe von reiner Implementierung hin zum Erfinden eines (möglichst funktionierenden) Spiels mit eigenen Regeln verschiebt und dadurch IMHO eine Größenordnung schwieriger macht. Wenn es um das Programmieren geht, ist es schon anspruchsvoll genug, ein existierendes Spiel umzusetzen.

Da ich manchmal einfach nur so zum Spaß etwas programmiere, habe ich vor einige Jahren mal das ursprüngliche Rogue von C nach Python portiert und auch das KDE-Konquest habe ich mal, damals noch in Dolphin Smalltalk für Windows (habe ich leider nicht mehr), nachgebaut. Und so noch ein paar andere mehr oder weniger vollständige ähnliche Projekte...

Zu einem eigenen Spiel hat es nie gereicht. Bei einem Rogue-like würde ich mich wahrscheinlich schon im Erfinden von Rollenspiel-Regeln verlieren :) Ich wollte einmal ein 1D-Rogue-like bauen, wie ich's genannt hatte, weil es keine 2D-Grafik haben sollte, sondern einfach nur eine Texteingabe, genau wie bei einem Textadventure. Ich fand es so einfacher, ein zufälliges Dungeon zu erzeugen und nicht wirklich weniger spannend. So eine SF-4X-Spiel könnte mir auch gefallen, aber auch da finde ich es schwer, etwas zu erfinden, das es nicht schon gibt. Ich kenne wohl einfach zu viel von diesem Zeug.

Ich erwähnte Russell Wallaces Atlantis. Der Mann hat in seiner Jugend noch weitere PBEMs entwickelt, z.B. auch Rainbow's End, ein wesentlich einfacheres Spiel. Es funktioniert im Prinzip so:

Gespielt wird auf einer Karte von WxH quadratischen Feldern (abweichend von RE, wo es Hexfelder sind). Jedem Feld hat eine zufällig bestimmte Geländeform: Wasser, Gebirge oder Flachland. Es gibt Einheiten. Gebirgs- und Flachland-Felder können beliebig viele Einheiten enthalten. Wasserfelder können keine Einheiten enthalten. Es gibt Städte. Diese können nur im Flachland gegründet werden, aber nur, in dem Feld noch keine Stadt ist und wenn kein Nachbarfeld eine Stadt enthält. Nachbarfelder sind die 4 angrenzenden Felder, aber nicht die, die über Eck liegen. Es gibt N Spieler. Einheiten und Städte gehören jeweils einem Spieler. Einheiten sind (abweichend von RE) Infanterie, Kavallerie, Artillerie und Pioniere. A kann sich 1 Feld, I und P 2 Felder und K 3 Felder pro Runde bewegen. Es gilt wieder: Nicht über Eck. Treffen Einheiten zweier (verfeindeter) Spieler auf einem Feld zusammen, kommt es zu einem Kampf nach dem Ende aller Bewegung. Einheiten aller Spieler werden in einer zufälligen Reihenfolge bewegt. Nach der Bewegung und vor dem Kampf kann Artillerie auf ein Feld in bis zu 2 Feldern Entfernung schießen und dort alle Einheiten angreifen. Artillerie auf diesem Feld ohne eigenen Kampfbefehl kann zurück schießen. Kämpfe werden pro Feld entschieden. Einheiten, die sich nicht bewegt haben und einen stehenden Unterstützungsbefehl haben, rücken zu einem zufälligen erreichbaren Feld (Regel abweichend von RE).

I, K und A wird gilt beim ersten Treffer als angeschlagen und hat dann -1 auf die Bewegungsreichweite. I, K und A sind beim zweiten Treffer zerstört. P ist beim ersten Treffer zerstört. A trifft alle anderen Einheiten mit 9+ auf 1W10. K trifft mit 9+ andere K, mit 7+ I, mit 5+ A und P. I trifft K und I mit 8+, A und P mit 6+. A und P kämpfen nicht aktiv. Bei einer 10 wird noch einmal gewürfelt. In einer Stadt ist es um 1 schwieriger, den Gegner zu treffen. Einheiten greift vorzugsweise K an, dann I, dann A, dann P. Kampf findet in Phasen statt. In jeder Phase greifen I und K einmal an. Sind alle Einheiten einer Seite nach einer Phase angeschlagen, versuchen sie sich zurückzuziehen. Es muss ein nicht von nicht-eigenen Einheiten besetztes Nicht-Wasserfeld sein. Es wird zufällig bestimmt. Einheiten, die sich zurückgezogen haben, können sie die folgende Runde nicht bewegen. Angeschlagene Einheiten, die sich nicht bewegen und sich nicht gerade zurückgezogen haben, sind wieder normal. Angeschlagene Einheiten in einer Stadt, auch wenn sie sich dahin gerade zurückgezogen haben, sind wieder normal.

Eine Pioniereinheit kann nach dem Kampf sich selbst in eine Stadt verwandeln, wenn auf dem Feld eine Stadt möglich ist. Infanterie kann fremde Städte, in denen keine nicht-eigenen Einheiten mehr stehen, erobern.

Pro eigene Stadt bekommt jeder Spieler am Ende einer Runde $20. Neue Einheiten können in Städten erschaffen werden. I und P kosten $10, A und K kosten $20. Jede existierende Einheit kostet am Anfang einer Runde $1. Ohne Geld ist eine nicht bezahlte Einheit angeschlagen und eine angeschlagene Einheit zerstört. Jeder Spieler startet mit einer zufällig platzierten Stadt und $100.

Ich glaube, damit habe ich einigermaßen vollständige Regeln, auch wenn jede Menge Details nicht festgelegt sind. Wie groß ist die Karte in Abhängigkeit der Spieleranzahl? Sind alle Felder gleich wahrscheinlich? Treten Geländeformen gehäuft auf? Wie platziere ich die Startstädte? Wie verhindere ich, dass ein Spieler nicht komplett eingesperrt ist? Wie mache ich die Stadtpositionen also fair? Was genau heißt "vorzugsweise" beim Kampf? Wie ermittle ich zufällig Felder und die zufällige Zugreihenfolge? Und gibt es weitere Regeln? Können sich Spieler verbünden? Sich Geld überweisen? Kann ich Städte aufgeben? Kann ich bei der Artillerie mehr als ein Feld als mögliches Ziel angeben und dann wird das erste (beste?) gewählt, das passt? Kann ich angeben, wer welches Feld verteidigen soll? Kann ich Rückzugsfelder definieren? Sollte es möglich sein, mit einer Übermacht von 10 I nicht einfach von einer P-Einheit gestoppt zu werden sondern weiterziehen zu können? Kann man vielleicht Festungen oder Gräben errichten? Was ist mit Booten? Können erfahrene Truppen einen Vorteil bekommen?

Und funktionieren die von mir schnell ausgedachten Regeln überhaupt? Sind Einheiten zu billig oder zu teuer? Ist der Kampf zu tödlich oder zu ereignislos? Wie hoch sollte das Startgeld sein? Kann das Spiel kippen oder bleibt es bis zum Ende spannend? Wann ist es eigentlich zu Ende?

Stefan
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

@sma: Klingt nicht übel. Mich "stören" da im wesentlichen zwei Elemente:

1.) Mehrere / beliebig viele Einheiten pro Feld sind bei reiner Textdarstellung kaum vernünftig darzustellen. Mir fiele da zumindest nicht viel ein. Man könnte es so angehen:
("~": Wasser, "#": Berge, ".": Flachland)

Code: Alles auswählen

   0    1    2
 +----+----+----+
A|....|2K1I|~~~~|
A|....|3A1P|~~~~|
 +----+----+----+
B|....|4K  |####|
B|....|2A1P|####|
 +----+----+----+
Allerdings halte ich das nicht für wirklich übersichtlich und zudem wäre bei 9 Einheiten pro Typ das Limit erreicht. Ansonsten müsste man die Felder noch größer machen...

Oder aber man stellt die Details nicht dar, und wählt stattdessen ein Symbol für eine "Armee" (= mehr als eine Einheit pro Feld), z.B. "G" für Gruppe. Obige Szene wäre dann z.B. so etwas:

Code: Alles auswählen

-012
A.G~
B.G#
Prinzipiell würde ich das bevorzugen, allerdings wäre da die Benennung per Koordinaten ein Problem - ok, bei Buchstaben + Ziffern wären bei einstelligen Namen immerhin ja 36x36 Felder drin.
Aber irgend wann leidet die Übersicht dennoch und eine schnelle Info über die Zusammensetzung eines "Gruppenfeldes" wäre damit recht schwer - bei einer GUI habe ich ja per Maus / Tab o.ä. ein einfache Möglichkeit, diese Infos anzuzeigen.

Ich würde daher die Vereinfachung vornehmen, dass nur eine Einheit pro Feld auf der Karte sein darf.

2.) Automatische / zufällige Züge von Einheiten zur Unterstützung oder beim Rückzug. Da muss ich vermutlich viel investieren, das umzusetzen (also an Logik). Zudem verliert der Spieler hier schnell die Übersicht, welche Einheit wo steht. ("Wieso ist denn diese Einheit nicht da, wo ich sie letzte Runde abgestellt hatte?")

Ansonsten ist das sicherlich eine interessante Idee :-)

Allerdings würde ich beim Typ "Gebirge" noch etwas besonderes erwarten - eigentlich zeichnet diese Geländeform nur aus, dass man dort keine Stadt gründen kann, oder habe ich da etwas überlesen? Ich würde da schon eher Bewegungseinbußen für Einheiten definieren oder auch Vor- / Nachteile beim Angriff.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
nezzcarth
User
Beiträge: 1634
Registriert: Samstag 16. April 2011, 12:47

sma hat geschrieben: Bei einem Rogue-like würde ich mich wahrscheinlich schon im Erfinden von Rollenspiel-Regeln verlieren :) Ich wollte einmal ein 1D-Rogue-like bauen, wie ich's genannt hatte, weil es keine 2D-Grafik haben sollte, sondern einfach nur eine Texteingabe, genau wie bei einem Textadventure. Ich fand es so einfacher, ein zufälliges Dungeon zu erzeugen und nicht wirklich weniger spannend. So eine SF-4X-Spiel könnte mir auch gefallen, aber auch da finde ich es schwer, etwas zu erfinden, das es nicht schon gibt. Ich kenne wohl einfach zu viel von diesem Zeug.
Was die Regeln angeht, gäb es im Zweifelsfall auch noch die Möglichkeit, die eines (freien) Rollenspielsystemes zu übernehmen. Da gibt es ja auch welche, die nicht ganz so umfangreich sind, wie das etwa bei D20 der Fall ist.
Generell gibt es was die Entwicklung von Rougelikes angeht eine recht umfangreiche Seite, die u.a. auch eine Python-Abteilung hat (zur Qualität kann ich nichts sagen):
http://roguebasin.roguelikedevelopment. ... php/Python
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Hyperion, ich ging davon aus, dass nicht Einheiten auf einer Karte dargestellt werden, sondern als Liste, jeweils mit Koordinate. Die Karte sieht man getrennt davon. Z.B.

Code: Alles auswählen

     1 2 ->
  1  ^ ^ . ~ ~ .
  2  . . ~ ^ . ~
  v  . ^ . . ~ ^

  Spieler: Kardath
  Runde:   3
  Einheiten:
  - Infanterie #1 (3, 1) 
  - Kavallerie #4 (3, 1) [angeschlagen]
  - Artillerie #7 (2, 2)
Was die Regeln angeht: Ich hätte schreiben wollen, dass Gebirge die Bewegung stoppt, d.h. eine Einheit in ein Gebirgsfeld ziehen kann, aber nicht in der selben Runde wie aus dem Feld herausziehen kann. Außerdem ist wohl der Extraaufwand für Hexfelder doch besser als quadratische Felder, wo man nur maximal 4 Nachbarn hat und es sehr einfach ist (siehe Feld 5, 2 in meinem Beispiel) sich einzuschließen. Hier ist die Hex-Variante:

Code: Alles auswählen

 ^ ^ . ~ ~ .
   . . ~ ^ . ~
  . ^ . . ~ ^
Was die Übersichtlichkeit angeht: Ich schicke bei so einem Spiel ja meine Befehle an den Server, der wertet sie zusammen mit den Befehlen aller anderen Spieler gemeinsam aus und schickt mir dann einen Report. In so einem Report muss natürlich jede Bewegung und jeder Kampf nachvollziehbar beschrieben werden:

Code: Alles auswählen

  Artilleriebeschuß von Artillerie #7 (2, 2) auf Feld (3, 1):
   - Infanterie #19 von Dodobar überlebt
   - Infanterie #20 von Dodobar wird getroffen und ist angeschlagen

  Kampf in Feld 3,1
   - Kardath hat 1 Infanterie, 1 Kavallerie
   - Dodobar hat 2 Infanterie (1 angeschlagen)
   
   Phase 1:
   - Kavallerie #4 attackiert Infanterie #20 und zerschlägt die Einheit.
   - Infanterie #1 attackiert Infanterie #19 ohne Ergebnis.
   - Infanterie #19 attackiert Kavallerie #4 und schlägt Einheit an.
   Phase 2:
   - Kavallerie #4 attackiert Infanterie #19 ohne Ergebnis.
   - Infanterie #1 attackiert Infanterie #19 und schlägt Einheit an.
   usw.
Dodbars Infanterie müsste sich jetzt zurückziehen wollen, hat aber kein Rückzugsfeld. Wenn es da wäre, finde ich das Berechnen von zufälligen Feldern nicht weiter schwer. Ich bestimmt die Liste der möglichen Felder, mische diese und wähle das erste Feld der Liste.

nezzcarth, ich finde, freien Rollenspielregeln zeichnen sich häufig dadurch aus, dass sie mehr oder weniger unvollständig sind und eigentlich nur funktionieren, wenn man jede Menge Rollenspielerfahrung und damit implizit weitere Regeln dazu gibt, um die Lücken zu füllen.

So etwas nennt sich dann auch gerne Old-School. Für das Spiel am Tisch ist das OK, doch um das im Computer umzusetzen, ist das zu wenig.

Hinzu kommt, dass ich für das normale Spiel eher Richtung Storytelling tendiere und sich solche Regeln weniger passend sind. Und wenn ich an D&D oder Pathfinder als regellastige Klassiker denke, wären das zu viele Regeln, um sie alle umzusetzen.

Meine neuste Erwerbung ist das PDF Legends von Mongoose für $1, das wohlige Erinnerungen an alte RuneQuest-Runden wieder weckt. Hier ist von den Regeln aus gewollt, dass jeder Kampf potentiell tödlich ist und ein Charakter mit steigender Erfahrung niemals mehr Lebenspunkte hat. Für ein Rogue-like ist das IMHO nicht so gut. Da Legends der OGL unterliegt, könnte man sich sogar dieser Regeln bedienen.

Bei D&D4 (das man nicht nehmen könnte) gefällt mir das System mit dem Power-Cards, die Regeln für alle Sonderfähigkeiten von Charakteren haben. Das bereits wäre eine Herausforderung, wenn man das umsetzen würde. Hinzu kommt, dass auch die Gegner ähnlich komplex beschrieben sind und hier der Computer nun die passenden Handlungen auswählen müsste. Und Position und Gelände spielen eine Rolle, d.h. können taktisch genutzt werden. Auch schwierig.

Daher glaube ich, man muss ein einfaches, aber nicht zu einfaches System explizit für so ein Spiel entwickeln und das dann aber was Waffen, Rüstungen, Zauber und Monster angeht, sorgfältig balancieren.


Stefan
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Hm... die Trennung zwischen Karte und Einheitendarstellung macht das zwar flexibler, aber ich gestehe, dass mich das als Spieler überforderte. Im Grunde liefe es darauf hinaus, dass ich mir für jede Gefechtsgegend auf Papier eine kleine Karte malen würde, bei der die Einheiten verzeichnet wären ;-)

Und Hex-Felder mag ich generell nicht - einzig Battle for Wesnoth konnte mich einige Zeit fesseln. Aber das ist natürlich Geschmackssache!
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Hyperion hat geschrieben:Hm... die Trennung zwischen Karte und Einheitendarstellung macht das zwar flexibler, aber ich gestehe, dass mich das als Spieler überforderte. Im Grunde liefe es darauf hinaus, dass ich mir für jede Gefechtsgegend auf Papier eine kleine Karte malen würde, bei der die Einheiten verzeichnet wären ;-)
Das wäre ja kein Problem für ein Programm, solche Ausschnittskarten einzufügen.
Hyperion hat geschrieben:Und Hex-Felder mag ich generell nicht - einzig Battle for Wesnoth konnte mich einige Zeit fesseln. Aber das ist natürlich Geschmackssache!
Hexfelder gehören IMHO zu derartigen Spielen dazu :) Das war eigentlich schon immer so. Mir fallen Conquest und Warpwar von Metagaming aus den frühen 70ern ein. Und das waren garantiert nicht die ersten Cosims.

Stefan
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

sma hat geschrieben: Das wäre ja kein Problem für ein Programm, solche Ausschnittskarten einzufügen.
Das würde dann aber langsam sehr aufwendig :-D
sma hat geschrieben: Hexfelder gehören IMHO zu derartigen Spielen dazu :) Das war eigentlich schon immer so.
Die Frage ist: Warum? Wo liegt denn der große Vorteil von Hexfeldern gegenüber von quadratischen? Auf wikipedia werden als positive Argumente nur solche gebracht, die ich als ziemlich bedeutungslos ansehen würde. "Entfernung abschätzen" ist doch technisch kein Problem mehr, selbst bei großen Karten. Und bei dem Argument, dass Nachbarfelder durch Kanten und nicht Ecken verbunden sind, fehlt es mir an Vorstellungskraft, welche Regeln damit einfacher umzusetzen sind oder welche technischen Vorteile das haben kann.

Ist da evtl. viel Nostalgie und eben die "Gewohnheit" doch wichtiger, als andere Kriterien? Evtl. kennst Du dazu ja noch interessante Diskussionen oder Beiträge?

Echtzeitstrategie z.B. kenne ich nur mit quadratischem Raster - und ich sehe nicht wirklich einen großen Unterschied in der generellen Mechanik.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Hyperion hat geschrieben:Die Frage ist: Warum? Wo liegt denn der große Vorteil von Hexfeldern gegenüber von quadratischen?
Bei einer Bewegungsreichweite von 1 erreichst du 50% mehr Felder.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

/me hat geschrieben:
Hyperion hat geschrieben:Die Frage ist: Warum? Wo liegt denn der große Vorteil von Hexfeldern gegenüber von quadratischen?
Bei einer Bewegungsreichweite von 1 erreichst du 50% mehr Felder.
Wenn ich diagonal ziehen kann, dann habe ich bei quadratischen Feldern 8 Möglichkeiten ;-) Und wie gesagt: Wo ist dabei das "Problem" bzw. der Unterschied, ob ich per Kante an etwas grenze oder nur per Ecke?
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Hyperion hat geschrieben:Wenn ich diagonal ziehen kann, dann habe ich bei quadratischen Feldern 8 Möglichkeiten ;-)
Diagonal kostet es aber 1,5 (bzw. math.sqrt(2)) Bewegungspunkte.
Hyperion hat geschrieben:Wo ist dabei das "Problem" bzw. der Unterschied, ob ich per Kante an etwas grenze oder nur per Ecke?
Das ist eben genau dieser Unterschied in der Wertigkeit bei einer Bewegung.

Mir persönlich ist es auch egal ob das jetzt Dreiecke, Quadrate, Sechsecke oder frei gemalte Gebiete sind. Hauptsache das Spiel funktioniert.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

/me hat geschrieben:
Hyperion hat geschrieben:Wenn ich diagonal ziehen kann, dann habe ich bei quadratischen Feldern 8 Möglichkeiten ;-)
Diagonal kostet es aber 1,5 (bzw. math.sqrt(2)) Bewegungspunkte.
Sagt der Papst? :D
Mal im Ernst: Bei einem "Raster"-System empfinde ich so eine Berechnung von Distanzen im R² als unintuitiv. Ich kann sehr einfach definieren, dass ein diagonaler Zug auch genau 1 kostet ;-)

Letztlich kann ich die Struktur der Felder unterschiedlich interpretieren; ich sehe da irgend wie eine Graphstruktur vor mir, in der Knoten über Kanten mit anderen Knoten verbunden sind. Ein Feld stellt dabei einen Knoten dar. Wenn ich diagonal ziehen kann, dann gibt es eben (max) 8 Kanten zu den Nachbarknoten:

Code: Alles auswählen

o o o
|\|/|
o-o-o
|/|\|
o o o
Mir ist jetzt kein Spiel bekannt, wo diese Art der Distanz für die Zugberechnung offensichtlich so verwendet wird, wie Du es hier vorschlägst. Kennst Du eines?
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Ich habe vorhin noch mal ein paar eigene Regeln aufgeschrieben: Taugt das was?


Ziel: Die meisten Heimatwelten nach X Runden.

Setup: Auf einer schachbrettartigen Karte mit WxH Sektoren gibt es pro Sektor MAX(0, W6-2) Welten, d.h. die Karte hat durchschnittlich WxHx1,5 Welten, für W=H=10 also 150. Je Welt hat eine Größe von W6-1, d.h. im vorherigen Beispiel jede Größe 25x. Eine Welt kann unbesiedelt sein (der Startzustand), einen Außenposten haben, eine Koloniewelt oder eine Heimatwelt sein. Es gibt N Spieler (für W=H=10 vielleicht N=12). Jeder Spieler startet auf einer zufällig ausgewählten Welt, deren Status auf Heimatwelt und deren Größe auf 5 gesetzt wird. Er startet mit 25 - (Summe der Größen aller Welten im selben Sektor) Ressourcen.

Einheiten: Es gibt Raumschiffe und Bodentruppen, die jeweils einem Spieler gehören. Raumschiffe befinden sich immer in einem Sektor, wo jeweils alle Raumschiffe eines Spieler eine Flotte bilden. Flotten können sich in einen Nachbarsektor (nicht über Eck) bewegen. Bodentruppen befinden sich auf einer Welt oder sind Teil einer Flotte. Jedes Raumschiff kann maximal eine Bodentruppe transportieren.

Ressourcen: Welten mit Außenposten, Koloniewelt oder Heimatwelt erzeugen am Ende jeder Runde entsprechend ihrer Größe Ressourcen, die entweder verbaut oder mit einer Flotte abtransportiert werden können, wobei ein Raumschiff maximal 3 Ressourcen transportieren kann. Ein Außenposten kann, statt Ressourcen zu produzieren, zu einer Koloniewelt ausgebaut werden und eine Koloniewelt entsprechen zu einer Heimatwelt.

Kampf: Raumschiffe, die nichts transportieren, können gegen andere Raumschiffe im selben Sektor kämpfen und Welten bombardieren. Raumschiffe, die Bodentruppen transportieren, können diese auf einer Welt landen. Bodentruppen können gegeneinander auf der selben Welt kämpfen. Der Kampf findet in 3 Phasen statt. Pro Phase zerstört jedes Raumschiff ein gegnerisches Raumschiff mit W6>=5. Bei 6 wird noch einmal gewürfelt. Hat eine Seite mindestens 3x so viele Raumschiffe wie die andere, gilt W6>=4. Wurde eine Seite vernichtet, endet der Kampf vorzeitig. Bodentruppen und Ressourcen, die nicht mehr transportiert werden können, werden vernichtet. Ein bombardierendes Raumschiff wird von jeder Bodentruppe bei W6=6 vernichtet und greift 3x mit den üblichen Regeln an, d.h. bei W6>=5 (6 nachwürfeln) und +1 bei 3:1 oder besser. Gehören die Bodentruppen dem selben Spieler wie die Welt, gilt W6=6. Wird eine Heimatwelt beim Bombardieren 5x getroffen nachdem alle Bodentruppen vernichtet wurden, wird sie zu einer Koloniewelt heruntergestuft. Eine Koloniewelt wird zum Außenposten heruntergestuft und ein Außenposten vernichtet (man kann eigene Welten bombardieren).

Bauen: Raumschiffe können für 1 Ressource auf Heimatwelten gebaut werden. Bodentruppen können für 1 Ressource auf Koloniewelten oder Heimatwelten gebaut werden. Es kostet 1 Raumschiff und 3 Ressourcen (die die Flotte des Raumschiffs mitführen muss), um auf einer leeren Welt einen Außenposten zu errichten.

Rundenabfolge: Bodentruppen und Ressourcen können in eine Flotte übernommen werden oder auf einer eigenen Welt abgesetzt werden, aber nicht beides. Raumschiffe und Bodentruppen können gebaut werden. Flotten können bewegt werden, wenn die Transportkapazität ausreicht. Bewegung findet gleichzeitig statt, Flotten können also Plätze tauschen. Treffen Flotten unterschiedlicher Spieler zusammen, kommt es zu einem Kampf. Nach dem Raumkampf kann jedes Raumschiff, das nichts transportiert, eine Welt bombardieren. Raumschiffe, die Bodentruppen transportieren, können diese absetzen. Sie werden bei W6=6 zerstört, wenn gegnerische Bodentruppen vorhanden sind. Danach findet der Bodenkampf statt. Gewinnt der Angreifer, wechselt die Welt den Besitzer. Gibt es keinen Besitzer, kann stattdessen ein Außenposten gegründet werden. Versuchen dies mehrere Spieler gleichzeitig, entscheidet der Zufall. Zum Schluss werden Ressourcen erhöht.


Erweiterung: Sternentore. Ein Sternentor kostet 5 Ressource auf einer Heimatwelt. Es ist eine Einheit, die wie Bodentruppen auf einer Welt oder in einer Flotte sein kann. Es braucht 10 Raumschiffe, um ein Sternentor zu transportieren. Eine Flotte kann, statt zu einem Nachbarsektor zu fliegen, auch durch einen Sternentor auf einer Welt im selben Sektor zu einem anderen eigenen Sternentor fliegen, welches sich auf einer Welt oder in einer Flotte befinden darf.

Erweiterung: Flotten können statt Bewegung den stehenden Befehl bekommen, im Falle eines Kampfes in einen Nachbarsektor zu fliegen, wenn sie nicht selbst in einem Kampf sind. Diese Raumschiffe kommen erst in Phase 2 des Kampfes an.

Erweiterung: Schnellere Raumschiffe: Für 2 oder 3 Ressourcen können Raumschiffe gebaut werden, die 2 oder 3 Sektoren weit fliegen können. Zusammen mit der Erweiterung Sternentore zählt ein Transfer durch ein Tor als ein Schritt.

Erweiterung: Allianzen. Spieler A kann Spieler B als Bündnispartner erklären und wenn B dies mit A auch tut, greifen sich Einheiten nicht gegenseitig an. Außerdem können die Sternentore des jeweils anderen Spielers mitbenutzt werden.

Erweiterung: Pro Welt können mehrere Außenposten und Kolonien unterschiedlicher Spieler errichtet werden, es kann jedoch nur die Heimatwelt eines Spielers sein. Bei Größe G bekommt jeder Spieler dann G - Anzahl(andere Spieler) Ressourcen und nochmals -1, wenn ein anderer Spieler eine Heimatwelt errichtet hat. Alle Angriffe anderer Flotten und Außenposten oder Kolonien müssen explizit angegeben werden.

Stefan
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Klingt schon ganz gut, wobei ich einige Dinge wohl puristischer gestalten würde.

- Worin unterscheiden sich "Außenposten", "Kolonialwelt" und "Heimatwelt"?
- Wie nehme ich Ressourcen ein? Werden diese auch von existierenden Einheiten verbraucht?
- Wonach genau richtet sich der Kampf bei mehreren (>2) Beteiligten? Also welcher Spieler hat die "Initiative"?

Ich sehe hier vor allem ein Problem: Bei so vielen Planeten dürfte das eine ziemlich zähe Angelegenheit werden ;-) Evtl. sollte man die Anzahl an Systemen reduzieren...
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Da ich das ganze selbst nie ausprobiert habe, will ich nicht bestreiten, dass es zäh oder sonstwie langweilig sein könnte. Ich habe einige Parameter demonstrativ beliebig gehalten, weil ich denke, dass man hier Einstellungen vornehmen muss.

Außenposten sind einfach nur da. Man kann dort nichts bauen. Sie zählen nicht für den Sieg. Auf Koloniewelten kann man Bodentruppen bauen, auf Heimatwelten auch Raumschiffe. Heimatwelten zählen für den Sieg, d.h. wer die meisten Heimatwelten kontrolliert, hat gewonnen.

Wer einen Außenposten etc. auf einer Welt errichtet hat, kontrolliert diese Welt und bekommt am Ende jeder Runde entsprechend der Weltgröße Ressourcen auf dieser Welt gutgeschrieben. Das hatte ich nicht so explizit geschrieben. Existierende Einheiten mit Ressourcen zu unterhalten hielt ich für entbehrlich.

Zum Kampf mit mehr als zwei Beteiligten habe ich mir keine Gedanken gemacht. Die einfachste Lösung könnte sein, dass in einem Kampf für jedes Schiff ein zufälliges Ziel aus allen Schiffen aller anderen Spieler ausgesucht wird. Kompliziert ist da eher die Parteien zu bestimmen, wenn es Allianzen gibt, denn Spieler A könnte mit B und C verbündet sein, während sich B und C prügeln wollen. Was macht jetzt A?

Was die Menge der Welten angeht: Bei (im Schnitt) 150 gibt es 25 pro Größe. Da ich Spielern eine Heimatwelt der Größe 5 geben wollte, das aber nicht die einzigen sein sollten, kam ich so auf 12 Spieler. Das wiederum bedeutet, dass jeder Spieler 12,5 Welten (von denen 2 nix taugen, weil Größe 0) verwalten muss, bis er ohne Konflikt nicht weiter wachsen kann.

Hier ist eine Alternative: Die Größe beträgt W6/2 (aufrunden). Auf einer Welt Größe 1 kann ein Außenposten errichtet werden, der 1 Ressource pro Runde bringt. Auf einer Welt Größe 2 kann der Außenposten zu einer Koloniewelt ausgebaut werden, was dann 2 Ressourcen bringt. Welten der Größe 3 können Heimatwelten werden, was 3 Ressourcen bringt. Eine Heimatwelt kann zu einer Industriewelt ausgebaut werden, was 4 Ressourcen bringt. Auf einer Koloniewelt kann ich 1 Ressource in 3 Bodentruppen umwandeln. Auf einer Heimatwelt kann ich 1 Ressource in 2 Raumschiffe umwandeln. Auf einer Industriewelt kann ich 4 Ressourcen in ein Sternentor umwandeln.

Bei 10 Spielern könnte ich 90 Welten ansetzen, wodurch ist auf eine Kartengröße von 9x7 komme. Hier ist eine Beispielkarte (Zahlen geben die Anzahl der Welten pro Sektor an):

Code: Alles auswählen

0 3 1 3 1 4 1 0 2
1 4 1 0 0 3 0 3 2
1 0 0 0 0 2 0 4 4
2 0 0 0 1 4 4 2 0
1 3 3 1 0 3 4 0 3
3 0 1 0 4 2 0 0 1
2 0 2 1 1 0 1 1 3
Oder ich setze 60 Welten an, was bei einer Kartengröße von 7x6 zu so einer Sektorkarte führen kann:

Code: Alles auswählen

0 2 0 3 0 0 0
0 0 0 4 0 0 2
0 4 4 4 1 0 2
1 1 1 1 2 0 3
1 1 1 2 1 2 2
2 4 2 1 3 4 0
Stefan
Krabman318
User
Beiträge: 21
Registriert: Sonntag 14. August 2011, 14:36

Hyperion hat geschrieben:(...) Ansonsten ist mir noch Konquest eingefallen. Das wäre auch mit reiner Textausgabe leicht darstellbar und vom Spielprinzip passend.
Gibt es dazu auch die kompletten Spielregeln?
BlackJack

@Krabman318: Die stehen auf jeden Fall in den C++-Dateien. ;-)
Krabman318
User
Beiträge: 21
Registriert: Sonntag 14. August 2011, 14:36

BlackJack hat geschrieben:@Krabman318: Die stehen auf jeden Fall in den C++-Dateien. ;-)
Leider schlägt der Download bei mir immer fehl, wegen eines "checksum error". :K
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Lionhard hat geschrieben:Mach doch ein spiel sowas in die art Paintball wo man sich kaputt schiesen soll :) zb. es spielen 4 spieler einer auf w,a,s,d,f der zweite auf i,j,k,l,o der dritte auf Arrow Keys - links, rechts, oben, unten, Enter, und der vierte auf 1,2,3,6. O, Enter, F, 6 ist Schiesen das andere bewegen. Die runde wird zb. 5 minuten haben und wer am ende am meisten Kills hat, hat die Runde gevonnen, es werden 3 runden dan wird es alles zusammen gerechnet und wer am meisten hat, hat das Spiel gevonen.
Und nicht vergessen dabei zu hoffen, dass die Tastatur des Users n-key-Rollover unterstützt und an PS/2 angeschlossen ist, denn bei USB ist spätestens nach der vierten gleichzeitig gedrückten Taste Schicht im Schacht. Und deine Idee klingt auch eher nach Echtzeit als nach rundenbasierten Spiel.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten