Hallo
Das ist sicher machbar, ich habe sowas ähnliches kürzlich mit JavaScript und canvas gebastelt.
"Mitscrollen" hatte ich noch nicht gemacht, dafür aber Zoom. Ob man nun »»einen Layer hat (Gegenstände) oder mehrere (Fußboden und Gegenstände) ist »»denke ich nicht so wild. Allerdings habe ich "Felder" gemacht, keine »»freie Positionierung... macht aber auch keinen großen Unterschied.
Von Python hab ich gerade extrem wenig Ahnung, aber wolltest du das im Browser machen oder auf dem Desktop?
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)
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? Geniales Spiel übrigens... Allerdings hätte ich trotzdem gerne eine Karte (im Sinne von Fantasy-Karte wie aus dem Herrn-der-Ringe-Buch oder sowas). Und diese Karte müsste ja logischerweise mitscrollen, klar.
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
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?
Aber wie gesagt: Mach doch ASCII-Grafik, dann erledigt sich das »»Kollision-Problem wie von selbst "Wenn Spielerposition = »»Gegenstandsposition dann Kollision"
Mit Kollisonsabfragen habe ich mich schon beschäftigt, allerdings nur Kugelkollisionen. Komplexere Gegenstände gibt es in meiner Welt nicht. Wie du schon gesagt hast:
"Wenn Spielerposition = Gegenstandsposition dann Kollision"
Kleinbonum