from outer space



  • Hi Leute!

    Also, hier ist mal der Startthread. Wo es in etwa hingehen soll, darüber haben einige von uns im Chat schon miteinander geplauscht.
    Ein Netzwerkspiel, bei dem einer den Server macht, die anderen sich einklinken und wir dann einen lustigen Abend haben.

    Was auch immer in dem Spiel geschieht (ich habe unten einen Vorschlag), letztlich soll es so laufen, dass die serverseitige Software für jeden einsichtig ist, damit keine dunklen Ecken in den Regeln bleiben. Für die Clientseite muß es zumindest ein festes Kommunikationsmodul geben, um dass sich jeder seine eigene Oberfläche und die helfende Tools nach Lust und Laune zusammenbauen kann.
    Diese Clients sollten dann auch Nichtprogrammierern zur Verfügung gestellt werden, und eben auch untereinander ausgetauscht werden.

    Wie Devil schon richtig im DG-Forum bemerkt hat, ist es sinnlos ein 'inflationäres' Spiel zu machen, was letztlich keiner mehr verwalten kann. So gut können Eure Baulisten und Bots gar nicht werden. Es wäre bedeutend besser, wenn es ein richtiges Ende gibt.
    Die Grundidee, die ich hier jetzt mal reinwerfe - stelle ich in diesem Moment unter meinen und Marc++us' AGB-Copyright-Schutz, dies sei allen Ideenabgreifern gesagt, da kann ich eisenhart werden. Das gibt dann eine GML (general marc++us license, ob er will oder nicht :))

    Hier das 'Starterpack':

    Ein Galaxis- oder Inselspiel, bei dem es eine limitierte Anzahl von Inseln/Sternen gibt (je nach Mitspielern), auf denen sich die Lebensbedingungen permanent ändern. Mit einer festen vorgegebenen Anzahl von (Raum)Schiffen ist es das Spielziel, die Flotten zur richtigen Zeit an den richtigen Plätzen zu haben, um die Leute so zu evakuieren, daß die Population möglichst letztlich so groß wie möglich wird. In der einfachsten Version wird nicht gekämpft - auf einen vollen Planeten passt einfach keiner mehr drauf - und auch nicht gehandelt. Es gibt auch keine sonstigen unterstützenden Maßnahmen gegen die drohende Katastrophen.

    Vorteil: wenig verschiedene Befehle (also ein einfaches Protokoll)

    Im wesentlichen braucht man nur einen Datensatz aus vier ints (zum Server):

    -spieler -schiffsnr -command -parameter

    -command = Laden/Ausladen oder Fahren

    -parameter:
    bei Laden/Ausladen die Menge (+=laden, -=ausladen)
    bei Fahren das Ziel

    Die Rückmeldung an die Spieler sind eben diese Daten aller Spieler, sowie verschiedene Randomparameter und Checksummen. Anhand dieser Werte muß der Client in der Lage sein, den gleichen Spielzustand zu haben, wie der Server. Der Server prüft eingehende Kommandos auf Plausibilität, gibt bei sinnlosen Kommandos Messages zurück (reichen auch Fehlercodes, die der Client beherrscht), ansonsten
    bekommt der Spieler ein Acknowledge zurück. Die neuen Spieldaten erhält jeder Client dann entweder automatisch, oder auf Anfrage.

    Nach einer bestimmten Zeit gewinnt einfach der mit der größten Population.
    Einige wenige Zusatzregeln kann man natürlich schon diskutieren, z.B.:
    Wer zu lange in der Gegend rumschippert (weil er keinen Platz mehr findet), büßt auch auf den Schiffen Leute ein, bis er keine mehr hat.

    Das ganze Konzept ist sehr schlicht, trotzdem bestimmt nicht ohne, um einiges erweiterbar, sollte aber zuerst mal in diesem kleinen Rahmen funktionsfähig gemacht werden.

    So, dann postet mal, was Euch so für Gedanken kommen, und wie wir die Sache vorantreiben. Es wäre sinnvoll, wenn der Kreis derer, die sich hierdrum kümmern am Anfang noch sehr eng gehalten wird, dann weiter geöffnet wird. An diesem Projekt können wir uns sehr lange festbeissen, was dem gesamten Forum zugute kommen wird. Ich denke, diese erste Stufe müßte machbar sein. Laßt uns kein Riesending anfangen, was nichts wird. Klettern wir lieber die Leiter der kleinen Erfolge.

    Bitsy



  • hi bitsy,

    jetzt hamwa schon 2 threads zum thema, nur das sie hinsichtlich der komplexität des spieles doch recht weit ausseranderliegen (maximallösung und "minimal"-lösung. 🙂



  • Ich lasse den hier mal offen, weil es ein ganze anderes Spielkonzept ist. Aber ich muss sagen, mir gefällt es nicht sondernlich! Es wäre ja nur ein stupides umherfliegen nach irgendwelchen Daten, was jeder Computer 10 mal besser kann, als jeder Mensch!

    Ich denke nicht, dass ein Spiel von dem Kalieber, wie Dark Galaxy arg kompliziert ist. Das sind höchstens 15-20 Datenbank Tabellen. Natürlich muss man nicht alles aufeinmal fertig haben, aber langsam auf so ein Ziel hinarbeiten sollte man schon, denke ich.



  • Ja, für einen KI-Wettbewerb scheint mir das reizvoll, aber zum selbst spielen? Also ich weiss ja nich...

    Loggy hat Recht.
    DG ist von der Ablauf-Logik her äusserst simpel gestrickt.
    Sollte keine allzugrosse Schwierigkeit sein das nachzuprogrammieren.
    Vereinfachen muss man da gar nicht.
    (siehe auch anderen Thread)



  • Hi,

    Bitsy hat schon eine Art Protokoll vorgeschlagen, wie die Befehle
    uebertragen werden koennen. Ich finde, dass wir auch genau das als
    erstes implementieren sollten. Denn darauf sollte doch der Rest auf-
    bauen, oder nicht? Was meint ihr dazu? Ein einheitliches Protokoll
    muss auf jeden Fall her, damit jeder der was dazu beitragen will, was
    hat auf das er sich stuetzen kann. Zumindest weiß man dann, wie man
    was uebertragen muss.

    Befreit euren Geist und Postet eure Meinung *g*.

    mfg
    v R



  • Das ist schon mal schlecht, wenn jeder wissen muß, wie er was zu übertragen hat. Wenn man das ganze professionell angeht, muß man für alle User (Programmierer) ein Interface bereit stellen. D.h. eine Klasse wo man nur noch mit send und get Methoden Daten verschickt und empfängt. Fertig. Dann kann eigentlich nichts mehr schief gehen. Es muss dann nur noch Constanten definiert werden, die jeder benutzt. Die Parameter sind ja dann variabel.



  • Das Protokoll ist nun wirklich eine Detail-Frage der Implementierung.
    Erstmal sollte man rausfinden was wir überhaupt machen wollen.



  • noch zum protokoll:
    auf die weise wies angeschrieben ist kann leicht volgendes passieren:
    ein spieler verliert ein oder 2 pakete und ist seit dem immer hinten dran (schon mal einer gta (2) gezockt? da passiert das ziemlich oft ist dann garnicht lustig)

    darum würd ich das über 2 verbindungen laufen lassen:
    eine überträgt ständig die daten der "welt" bzw die positionen&handlungen der einzelnen spieler und veränderungen an der welt, die andere sendet die eigenen befehle. damit bleibt auch collision handling (egal ob das jetzt räumlich oder aktionsmässig ist) beim server was das ganze vereinfacht

    <edit>
    warum poste ich erst und denke dann fertig? 😃
    ich würd mich für die netzwerk programmierung zur verfügung stellen

    [ Dieser Beitrag wurde am 30.04.2002 um 18:07 Uhr von Korbinian editiert. ]



  • Hi,

    @Artchi: Natuerlich eine Klasse oder aehnliches. Aber dennoch muessen
    wir ersteinmal festlegen, wie wir ueberhaupt etwas uebertragen. Das
    andere waere ja auch unnoetig Code. Vielleicht hab ich mich im Posting vorher schlecht ausgedrueckt.

    @scrontch: Ist doch klar, was wir machen wollen. Ein besseres
    DarkGalaxy *g*.

    mfg
    v R



  • Ja, es ist die Frage, ob wir Bitsys vorschlag verfolgen oder den meinigen. Das nächste wäre dann schon die Kommunikation.

    Artchi: Nö, da jeder in einer anderen Sprache seinen Client schreiben will, ist das blödsinnig.

    Ich verstehe nicht, wie es zu kollisionen kommen soll, da ja eh alles Rundenbasiert ist (jede Stunde einen Zug). Und welche Aufträge ich gerade gemacht hat, kann doch keiner außer mir abfragen. Da braucht man sich also überhaupt keine gedanken machen.

    Wie gesagt, den Server übernehme ich komplett in PHP (alleine schon, um irgend einen Server zu finden, auf dem wir es installieren können). Die Kommunikation läuft über HTTP und einer von uns definierten Sprache. Zunächst muss man sich beim Server anmelden, bekommt dann eine ID, mit der man sich jedesmal wieder identifizieren muss. Alles andere läuft so ab, dass man eine Anfrage per POST stellt und dann vom Server eine Antwort bekommt. Es könnte z.B. so aussehen:
    id=[meine ID]&action=build&pID=[meine Planeten ID]&sID=[Gebäude ID]

    und dann kommt entweder 0 zurück, wenn alles Glatt lief oder eine Fehler Id, die wir ja irgendwo definieren können. Oder um die Daten eines Planeten abzufragen:
    id=[meine ID]&action=getdata&pID=[meine Planeten ID]

    Zurück kommt dann sowas:
    Name=[Planeten Name]\n
    freeSpace=[freier Platz]\n
    Buildings=Metal Mines[2], Mineral Mines[2], Outpost[1]

    oder so ähnlich. Die Anfragen in diesem Stil wäre ideal, weil diese Art in PHP schon unterstützt wird.


Anmelden zum Antworten