import java.applet.Applet;
import java.awt.Color;
import java.awt.Event;
import java.awt.Graphics;
import java.awt.Image;
import java.util.Random;
public class Start extends Applet implements Runnable {
static int FensterW=10;
static int FensterH=20;
static GStein Sta [] = new GStein [10];
static Feld cFeld = new Feld(FensterW,FensterH);
int Duch =0;
int TempWert=0;
static boolean Ende=false;
Random dice = new Random(8);
int Punkte=0;
int AnzahlSteine=1;
int Level=0;
Image dbImage;
Graphics dbg;
Thread runner;
long StartZeit=1500;
long Zeit=StartZeit;
public void init() {
setSize((FensterW*20)+1,(FensterH*20)+1+20);
SteinA STA = new SteinA();
STA.setStein(1,1,1,1);
Sta[0] = STA;
SteinB STB= new SteinB();
STB.setStein(0,0,0,2,2,2,0,2,0);
Sta[1] = STB;
SteinC STC= new SteinC();
STC.setStein(0,3,0,0,0,3,0,0,0,3,0,0,0,3,0,0);
Sta[2] = STC;
STB= new SteinB();
STB.setStein(0,4,4,0,4,0,0,4,0);
Sta[3] = STB;
STB= new SteinB();
STB.setStein(5,5,0,0,5,0,0,5,0);
Sta[4] = STB;
STB= new SteinB();
STB.setStein(6,0,0,6,6,0,0,6,0);
Sta[5] = STB;
STB= new SteinB();
STB.setStein(0,0,7,0,7,7,0,7,0);
Sta[6] = STB;
this.setBackground(new Color(0,0,0));
cFeld.setStein(Sta[zufallsZahl()]);
requestFocus();
}
public int zufallsZahl() {
int next = dice.nextInt();
int a=next%7;
TempWert=a;
if(a<0) a = a*(-1);
if(a>6) a=0;
//return Duch++;
return a;
}
public void update (Graphics g)
{
// Initialisierung des DoubleBuffers
if (dbImage == null)
{
dbImage = createImage (this.getSize().width, this.getSize().height);
dbg = dbImage.getGraphics ();
}
// Bildschirm im Hintergrund löschen
dbg.setColor (getBackground ());
dbg.fillRect (0, 0, this.getSize().width, this.getSize().height);
// Auf gelöschten Hintergrund Vordergrund zeichnen
dbg.setColor (getForeground());
paint (dbg);
// Nun fertig gezeichnetes Bild Offscreen auf dem richtigen Bildschirm anzeigen
g.drawImage (dbImage, 0, 0, this);
}
public int neuerStein() {
if(Ende==false) {
if(cFeld.SteinY==0) {
Ende=true;
return 0;
}
Level=(AnzahlSteine/50);
Zeit=StartZeit-(Level*100);
if(Zeit<200) Zeit=200;
Punkte+=cFeld.reihenAbbauen();
cFeld.setStein(Sta[zufallsZahl()]);
return 1;
}
return 0;
}
public void spielEnde() {
Ende=true;
repaint();
}
public boolean keyDown (Event evt, int key) {
switch(key) {
case Event.UP:
cFeld.drehen(0);
repaint();
return true;
case Event.DOWN:
if(cFeld.stepDown()==false) AnzahlSteine+=neuerStein();
repaint();
return true;
case Event.LEFT:
cFeld.stepLeft();
repaint();
return true;
case Event.RIGHT:
cFeld.stepRight();
repaint();
return true;
case Event.ESCAPE:
Punkte=0;
AnzahlSteine=1;
Zeit=StartZeit;
Ende=false;
cFeld.leereFeld();
cFeld.setStein(Sta[zufallsZahl()]);
return true;
case Event.ENTER:
if(Ende==true) {
Punkte=0;
AnzahlSteine=1;
Zeit=StartZeit;
Ende=false;
cFeld.leereFeld();
cFeld.setStein(Sta[zufallsZahl()]);
return true;
}
default:
cFeld.drehen(1);
repaint();
return false;
}
}
public void paint(Graphics screen) {
cFeld.zeichneFeld(screen);
screen.setColor(Color.red);
screen.drawString("Punkte:"+Punkte+" Steine:"+AnzahlSteine+" Level:"+(Level+1),25,18);
// Text ausgeben
if(Ende==true) {
screen.drawString("Spiel Ende!",5,100);
screen.drawString("Für ein neues Spiel drücken Sie",5,120);
screen.drawString("RETURN",5,140);
}
}
public void start() {
if(runner==null) {
runner=new Thread(this);
runner.start();
}
}
public void stop() {
if(runner!=null) {
runner=null;
}
}
public void run() {
Thread thisThread = Thread.currentThread();
while (runner==thisThread) {
if(cFeld.stepDown()==false) AnzahlSteine+=neuerStein();
repaint();
try {
Thread.sleep(Zeit);
} catch (InterruptedException e) {}
}
}
}