import java.awt.*;
import java.applet.*;
import java.awt.event.*;
import java.util.*;
public class Snake extends Applet implements Runnable
{
private final int WIDTH = 10, HEIGHT = 10;//Standard-Einstellung
private final Point[] STARTCOORDS = new Point[]{//Standard-Einstellung
new Point(50,195),
new Point(40,195),
new Point(30,195),
new Point(20,195),
new Point(10,195),
new Point(0,195)};
private int score=0,start;
private boolean end=false;
private Point direction = new Point(10,0);//Standard-Einstellung
private Thread move = new Thread(this);
private Point food = new Point(10+10*(int)(Math.floor((Math.random()*39))),10+10*(int)(Math.floor((Math.random()*39))));
private Vector coords = new Vector();
private Image startimage;
public void start()
{
if(start!=0) move.start();
}
public void stop() {
move.stop();
}
public void destroy() { }
public void run()
{
for(int x=0;x<STARTCOORDS.length;x++)
{
coords.add(x,STARTCOORDS[x]);
}
for(;;)
{
Point schwanz = (Point) coords.get((coords.size()-1));
for(int y=(coords.size()-1);y>0;y--)
{
coords.remove(y);
coords.insertElementAt(((Point)coords.get(y-1)),y);
}
Point punkt = (Point) coords.firstElement();
int horizontal,vertikal;
horizontal = (int) punkt.getX() + (int) direction.getX();
vertikal = (int) punkt.getY() + (int) direction.getY();
punkt = new Point(horizontal,vertikal);
coords.remove(0);
coords.insertElementAt(punkt,0);
int kopfx = (int)((Point)coords.get(0)).getX(), kopfy = (int)((Point)coords.get(0)).getY();
int foodx = (int) food.getX(), foody = (int) food.getY();
if((kopfx >=(foodx-5) && kopfx <= (foodx+5))&&(kopfy >=(foody-5) && kopfy <= (foody+5)))
{
food = new Point(10+10*(int)(Math.floor((Math.random()*37))),10+10*(int)(Math.floor((Math.random()*37))));
coords.add(schwanz);
score++;
}
for(int x=1;x<coords.size();x++)
{
int teilx = (int)((Point)coords.get(x)).getX();
int teily = (int)((Point)coords.get(x)).getY();
if((kopfx >=(teilx-5) && kopfx <= (teilx+5))&&(kopfy >=(teily-5) && kopfy <= (teily+5)))
{
end=true;
repaint();
stop();
}
}
if((kopfx>=390)||(kopfy>=390)||(kopfx<=0)||(kopfy<=0))
{
end=true;
repaint();
stop();
}
repaint();
try
{
Thread.sleep(100-score);
}
catch(Exception e)
{
//Nothing
}
}
}//run end
public void paint (Graphics g)
{
g.setColor(Color.red);
if(start==1)
{
for(int x=0;x<coords.size();x++)
{
g.fillOval((int)((Point)coords.get(x)).getX(),(int)((Point)coords.get(x)).getY(),WIDTH,HEIGHT);
}
g.setColor(Color.green);
g.fillRect((int) food.getX(),(int) food.getY(),10,10);
g.setColor(Color.black);
g.drawString("Sie haben " + score + " Punkte !",20,10);
if(end) g.drawString("Gameover! Zum Neustarten bitte die Leertaste drücken",20,200);
}
else if(start==0)
{
//g.drawString("Start",60,60);
g.drawImage(startimage,0,0,this);
}
else{
g.drawString("Error...",20,20);
}
}
public boolean keyDown(Event e,int key)
{
if(key==Event.LEFT)
{
if((((int) direction.getX()==10))&&(((int) direction.getY()==0))) direction = new Point(0,-10);
else if((((int) direction.getX()==-10))&&(((int) direction.getY()==0))) direction = new Point(0,10);
else if((((int) direction.getX()==0))&&(((int) direction.getY()==-10))) direction = new Point(-10,0);
else if((((int) direction.getX()==0))&&(((int) direction.getY()==10))) direction = new Point(10,0);
}
else if(key==Event.RIGHT)
{
if((((int) direction.getX()==10))&&(((int) direction.getY()==0))) direction = new Point(0,10);
else if((((int) direction.getX()==-10))&&(((int) direction.getY()==0))) direction = new Point(0,-10);
else if((((int) direction.getX()==0))&&(((int) direction.getY()==-10))) direction = new Point(10,0);
else if((((int) direction.getX()==0))&&(((int) direction.getY()==10))) direction = new Point(-10,0);
}
else if((key==32)&&(start==0))
{
start=1;
start();
}
-------- [b]else if((key==32)&&(start==1)&&(end))
--------{
-------- destroy();
-------- init();
--------}[/b]
return true;
}
public void init()
{
this.requestFocus();
MediaTracker bilderladen = new MediaTracker(this);
startimage = getImage(getCodeBase(), "snake.jpg");
bilderladen.addImage(startimage,0);
try
{
bilderladen.waitForAll();
}
catch(Exception e)
{
//nothing
}
start=0;
}//init end
}//class End