suche ansatz zu "finde einen leeren planeten für einen neuen spieler"

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • suche ansatz zu "finde einen leeren planeten für einen neuen spieler"

    Hallo,

    ja ich progge an nem browsergame rum, ja es ist das 1635423ste erfolglose game was es gibt und ja, ich progge das um php besser zu verstehen weil ich in unserer firma die homepage betreuen soll.

    da mir das proggen aber so ein spass macht würde ich zumindest das game einmal funktionsfertig hinkriegen, keine grafik, kein sound, nur tabellen und text.

    un zu meinem problem:

    ich habe eine datenbank die galaxien heisst da stehen leere unbewohnte sonnensysteme drinnen. zu beginn erst mal ein 20x20 universum.

    was ich nun suche ist eine idee, ich denke da seit 2 tagen drüber nach komme aber auf keinen ansatz, wie lokalisiere ich in dieser datenbank ein unbewohntes sonnensystem das sich möglichst dich am zentrum befindet?

    zusatzinfo: es gibt 2 datenbanken, eine galaxies und eine planeten. in galaxies sind quasi nur die sonnensysteme definiert mit position x,y welche sonne sie haben und wieviele planeten das sonnensystem hat. diese informationen reichen um eine weltraumkarte anzuzeigen (diese funktoniert). in planeten stehen dann die besiedelten planeten drinnen, also die x,y position, wer ihn besitzt, welche gebäude, rohstoffe etc. werte die also in galaxies alle null wären. da man davon ausgehen kann das bei weitem nicht alle planeten besiedelt (bzw besiedelbar) sind, halte ich das für den geschicktesten aufbau.

    grundproblem: wie finde ich die letzte besiedelte welt? einfach den planeten-datenbankeintrag mit der letzten erstellung suchen funktioniert nicht, es könnte ja ein spieler einen anderen planeten ganz aussen am rand besiedelt haben (mit kolonieschiff) und dann findet er garkein planet mehr.

    folgende ansätze führten ins leere:
    einfach links oben anfangen x+1, wenn x = 10, y+1 x=1 und wieder eine zeile durchsuchen. nein, ich möchte gerne vom zentrum aus anfangen, sonst haben die ersten spieler nur eine richtung zum ausbreiten und das finde ich doof. ausserdem dauert das bei (utopischen) 1000 betreits besiedelten welten viel zu lange.

    spiralförmig von innen nach aussen gehen scheitert ebenfalls an der zeit.
    die position des letzten automatisch zugewiesenen heimatplaneten separat speichern könnte helfen... und dann von da aus suchen aber auch das ist nicht so einfach wie es scheint.

    mein einziger ansatz wäre: ich muss den planeten in der galaxie datenbank irgendwie eine reihenfolge beibringen. evtl ein weiteres feld das den abstand zum zentrum angibt?

    ich weis nimmer weiter... vieleicht hat hier jemand ne idee?

  • #2
    Hallo,

    immer, wenn du von Galaxie sprichst, meinst du ein Planetensystem, oder? Das sind zwei verschiedene Sachen.

    Wenn ich es richtig verstanden habe, stehen bei dir nur die besiedelten Planeten in der DB. Warum eigentlich? Wenn gleich alle drin stünden, müsstest du nicht raten, welcher noch frei ist.

    Den ganzen Hintergrund mit der Besiedelung und was da passiert habe ich aber noch nicht durchschaut. Wenn du weitere Tipps möchtest, solltest du das irgendwie nachvollziehbarer beschreiben.

    Gruß,

    Amica
    Zuletzt geändert von AmicaNoctis; 09.06.2010, 10:34.
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

    Kommentar


    • #3
      Kannst du dein DB-Schema mal in der Form Tabelle(Spalte1, Spalte2, ...) angeben (für alle relevanten Tabellen)? Ich verstehe deine textuelle Erklärung nämlich nicht und bin vermutlich nicht der einzige, dem das so geht.

      Ich verstehe es bisher so:
      galaxie(id, sonne, anzahl_planeten, x, y, ...)
      planet(galaxie_id, name, besitzer, x, y, ...)

      Die Tabelle galaxie sollte besser sonnensystem heißen; hat Amica bereits erwähnt.
      In der Tabelle planet hast du nur besiedelte Planeten drin? Wo hast du denn dann die unbesiedelten gespeichert? Amica erwähnte ebenfalls, dass beide Planetenmengen, besiedelte und unbesiedelte, besser in einer gemeinsamen Tabelle gespeichert werden sollten. Wäre dies bspw. die Tabelle planet, könntest du am Wert in der Spalte besitzer erkennen, ob ein Planet besiedelt ist. Wert Null heißt kein Besitzer, also unbesiedelt.

      Das Problem, die nächste unbesiedelte Galaxie zu finden, ist dann ganz einfach lösbar. Du joinst galaxie und planet, filterst die Einträge heraus, die keinen Besitzer haben, sortierst aufsteigend nach der Distanz zum Ausgangspunkt und wählst das erste Element aus der Ergebnisliste. Das ist die nähste Galaxie mit einem unbesiedelten Planeten.
      Die Distanz zum Ausgangspunkt ermittelst du mit
      dist = sqrt(|xA - xG| + |yA - yG|)
      wobei (xA,yA) die Koordinaten des Ausgangspunktes
      und (xG,yG) die Koordinaten der Galaxie sind. Eventuell solltest du stattdessen die Koordinaten des Planeten benutzen – geht aus deiner Beschreibung nicht eindeutig hervor.

      Kommentar


      • #4
        Zitat von onemorenerd Beitrag anzeigen
        Die Tabelle galaxie sollte besser sonnensystem heißen
        Noch besser: planetensystem oder planetary_system; „Sonnensystem“ ist nur der Eigenname unseres Planetensystems, so wie „Milchstraße“ der Name unserer Galaxie ist.

        Ja, sorry, aber ich bin Harald-Lesch-Fan und kann solche Sachen nicht so falsch stehen lassen.
        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
        Super, danke!
        [/COLOR]

        Kommentar


        • #5
          Zitat von AmicaNoctis Beitrag anzeigen
          Ja, sorry, aber ich bin Harald-Lesch-Fan und kann solche Sachen nicht so falsch stehen lassen.


          EDIT

          Damit ich auch wieder a bissl onTopic schreib:
          Wie meine Vorredner auch schon sagten, sollten auch die unbesiedelten Planeten bereits in die Tabelle, schon allein eigentlich wegen der Tatsache, dass sie ja da sind und nicht erst mit einer Besiedelung entstehen.

          Weiterhin würde ich eine weitere Tabelle ins Spiel bringen - nämlich die Sterne selbst, an die du dann die Planeten bindest.

          Nochmal EDIT
          Vergiss die weitere Tabelle - ich hab mal wieder was falsch verstanden weil du ja eigentlich gar keine Galaxien hast, sondern eben nur Planetensysteme eine Anzahl von Planetensystemen.
          Zuletzt geändert von Quetschi; 09.06.2010, 17:00.
          Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
          Schön - etwas Geschichte kann ja nicht schaden.
          Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

          Kommentar


          • #6
            Sry. Doppelpost.
            Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
            Schön - etwas Geschichte kann ja nicht schaden.
            Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

            Kommentar


            • #7
              ich danke erstmal an alle antworten.

              ich habs jetzt so gelöst:

              alle besiedelbaren planeten sind in einer datenbank. die galaxien datenbank fliegt raus. die informationen sind jetzt bei den planeten mit drinnen.

              dazu ein feld das den abstand zum zentrum der galaxie beschreibt. der gute phytagoras...

              nun mach ich einfach ne abfrage in etwa so:

              SELECT * FROM planets WHERE owner=0 ORDER BY distance LIMIT 0,10

              so bekomme ich die 10 leeren dem zentrum an dichtesten planeten und muss dann nurnoch einen aussuchen.


              danke für die ideen
              Zuletzt geändert von Tamelon; 12.06.2010, 14:33.

              Kommentar


              • #8
                Zitat von Tamelon Beitrag anzeigen
                dazu ein feld das den abstand zum zentrum der galaxie beschreibt.
                Du meinst sicher den Abstand zum Zentralgestirn des Planetensystems.
                [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                Super, danke!
                [/COLOR]

                Kommentar

                Lädt...
                X