JAVA实训贪吃蛇源代码

来源:互联网 发布:java write 编辑:程序博客网 时间:2024/05/18 22:12

这是计算机专业的学生实训时常用到的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();}}