guck dir einfach nochmla meinen kommentierten code an, den ich hier im thread schon gepostet habe.
das ist der komplette schleifendurchlauf für den
aktuell zu zeichnenden Bereich.
Also der Bereich der im moment auf dem Display zu sehen ist.
Wenn du aber zb ganz rausscrollst, sodass die ganze map nurnoch einen kleinen Teil des Bildschirms einnimmt, läge ja noch viel mehr im zu sehenden Bereich.
Aber für diesen Bereich ist die Map ja garnicht mehr definiert. (x oder y größer als array_max_x (bzw y))
deswegen musst du mein anzeigen überprüfen ob das was du anzeigen willst überhaupt vorhanden ist;)
zum laden:
jeder spiel läd doch wohl nur einmal (ganz am anfang) die map
halt ins array.. das ist der sinn eines arrays

du hast die "anzeigeschleife" benutzt um da (wenn auch nur temporär) allen tiles die "gras-id" zuzuweisen.
Du sollst aber nur einmal am anfang deine Map zuweisen und dann in der main-loop halt immer das anzeigen durchführen.