var Hoch = 20; var Breit = 15; var MaxGeschwindigkeit = 500; var MinGeschwindigkeit = 50; var TimerID; var XPos = 0; var YPos = 0; var Grafik; var Drehung; var AktFigur; var LoeschFigur; var LoeschX; var LoeschY; var Abgesetzt; var Punkte; var Geschwindigkeit; var Steine; var Figuren; var Spielfeld; function InitTetris() { Steine = new Array(6); for(var i = 0; i < 6; i++) { Steine[i] = new Image(); } Steine[0].src = "spiele/tetris/leer.jpg"; Steine[1].src = "spiele/tetris/rb.jpg"; Steine[2].src = "spiele/tetris/java.jpg"; Steine[3].src = "spiele/tetris/gruen.jpg"; Steine[4].src = "spiele/tetris/rot.jpg"; Steine[5].src = "spiele/tetris/gelb.jpg"; Figuren = Array(7); Figuren[0] = new Array(">####", " #> #> #> #", ">####", " #> #> #> #"); Figuren[1] = new Array("##>##", "##>##", "##>##", "##>##"); Figuren[2] = new Array("###> # ", "##>#>#", "#>###", " #> #>##"); Figuren[3] = new Array("###>#", "#>#>## ", " #>###", "##> #> #"); Figuren[4] = new Array("##> ##", " #>##>#", "##> ##", " #>##>#"); Figuren[5] = new Array(" ##>## ", "#>##> #", " ##>##", "#>##> #"); Figuren[6] = new Array("###> #", "#>##>#", " #>###", " #>##> #"); Spielfeld = new Array(Hoch + 1); for(var y = 0; y <= Hoch; y++) { Spielfeld[y] = new Array(Breit); } } function ReihenWegkuerzen() { var hy, x, y; var Entfernen; var i = Hoch * Breit - 1; var AddPunkte = 10; for(y = Hoch - 1; y >= 0; y--) { Entfernen = true; for(x = 0; x < Breit; x++) { if(!Spielfeld[y][x]) { Entfernen = false; break; } } if(Entfernen) { for(hy = y - 1; hy >= 0; hy--) { for(x = 0; x < Breit; x++) { Spielfeld[hy + 1][x] = Spielfeld[hy][x]; document.images[x + (hy + 1) * Breit].src = document.images[x + hy * Breit].src; } } for(x = 0; x < Breit; x++) { Spielfeld[0][x] = false; document.images[x].src = Steine[0].src; } y++; Punkte += AddPunkte; AddPunkte += 10; if(Geschwindigkeit > MinGeschwindigkeit) { Geschwindigkeit -= 25; document.MyForm.SpeedFeld.value = (MaxGeschwindigkeit - Geschwindigkeit) / 1 + 10 + ' km/h'; } } } document.MyForm.PunkteFeld.value = Punkte; } function Passt(XPos, YPos, Drehung) { var i, x, y; var Figur; var Ergebnis = true; x = XPos; y = YPos; Figur = Figuren[AktFigur][Drehung]; for(i = 0; i < Figur.length; i++) { if((Figur.charAt(i) == '#') && (y >= 0)) { if(Spielfeld[y][x] || (x < 0) || (x >= Breit)) { Ergebnis = false; break; } } else if(Figur.charAt(i) == '>') { y++; if(y >= Hoch) { Ergebnis = false; break; } x = XPos - 1; } x++; } return Ergebnis; } function FigurHoehe(Figur) { var Ergebnis = 1; for(var i = 0; i < Figur.length; i++) { if(Figur.charAt(i) == '>') { Ergebnis++ } } return Ergebnis; } function Bewegen(Richtung) { if(Passt(XPos + Richtung, YPos, Drehung)) { XPos += Richtung; Abgesetzt = false; ZeigeStein(); } } function Drehen(Richtung) { var NeuDrehung = (Drehung + 4 + Richtung) % 4; if(Passt(XPos, YPos, NeuDrehung)) { Drehung = NeuDrehung; Abgesetzt = false; ZeigeStein(); } } function Ab() { clearTimeout(TimerID); FigurFaellt(); } function ZeigeStein(Setzen) { var i, x, y; var Zeichen; if(LoeschX > -3) { x = LoeschX; y = LoeschY; for(i = 0; i < LoeschFigur.length; i++) { Zeichen = LoeschFigur.charAt(i); if(Zeichen == '#') { if(y >= 0) { document.images[x + y * Breit].src = Steine[0].src; } } else if(Zeichen == '>') { y++; x = LoeschX - 1; } x++; } } x = XPos; y = YPos; for(i = 0; i < Figuren[AktFigur][Drehung].length; i++) { Zeichen = Figuren[AktFigur][Drehung].charAt(i); if(Zeichen == '#') { if(y >= 0) { document.images[x + y * Breit].src = Steine[Grafik].src; if(Setzen) { Spielfeld[y][x] = true; } else if(Spielfeld[y + 1][x] || Spielfeld[y][x]) { Abgesetzt = true; } } } else if(Zeichen == '>') { y++; x = XPos - 1; } x++; } LoeschFigur = Figuren[AktFigur][Drehung]; LoeschX = XPos; LoeschY = YPos; } function FigurFaellt() { if(Abgesetzt) { LoeschX = -7; ZeigeStein(true); AktFigur = -1; Abgesetzt = false; document.MyForm.PunkteFeld.value = ++Punkte; ReihenWegkuerzen(); } if(AktFigur < 0) { AktFigur = Math.floor(Math.random() * 77) % 7; Grafik = Math.floor(Math.random() * 55) % 5 + 1; Drehung = 0; LoeschX = -7; YPos = -1; XPos = Math.floor((Breit - Figuren[AktFigur][0].indexOf('>')) / 2); if(!Passt(XPos, YPos, Drehung)) { alert("Leider Game over!"); return; } } YPos++; ZeigeStein(false); TimerID = setTimeout("FigurFaellt()", Geschwindigkeit); } function NeuesSpiel() { var x, y; var i = 0; for(y = 0; y < Hoch; y++) { for(x = 0; x < Breit; x++) { document.images[i++].src = Steine[0].src; Spielfeld[y][x] = false; } } for(x = 0; x < Breit; x++) { Spielfeld[Hoch][x] = true; } Abgesetzt = false; AktFigur = -1; Punkte = 0; Geschwindigkeit = MaxGeschwindigkeit; document.MyForm.SpeedFeld.value = '10 km/h'; document.MyForm.PunkteFeld.value = 0; TimerID = setTimeout("FigurFaellt()", 100); }