Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Browsergame : Objekte auf einer Karte

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Browsergame : Objekte auf einer Karte

    Hallo leute,

    ich würde mir mal gerne ein paar Ideen anhören, wie man Unterschiedliche objekte auf einer Karte anlegen könnte, besser gesagt wie die Datenbank dazu aussehen könnte.

    Folgende Situation:

    Aktuell habe ich meine Karte(n) als Array in einer .php Datei abgespeichert, das Ganze sieht dann so aus:

    PHP-Code:
    // erste zahl = y, zweite zahl = x
    $map[0][0] = 'gras';
    $map[0][1] = 'gras';
    $map[0][2] = 'land';
    $map[0][3] = 'forest1';

    $map[1][0] = 'forest2';
    $map[1][1] = 'gras';
    $map[1][2] = 'city1';
    $map[1][3] = 'gras';

    $map[2][0] = 'gras';
    $map[2][1] = 'gras';
    $map[2][2] = 'gras';
    $map[2][3] = 'gras';

    $map[3][0] = 'gras';
    $map[3][1] = 'gras';
    $map[3][2] = 'gras';
    $map[3][3] = 'gras'
    die namen sind css Klassen namen, über Ajax request hole ich mir die klassen namen aus einem bestimmten bereich raus und ersetze die div klassen mit den klassen aus dieser php datei.

    funktioniert alles wunderbar, nun möchte ich einige Objekte auf der Karte Positionieren. Die Objekte wären:

    1) Begehbare blöcke(Ich möchte nicht dass die Karte immer rechteckig ist, desswegen kann ich als begrenzung nicht die Karten größe verwenden, außerdem sollten einige wege vorgegeben sein innerhalb der karte, desswegen sollen diese Blöcke einige bereiche sperren so dass man zb durch ein bestimmtes gebiet durchgehen MUSS)

    2) Monster (Für fast jedes Feld werden Monster zugewiesen, angenommen ich komme auf ein feld und auf diesem feld befinden sich 10 Monster, wenn ich einen geötet habe, sollen nur noch 9 zur auswahl stehen. wenn eine andere person auf dem selben feld ein monster getötet hat, darf ich nur noch 8 monster sehen. Nach einer bestimmten zeit soll ein monster gespawn/wiedererweckt werden. wahrscheinlich eine zeit in der DB abspeichern wann das letzte monster getötet wurde)

    3) Portal (Mit den Portalen soll es möglich sein auf andere Maps zu kommen, zb Dungeons oder Städte)

    4) Rohstoffe/Schatztruhen(Bestimmte Items sollen zufällig auf der karte plaziert werden in einem bestimmten intervall, und wieder verschwinden sobald ein spieler das gegenstand genommen hat)

    Also die begehbaren blöcke, müsste ich an die kartenpositionen fix anlegen, Rohstoffe/Schatztruhen dafür könnte ich eine Tabelle anlegen zb:

    mapItems
    ID | posX | posY | itemId | Amount

    beim aufheben des gegenstands, einfach datensatz löschen und in die Inventar tabelle übertragen.

    Portale könnte ich auch fix an das MapArray dranhängen oder extra ein array für die Karte erstellen mit Portalen an welcher koordinate die sich befinden und wohin man sich mit den bewegen kann.

    Aber wie könnte ich das mit den Monstern umsetzen? Habt ihr da irgendwelche ideen? wenn ihr fragen habt, fragt

    MFG
    apt-get install npm -> npm install -g bower -> bower install <package> YOLO [URL]https://www.paypal.me/BlackScorp[/URL] | Mein Youtube PHP Kanal: [url]https://www.youtube.com/c/VitalijMik[/url]

  • #2
    Also auf den ersten Blick würde ich das in der Richtung machen:

    Felder
    id|x|y|typ|begehbar

    Monster
    id|type|...

    Felder_Monster
    feld_id|monster_id


    usw.

    Kommentar


    • #3
      naja die Felder stehen ja eigentlich nicht in der Datenbank drin. Ich habe mir erstmal das so überlegt

      monsters
      ID | name | picture | hitpoints | manapoints | .......
      1 | orc | orc.jpg | 100 | 100 | ....

      mapobjects
      ID | posX | posY | monsterId | expired
      1 | 0 | 0 |1 |1270038298
      1 | 0 | 0 | 1 |1270038313

      in der expired spalte schreibe ich jedes mal ein wert rein, wenn das monster getötet wurde. und lasse mir alle monster von der position x/y anzeigen bei den der expired datum weniger als 10-20 minuten her ist. sowas in der art.

      aber dann kann ich die tabelle nicht mapobjects nennen, sondern muss dann mapmonsters oder so hießen. und wenn ich items an die map dranhänge muss ich weitere tabelle anlegen. und bei jeder bewegung müsste ich dann 2 tabellen überprüfen und wenn 100 spieler sich gleichzeitig bewegen dann werden 200 requests an den server geschickt. eigentlich müsste ich die tabellen irgendwie zusammen tun.
      apt-get install npm -> npm install -g bower -> bower install <package> YOLO [URL]https://www.paypal.me/BlackScorp[/URL] | Mein Youtube PHP Kanal: [url]https://www.youtube.com/c/VitalijMik[/url]

      Kommentar


      • #4
        naja die Felder stehen ja eigentlich nicht in der Datenbank drin. Ich habe mir erstmal das so überlegt
        Was spricht dagegen?
        dann werden 200 requests an den server geschickt
        Es werden noch wesentlich mehr Requests sein (Punkte abfragen, Login-Status, etc.). Du kannst doch die Items und Monster zusammen mit den Feldern per JOIN auf einmal holen.

        Kommentar


        • #5
          Zitat von xm22 Beitrag anzeigen
          Es werden noch wesentlich mehr Requests sein (Punkte abfragen, Login-Status, etc.).
          jep ich weis das ist halt das problem zz . ich will so wenig anfragen an den server schicken wie möglich(beantwortet auch die frage wieso nicht alles in der db steht sondern einige sachen in einer php datei drin sind)
          Zitat von xm22 Beitrag anzeigen
          Du kannst doch die Items und Monster zusammen mit den Feldern per JOIN auf einmal holen.
          das ist das problem. also angenommen ich würde 3 tabellen anlegen in jeder tabelle werden erstmal NUR die einzelnen objekte defeniert werden also sowas:

          monsters
          ID | name | level | healpoints | damage| picture | ....
          1 | goblin | 1 | 10 | 1 | goblin.gif | ..

          portals
          ID | sourceX | sourceY | sourceMap | destX | destY | destMap
          1 12 | 13 | 'worldMap' | 5 | 5 | 'dungeon1'

          items
          ID | name | picture | .....
          1 | 'Schatztruhe' | schatz.gif

          invalidPositions
          ID | mapName | x | y
          1 | 'worldMap' | 10 | 12

          charakters
          ID | name | x | y | healtpoint | picture | ...
          1 | 'Mein cooler char'| 10 | 12| 1000 | male_human.gif

          das wären dann alle werte die auf einer karte eventuell angezeigt werden müssten. alles eventuell denn nicht jedes feld muss zwangslaufig monster haben oder items oder andere spieler oder unbegehbare positionen.

          problem liegt halt daran wie ich das ganze mit einer JOIN anweisung zusammensetzen müsste oder eventuell noch eine weitere n:m tabelle anlegen? wie könnte ich es am besten realisieren?
          apt-get install npm -> npm install -g bower -> bower install <package> YOLO [URL]https://www.paypal.me/BlackScorp[/URL] | Mein Youtube PHP Kanal: [url]https://www.youtube.com/c/VitalijMik[/url]

          Kommentar


          • #6
            Zitat von BlackScorp Beitrag anzeigen
            jep ich weis das ist halt das problem zz . ich will so wenig anfragen an den server schicken wie möglich(beantwortet auch die frage wieso nicht alles in der db steht sondern einige sachen in einer php datei drin sind)
            hi ,
            falls du gar keine anfragen zwecks map daten die sich im grunde nicht ändern,
            an die datenbank schicken willst dann "MUSST" du Memcached benutzen,
            hab mir deine seite kurz angekuckt, war aber glaub zu dumm mich anzumelden

            also folgendes, du sparst zugriffe auf daten die sich nicht ständig ändern, in dem du daten aufm server cache (Ram) mittels memcached speicherst
            (falls du mal millionen von usern hast, dann ist das sehr sinnvoll) , das gilt auch für user daten die sich nicht ständig ändern etc.
            (und du kannst das auch händeln falls es sich ändert, dann löscht du den cache zu dem user sozusagen.

            ein anderer punkt ist, das du für die 'grass' strings etc., ne var nutzen soltest erstmal, weil wenn dein spiel funzt, willst ja das es in verschiedenen sprachen läuft, da ist es schwierig das multisprachig zu machen wenn du überlall die texte ändern musst.
            sei mir net böss, des sind jetzt nur tipps ok
            (ich hoff ich hab nix verzapft was du eh schon kennst )

            grüsle

            Kommentar


            • #7
              es geht auch ohne Memcach, die Map einfach als array abspeichern, aber meinem Fall ging es nicht um die Map, die habe ich bereits umgesetzt und funktioniert alles. Es ging mir eigentlich darum wie ich am besten 3 unterschiedliche arten von objekten zu einer tabelle hinzufüge.

              wegen dem namen 'gras'. dieser name wird auf dem Layout garnicht auftauchen(als text oder so), der name 'gras' ist ein css klassen name. wenn ich zb
              <div class="meineMap gras"></div>
              anzeige, so sehe ich ein div mit gras bild drin, das gleiche auch für city, forest usw. es sind nur die namen die in der css datei drin stehen.
              wegen den Multilanguage , dafür habe ich bereits gesorgt, das ist kein problem.
              apt-get install npm -> npm install -g bower -> bower install <package> YOLO [URL]https://www.paypal.me/BlackScorp[/URL] | Mein Youtube PHP Kanal: [url]https://www.youtube.com/c/VitalijMik[/url]

              Kommentar


              • #8
                serialisierung vielleicht?
                (ausserdem nie und nimmer daten einfach nur in files speichern)

                du wie gesagt, das war nu mein erster post hier, ich muss mich erstmal rumkucken und so
                wollte dir nur tipps geben, du bist dessen erhaben, das ist auch gut so

                Kommentar


                • #9
                  Zitat von jomee Beitrag anzeigen
                  serialisierung vielleicht?
                  nein, es geht mir um das ERD, ob ich es so wie oben beschrieben ist, so lassen könnte und halt bei jeder bewegung auf 3 tabellen zugreifen werde, oder ob man es nciht irgendwie kombinieren sollte. wobei ich denke ein

                  SELECT * FROM
                  tabelle1,tabelle2,tabelle3
                  WHERE userid = xyz

                  eigentlich garnicht so schlimm wäre eventuell eine mapObjects tabelle und dann halt

                  SELECT * FROM
                  mapObjects,mapMonsters,mapPortals,player
                  WHERE mapObjects.posX = mapMonster.posX and mapObjects.posY = mapMonster.posY ... AND mapObject.posX = $_GET['x']

                  müsste eigentlich halb so wild sein.. ich probier es mal und später werde ich es sehen
                  apt-get install npm -> npm install -g bower -> bower install <package> YOLO [URL]https://www.paypal.me/BlackScorp[/URL] | Mein Youtube PHP Kanal: [url]https://www.youtube.com/c/VitalijMik[/url]

                  Kommentar


                  • #10
                    das ist doch so ok oder nicht?
                    (so ganz hab ich das nicht verstanden glaub, muss nachdenken,
                    wo liegt das problem, du kannst ja mit einem select auf 3 tables zugreifen,
                    wie schneller willst das denn machen? viel effizienter gehts wohl nicht...)

                    Kommentar


                    • #11
                      ja ich denke das müsste funktionieren.

                      zu deinem edit: wieso sollte man nie daten in einer datei speichern? es sind doch php files und von außen nicht liesbar, falls man jemals den pfad herausfinden könnte.

                      PHP-Code:
                      so ganz hab ich das nicht verstanden glaubmuss nachdenken,
                      wo liegt das problemdu kannst ja mit einem select auf 3 tables zugreifen,
                      wie schneller willst das denn machen
                      naja ich denke mit einem select auf 3 tabellen könnte klappen, hatte davor an 3 selects gedacht also jedesmal auf eine tabelle zugreifen, werte holen, wieder auf eine tabelle zugreifen usw.. das war der denkfehler. ich denke vorerst hat sich das thema dann für mich erledigt. danke für die tipps von allein

                      MFG
                      apt-get install npm -> npm install -g bower -> bower install <package> YOLO [URL]https://www.paypal.me/BlackScorp[/URL] | Mein Youtube PHP Kanal: [url]https://www.youtube.com/c/VitalijMik[/url]

                      Kommentar

                      Lädt...
                      X