当前位置:文档之家› 贪吃蛇代码详解

贪吃蛇代码详解

}
}
private class SnakeDriver implements Runnable{
/*线程*/
public void run() {
// TODO Auto-generated method stub
while(life){
move();//不停的调用move的方法
/*循环所有的监听器*/
for(int x=0;x<Global.WIDTH;x++){
for(int y=0;y<Global.HIGHT;y++){
if(rocks[x][y]==1){
g.setColor(Color.DARK_GRAY);
g.fill3DRect(x*Global.CELL_SIZE,y*Global.CELL_SIZE, 20, 20, true);
public void newFood(Point p){
this.setLocation(p);
}
public boolean isSnakeEatFood(Snake snake){
System.out.println("Food's isSnakeEatFood");
return this.equals(snake.getHead());
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
//蛇死的方法
void die(){
life=false;
}
private int [][] rocks=new int[Global.WIDTH] [Global.HIGHT];
//得到一个随机的食物坐标
}
}
}
public boolean isSnakeEatRock(Snake Snake){
System.out.println("Ground's isSnakeEatRock");
for(int x=0;x<Global.WIDTH;x++){
for(int y=0;y<Global.HIGHT;y++){
//如果老方向与新方向方向相反,则把新方向赋值给老方向
if(!(newDirection+oldDirection==0)){
oldDirection=newDirection;
}
//1.去尾巴
oldTail=body.removeLast();
//得到现在蛇头的坐标向上y-1,下y+1,左x-1,右x+1
}
}
//墙类
package TanChiShe;
import java.awt.Color;
import java.awt.Graphics;
import java.util.Random;
public class Ground {
private int [][] rocks=new int[Global.WIDTH] [Global.HIGHT];
}
//获得蛇头的坐标
public Point getHead(){
return body.getFirst();
}
//把按的方向赋值给newDirection
public void changeDirection(int direction){
System.out.println("Snake's changeDireciton");
if(l!=null){
this.listeners.add(l);
}
}
}
//食物类
package TanChiShe;
import java.awt.Color;
import java.awt.Graphics;
import java.util.Random;
public class Food extends Point{
}
}
}
}
}
//格子类
packageTanChiShe;
publicclassGlobal {
publicstaticfinalintCELL_SIZE=20;
publicstaticfinalintWIDTH=20;
publicstaticfinalintHIGHT=20;
}
//point类
packageTanChiShe;
if(rocks[x][y]==1&&x==Snake.getHead().x&&y==Snake.getHead().y){
return true;
}
}
}
return lse;
}
public void drawMe(Graphics g){
System.out.println("Ground's drawMe");
public Point getPoint(){
for(int x=0;x<Global.WIDTH;x++){
for(int y=0;y<Global.HIGHT;y++){
rocks[x][0]=1;
rocks[x][Global.HIGHT-1]=1;
rocks[0][y]=1;
rocks[Global.WIDTH-1][y]=1;
for(SnakeListener l:listeners){//依次调用所有的元素
l.snakeMoved(Snake.this);//依次调用snakeMoved的方法
}
try {
Thread.sleep(300);//睡眠1秒既是1秒move一次
} catch (InterruptedException e) {
public class Snake {
//因为常量与蛇有关,所以定义在蛇的类里面
public static final int UP=1;
public static final int DOWN=-1;
public static final int LEFT=2;
public static final int RIGHT=-2;
private int oldDirection,newDirection;
private Point oldTail;
public static boolean life;
//LinkedList有getFirst(),getLast()和removeLast()的方法
private LinkedList<Point> body=new LinkedList<Point>();
publicPoint setLocation(Point p){
//蛇类
package TanChiShe;
import java.awt.Color;
import java.awt.Graphics;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.Random;
import java.util.Set;
int x=body.getFirst().x;
int y=body.getFirst().y;
//用老方向判断
switch(oldDirection){
case UP:
y--;
if(y<0){
y=Global.HIGHT-1;
}
break;
case DOWN:
if(y>Global.HIGHT){
}
return new Point(x,y);//必须加new不然报错
}
//启动线程的方法
public void start(){
new Thread(new SnakeDriver()).start();
}
public void addSnakeListener(SnakeListener l){
newDirection=direction;
}
//蛇吃到食物,就是把老尾巴加上
public void eatFood(){
System.out.println("Snake's eatFood");
body.addLast(oldTail);
}
//蛇吃到自己,就是蛇头和身体坐标重复
public boolean isEatBody(){
if(objinstanceofPoint){
Point p=(Point)obj;
if(this.x==p.x&&this.y==p.y){
returntrue;}
}
if(obj==null){
returnfalse;
}
if(obj==this){
returntrue;
}
returnfalse;
}
}
public void drawMe(Graphics g){
g.setColor(Color.RED);
System.out.println("Snaek's drawMe");
for(Point p:body){
g.fill3DRect(p.x*Global.CELL_SIZE, p.y*Global.CELL_SIZE, Global.CELL_SIZE, Global.CELL_SIZE, true);
相关主题