Deus Figendi: auf einer Map wandern (Spieleprogrammierung)

Beitrag lesen

Nein, nein, das soll schon eine Desktop-Angelegenheit werden, als Browserspiel wäre Python nicht machbar AFAIK. (Es sei denn im Einsatz als serverseitige Skiptsprache, was mir in diesem Fall nichts bringen würde)

Äh ja, ich meinte serverseitig. Also der Client setzt einen Request ab über seine Wunschbewegungs-Richtung, der Server errechnet ob die Bewegung möglich ist, welche Folgen sie hat etc. generiert daraus eine Bild-Ressource und schickt die zurück... oder so.

Muss es denn überhaupt grafisch sein oder reicht für die Schule auch ein »» ASCII-Modus (so wie Rogue)?
Hmm, ASCII-Mode würde mir vielleicht sogar ausreichen, du meinst sowas wie DWARF FORTRESS?

ja

Zur Konkreten Frage: Natürlich müssen sich Karte und Gegenstände mit verschieben. Wenn die Gegenstände relativ zur Karte immer die gleiche Position haben kannst du sie rein grafisch auch direkt auf die Karte malen (soweit Python dafür Module bietet, wovon ich aber ausgehe).
Ja, klar, mit Python kannst du via OpenGL Grafikprogrammierung betreiben. Falls es dich interessiert, OpenGL unter Python

Wie oben erwähnt meinte ich halt Grafik-Ressourcen zu erzeugen.

Im Grunde machst du folgendes:
Position der Karte := Position des Spielers auf der Karte - halber Kartenausschnitt;
Wenn Position des Spielers < Kartenausschnitt/2 dann Position der Karte = 0 und Position der Spielfigut auf dem Kartenausschnitt (nicht auf der Karte) = Position auf der Karte
Wenn Position des Spielers > Karte-Kartenausschnitt/2 dann Position der Kart = max und Position der Spielfigur auf dem Kartenausschnitt = max-Position auf der Karte;

Ah, ok. Nehmen wir mal an, ich nutze ein festes Raster. Die Gegenstände befänden sich dann in mehrdimensionalen Arrays oder sowas?

Das Spiel in einer statischen Map (ohne Scrolling) wäre kein Problem für mich, nur das Scrollen eben macht mir ein paar Sorgen.

Nehmen wir mal folgendes an:

ich habe eine Welt, die in diesem Array gespeichert ist:

hash[0][0] = "x";
hash[0][1] = "x";
hash[0][2] = "x";
hash[1][0] = "x";
hash[1][1] = "x";
hash[1][2] = "x";
hash[2][0] = "x";
hash[2][1] = "x";
hash[2][2] = "t";

wobei x = normaler Boden, t = Gegenstand. Wir haben also eine Welt bestehend aus 3 x 3 Rasterpunkten. nehmen wir weiter an, mein Kartenausschnitt ist 2 Rasterpunkte groß, ich sehe also nur von hash[0][0] bis hash[0][1] und hash[0][0] bis hash[1][0]. Bewege ich mich dann um ein Raster nach Rechts, lasse ich nur den Inhalt des Arrays zeichnen, der mit meiner Position korrespondiert, oder? ist das nicht etwas zu trivial?

Jain.
Also erstmal ja natürlich ist es sotrivial ^^
Zweitens, die Array-Lösung tuts nur bei einem einigermaßen groben Raster. Ein Array von 4000x4000 Feldern ist recht groß, vor allem wenn du jedes Feld belegst. Wenn du das einigermaßen grob rasterst ist das aber imho eine brauchbare Lösung.
Andernfalls würd' ich die Daten vielleicht auslagern. In Dateien oder eine Datenbank oder so, jedenfalls irgendein System, in dem du konkret die Dinge abfragen kannst, die du gerade brauchst "SELECT objects , ground FROM Zeug WHERE x_pos >50 AND x_pos < 100 AND y_pos >20 AND y_pos <70;"
Genauso täten es aber auch Dateien, die entsprechend benannt sind, und die man folglich gezielt öffnen kann.

--
sh:( fo:| ch:? rl:( br:& n4:& ie:{ mo:} va:) de:µ_de:] zu:) fl:( ss:| ls:[ js:(
0 56

auf einer Map wandern (Spieleprogrammierung)

Kleinbonum
  • programmiertechnik
  1. 0
    bleicher
    1. 0
      Kleinbonum
      1. 0
        Deus Figendi
        1. 0
          Kleinbonum
          1. 0
            Deus Figendi
            1. 0
              Kleinbonum
              1. 0
                Felix Riesterer
                1. 0
                  Kleinbonum
  2. 0
    Der Martin
    1. 0
      Kleinbonum
      1. 0
        Ratge Bär
  3. 0
    splinter
    1. 0
      Kleinbonum
      1. 0
        splinter
  4. 0
    Felix Riesterer
    1. 0
      Felix Riesterer
      1. 0
        Tom
        1. 0
          Felix Riesterer
          1. 0
            Kleinbonum
          2. 0
            Tom
            1. 0
              Felix Riesterer
              1. 0
                Kleinbonum
                1. 0
                  Felix Riesterer
      2. 0
        Felix Riesterer
        1. 0
          Tom
          1. 0
            Felix Riesterer
            1. 0
              Felix Riesterer
              1. 0
                Felix Riesterer
            2. 0
              O'Brien
              1. 0
                Felix Riesterer
                1. 0
                  Felix Riesterer
                  1. 0
                    O'Brien
                    1. 0
                      Felix Riesterer
                      1. 0
                        Felix Riesterer
    2. 0
      Kleinbonum
      1. 0
        Felix Riesterer
        1. 0
          Kleinbonum
          1. 0
            Havyrl
        2. 0
          Tom
  5. 0
    Tom
  6. 0

    Nachtrag, Kartenausschnitte anzeigen

    Tom
  7. 0
    Felix Riesterer
    1. 0
      Tom
      1. 0
        Tom
        1. 0
          Felix Riesterer
      2. 0
        Felix Riesterer
    2. 0
      O'Brien
      1. 0
        Felix Riesterer
      2. 0
        Felix Riesterer
        1. 0
          O'Brien
          1. 0
            Felix Riesterer
            1. 0
              O'Brien
              1. 0

                wie auf Schienen

                Felix Riesterer
                1. 0
                  Tom
            2. 0
              Tom