Hallo Javascript-Experten,
Vor einiger Zeit hab ich einfach aus Sport begonnen, ein Tetris-Spiel in Javascript zu programmieren. Ich hatte in der Badewanne plötzlich die Idee für die Umsetzung der Steinbewegung in einem Spielgitter. So kam eins zum anderen und fertig war ein Tetris. Das Programmieren von Tetris ist eigentlich nicht schwer, denn das Spiel läßt sich sehr schön in Einzelaufgaben aufteilen. Einzig die Kollisionsabfrage war vielleicht etwas schwieriger.
Zum Problem: Es hat sich ein Bug gezeigt, den ich einfach nicht lokalisieren kann.
Nach längerem Spielen beginnen die Tetrissteine beim "aufsetzen" auf dem Boden bzw. auf den bereits liegenden Steinen zusätzliche Segmente zu bekommen. Ein quadratischer Stein z.B. hat ja 2 x 2 Segmente. Diese Segmente werden beim "aufsetzen" in ein Array geschrieben, in dem alle liegenden Steine vermerkt werden. Der Bug bewirkt, dass aber mehr als 4 Segmente eingetragen werden, z. B. 6 Segmente. Dieser Fehler tritt aber nicht sofort auf. Zu Beginn funktioniert das Spiel tadellos. Erst nach einer Weile (oft so nach ca. 8000-10000 Punkten bzw. ca. 2 Minuten) beginnt dieser Effekt. Es kann sich eigentlich nicht um einen Logikfehler handeln, denn der würde ja bereits zu Beginn des Spiels auftreten. Andererseits tritt der Fehler in allen getesteten Browsern auf (Mozilla, IE, Opera) unter WIN2000.
Der kritische Punkt im Programm ist der Zeitpunkt, wo die Koordinaten des aktuellen Steins (var piece) beim "aufsetzen" (m==1) in das Array v eingetragen werden, welches alle liegenden Steine speichert. Dies passiert in der Funktion fillValue(). Der Fehler der dann auftritt ist für mich aber nicht zu entdecken. Die entsprechenden Funktionen sehen sauber aus.
Bitte testet das Spiel ein paar Mal, vielleicht findet ihr etwas raus. Dazu müsstet ihr allerdings den Programm-Code analysieren. Wer sich für das Thema interessiert, nimmt die Mühe ja vielleicht auf sich. Ich hab versucht den Code einigermaßen gut zu kommentieren.
Viele Grüße
Max Smily