这是计算机专业的学生实训时常用到的JAVA 贪吃蛇实训项目
package myPackage;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class Snake {
int length=3;
int[] x=new int[200];
int[] y=new int[200];
}
@SuppressWarnings("serial")
public class MySnake extends JFrame implements Runnable
{
int direction=1;//运动方向标志,1左2右3上4下
int sleeptime=1000;//等待时间
Image imgSnake;//蛇身租车人能够图片 像素20*20
int foodX,foodY;//食物的X,Y坐标
Image imgFood;//食物图片 20*20
Snake s=new Snake();
int score=0;//得分
boolean gameOver=false;//游戏结束标志
MySnake()
{
super("XXXX");// 标题
for(int i=0;i<s.length;i++)
{
s.x[i]=200;
s.y[i]=200;
}
imgSnake=getToolkit().getImage("1.jpg");//图片诶20*20
imgFood=getToolkit().getImage("2.jpg");
setBackground(Color.pink);
randomFood();
setBounds(100,100,400,420);
setLayout(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
addKeyListener(new KeyAdapter()
{
public void keyPressed(KeyEvent e)
{
switch(e.getKeyCode())
{
case KeyEvent.VK_LEFT:
if(direction!=2)//当蛇右转的时候 不能马上往左
{
direction=1;
repaint();
}
break;
case KeyEvent.VK_RIGHT:
if(direction!=1)
{
direction=2;
repaint();
}
break;
case KeyEvent.VK_UP:
if(direction!=4)
{
direction=3;
repaint();
}
break;
case KeyEvent.VK_DOWN:
if(direction!=3)
{
direction=4;
repaint();
}
}
}
});
}
void randomFood()//随机产生食物位置
{
foodX=(int)(Math.random()*18)*20+20;
foodY=(int)(Math.random()*18)*20+20;
}
public void paint(Graphics g)
{
g.clearRect(0, 0, 400, 400);//清楚屏幕
g.drawImage(imgFood, foodX, foodY, this);
for(int i=0;i<s.length;i++)
g.drawImage(imgSnake, s.x[i],s.y[i],this);//画蛇
g.setColor(Color.pink);
g.drawString("你的得分为:" +score, 0,400);
}
public void run()//使用多线程
{
while(true)
{
switch(direction)
{
case 1:
s.x[0]-=20;//当向左时,蛇头x坐标每次减少20
break;
case 2:
s.x[0]+=20;
break;
case 3:
s.y[0]-=20;
break;
case 4:
s.y[0]+=20;
}
repaint();
if((s.x[0]<=0)||(s.x[0]>=380)||(s.y[0]<=0)||(s.y[0]>=380))//判断是否碰壁
{
gameOver=true;
}
if(gameOver)break;
for(int i=1;i<s.length;i++)//判断是否碰到自身
{
if((s.x[0]==s.x[i]&&(s.y[0]==s.y[i])))
{
gameOver=true;
break;
}
}
if(gameOver)break;
if((s.x[0]==foodX&&(s.y[0]==foodY)))//吃到食物
{
s.length++;
score+=50;
randomFood();//产生新的食物
}
for(int i=s.length-1;i>=1;i--)//使蛇蜿蜒曲折
{
s.x[i]=s.x[i-1];
s.y[i]=s.y[i-1];
}
try
{
Thread.sleep(200);
}
catch(InterruptedException e)
{
e.printStackTrace();
}
}
}
public static void main(String[] args)
{
Thread t;
MySnake mySnakeTest=new MySnake();
t=new Thread(mySnakeTest);
t.start();
}
}