JAVA实训贪吃蛇源代码

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值