Hallo Aya!
Das Problem, das Du hier ansprichst, hatte ich auch einmal, nur halt nicht in ganz so großem Umfang
Ich kann Dir jetzt nicht garantieren, dass das der beste Lösungsweg ist, es ist halt nur so, wie ich es probiert habe ...
Angenommen, es sind immer 20 x 20 Felder sichtbar. Wenn nicht alle Felder ständig miteinander in Verbindung stehen müssen, ist es übertrieben, alle 100.000 Felder in den Speicher zu laden, obwohl Du maximal 400 (20x20) benötigst.
Ein kleiner Tipp vorweg: Speicher Deine Karten NICHT als TextFile ab, weil Du den Dateicursor nicht mehr gezielt positionieren kannst.
Eine gute Alternative dazu wäre eine binäre Datei mit 1 Byte Größe / Feld.
Dies gilt jetzt natürlich nur, wenn Du auch nur 1 Byte / Feld benötigst.
Solltest Du mehr Informationen speichern wollen, würde ich Dir die Verwendung der sogenannten TileSet-Methode empfehlen, damit kannst Du immens viel Speicher sparen (und zwar nicht nur im Arbeitsspeicher, sondern auch auf der Festplatte, was wiederum kürzere Lade- u. Speicherzeiten mit sich ziehen würde!)
So weit, so gut. Ich werde jetzt wieder auf Dein ursprüngliches Problem näher eingehen.
Es ist auch nicht besonders schlau, immer nur die Felder in den Speicher zu laden, die derzeit auf den Bildschirm gezeichnet werden müssen.
Das würde bedeuten, dass Du jedesmal, wenn der Spieler um ein Feld (in welche Richtung auch immer) scrollt, die aktuellen Felder abspeichern und die neuen Felder laden müsstest (bzw. die Felder, die aus dem Bildschirmbereich verschwinden speichern und die "neuen" Felder zu laden)...
Ich hatte eine 500x500 große Karte, jeweils 16x16 Felder angezeigt (Größe eines Feldes war 32x32 Pixel). Meine Engine lud jeweils 100x100 Teile in den Speicher, und zwar so, dass die 16x16 "Bildschirmfelder" möglichst zentriert waren.
Entfernte sich der Spieler zu weit vom Mittelpunkt der 100x100-Grenze (so etwa nur mehr 10 Felder vom Ende des Arrays entfernt), wurde die Position des 1. Feldes (sprich: linke obere Ecke) verschoben und die Felder neu geladen.
Mit einer Binärdatei ist das soweit kein Problem, weil Du den Dateizeiger direkt auf ein Element positionieren kannst.
Grundsätzlich gilt: Lade möglichst nur einmal von der Festplatte, weil der Zugriff auf HD um einiges langsamer läuft als der Zugriff auf RAM.
Ein 10.000 x 10.000 großes Byte-Array würde 100.000 Bytes aufbrauchen, das sind umgerechnet etwa 98 Megabyte !!! Und das allein für die Karte !!!
Ich schätze mal, Du hast noch Einheiten und sonstige Objekte auch, die sicher auch schon genug verschlingen.
Wie schnell genau der Festplattenzugriff beim Auslesen von 1000 Bytes vonstatten geht, kann ich Dir nicht sagen. Zum ersten, weil ich es nie gemessen habe, und zum zweiten, weil das sehr stark vom System abhängt, auf dem Du diesen Test machst, also würden Dir meine Werte wahrscheinlich sowieso nicht weiterhelfen ...
Ich hoffe, ich konnte Dir etwas weiterhelfen ... wenn Du noch irgendwelche Fragen hast ... well, feel free to ask
Ich wünsche Dir viel Spaß und Erfolg mit Deinem Spiel!