贪吃蛇java源代码

/*
* 这个是贪虼蛇的窗体部分
*/
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Map extends JFrame implements KeyListener,Runnable{

//小蛇
Snake snake;
//食物的坐标
int foodx,foody;
//初始窗口的大小
private final int window_width=500;
private final int window_height=400;
//食物的存在性
public boolean food=true;
public static void main(String[] args){
new Map();
}
public Map(){
//小蛇进入到窗体里面
snake=new Snake();

this.addKeyListener(this);
//为进入窗体的小蛇开启一个线程
new Thread(this).start();

this.setVisible(true);
this.setSize(this.window_width, this.window_height);
this.validate();
this.setResizable(false);
this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);
}
public void paint(Graphics g){
//设置背景
g.setColor(Color.black);
g.fillRect(0, 0, this.getWidth(), this.getHeight());
g.setColor(Color.white);
g.drawRect(50, 50, this.getWidth()-100, this.getHeight()-100);
//若食物被吃掉,产生新的食物坐标
if(food){
this.produceFood(this.snake);
}
//美味的食物
g.setColor(Color.orange);
g.fillRect(this.foodx,this.foody,10, 10);
//可爱的小蛇
g.setColor(Color.green);
for(int i=0;ig.fillRect(this.snake.x[i], this.snake.y[i], 10, 10);
}
//你的得分
g.setColor(Color.white);
g.drawString("得分:"+(this.snake.length-3)*10, 50,40);
}
//产生食物
public void produceFood(Snake s){
//食物的产生位置是否合法
boolean foodNotOK=true;
while(foodNotOK){
//System.out.println("1111111111");
int i;
this.foodx=((int)(Math.random()*(this.getWidth()-110)/10))*10+50;
this.foody=((int)(Math.random()*(this.getHeight()-110)/10))*10+50;
for(i=0;iif(this.foodx==s.x[i]&&this.foody==s.y[i]){
break;
}
}
if(i==s.length){
foodNotOK=false;
}
}
}
@Override
public void keyPressed(KeyEvent arg0) {
// TODO Auto-generated method stub
if(arg0.getKeyCode()==KeyEvent.VK_RIGHT&&this.snake.direction!=2){
this.snake.direction=1;
this.snake.speed=100;
}else if(arg0.getKeyCode()==KeyEvent.VK_LEFT&&this.snake.direction!=1){
this.snake.direction=2;
this.snake.speed=100;
}else if(arg0.getKeyCode()==KeyEvent.VK_DOWN&&this.snake.direction!=4){
this.snake.direction=3;
this.snake.speed=100;
}else if(arg0.getKeyCode()==KeyEvent.VK_UP&&this.snake.direction!=3){
this.snake.direction=4;
this.snake.speed=100;
}
}
@Override
public void keyReleased(KeyEvent arg0) {
// TODO Auto-generated method stub
if(arg0.getKeyCode()==KeyEvent.VK_RIGHT||arg0.getKeyCode()==KeyEvent.VK_LEFT||arg0.getKeyCode()==KeyEvent.VK_DOWN||arg0.getKeyCode()==KeyEvent.VK_UP){
this.snake.speed=500;
}
}
@Override
public void keyTyped(KeyEvent arg0) {
// TODO Auto-generated meth

od stub

}
@Override
public void run() {
// TODO Auto-generated method stub
while(this.snake.isLive){
try {
Thread.sleep(this.snake.speed);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//安照小蛇的长度设定其速度,最大速度为200
if(this.snake.length>12&&this.snake.length<23&&this.snake.speed>400){
this.snake.speed=400;
}
if(this.snake.length>22&&this.snake.length<33&&this.snake.speed>400){
this.snake.speed=300;
}
if(this.snake.length>32&&this.snake.speed>400){
this.snake.speed=200;
}
//小蛇前进
this.snake.move();
//检查一下是否撞墙或自己
this.snake.check();
//小蛇吃食物与食物的存在的关系
food=this.snake.eat(this.foodx, this.foody);
//重绘窗体
this.repaint();

}
JOptionPane.showMessageDialog(this, "小蛇死了,游戏结束...");
}
}

/*************************************************************************************************************************/

/**
* 这个是小蛇的身体
*/

public class Snake{

//可爱小蛇的爬行速度
int speed=500;
//可爱小蛇前进的方向,1向东,2向西,3向南,4向北,开始默认的是向东
int direction=1;
//可爱小蛇的体节
int x[];
int y[];
//可爱小蛇的体长,初始长度是3
int length=3;
//可爱小蛇的生死情况
boolean isLive=true;
public Snake(){
//小蛇最多有200个体节
x=new int[200];
y=new int[200];
//初始小蛇的位置
for(int i=this.length-1;i>=0;i--){
y[i]=50;
x[i]=(2-i)*10+50;
}
}
//小蛇前进
public void move(){
for(int i=this.length-1;i>0;i--){
x[i]=x[i-1];
y[i]=y[i-1];
}
if(direction==1){
x[0]+=10;
}else if(direction==2){
x[0]-=10;
}else if(direction==3){
y[0]+=10;
}else{
y[0]-=10;
}
}
//检查小蛇是否撞墙或撞自己
public void check(){
//检查是否撞墙
if(this.x[0]<50||this.x[0]>440||this.y[0]<50||this.y[0]>340){
this.isLive=false;
}
//检查是否撞自己
for(int i=1;iif(this.x[0]==this.x[i]&&this.y[0]==this.y[i]){
this.isLive=false;
}
}

}
//是否吃掉了食物
public boolean eat(int x,int y){
if(this.x[0]==x&&this.y[0]==y){
this.length++;
return true;
}else{
return false;
}
}
}

相关文档
最新文档