贪吃蛇小游戏java实现代码分析
贪吃蛇的小游戏,网上的代码比较多,今天周五,在教研室没啥事做,在电脑中发现了一个贪吃蛇的小游戏,于是就看了下实现的源码,发现别人写的代码确实挺好的,自己也是边加注释边进行理解的去看别人实现的游戏源码,发现还是挺有意思的。自己花了一个下午的时间看了源码,也加了一点小小的功能,于是,不写篇博客觉得对不起自己也,哈哈哈。
此游戏代码的思路非常的清晰,也相当好理解,没有太多难的地方,不过有很多值得学习的地方,因为,这份源码中,对java.awt
包中的很多类的很多方法都进行了应用,值得我们去学习,去深刻的理解。
注释写的非常非常详细,相信只要学了一点java的人都会看的懂。
话不多说,贴源码。
Yard类
import java.awt.Color;
import java.awt.Font;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
/**
* 这个类代表贪吃蛇的活动场所
* @author wuranghao
* @version 1.0
*/
public class Yard extends Frame {
/*
* 画图的线程
* */
PaintThread paintThread = new PaintThread();
private boolean gameOver = false; //游戏是否结束
/**
* 行数
*/
public static final int ROWS = 30;
/*
* 列数
* */
public static final int COLS = 30;
/*
* 活动区域大小
* */
public static final int BLOCK_SIZE = 15;
//设置显示字属性
private Font fontGameOver = new Font("宋体", Font.BOLD, 50);
//分数
private int score = 0;
/*
* 记录开始时候的时间
* */
private long beginTime=0;
/*
*实例化Snake和Egg的对象
* */
Snake s = new Snake(this);
Egg e = new Egg();
/*
* 抽象类 Image 是表示图形图像的所有类的超类。
* 必须以特定于平台的方式获取图像。
* */
Image offScreenImage = null;
/*
* 此函数的功能是:设置窗口的大小、位置、可见,以及点击事件和键盘事件,最后开启了绘图线程
* */
public void launch() {
/*
* 指定窗口的位置,窗口的左上角的位置为(90,10).是相对父窗口的相对位置
* */
this.setLocation(90, 10);
/*
* 设定窗口的大小
* 宽度width:COLS*BLOCK_SIZE
* 高度hight:ROWS*BLOCK_SIZE
* */
this.setSize(COLS * BLOCK_SIZE, ROWS * BLOCK_SIZE);
/*
* 为窗口添加监听器
* */
this.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
/*
* 将窗口设置可见
* */
this.setVisible(true);
/*
* 为窗口添加键盘事件
* */
this.addKeyListener(new KeyMonitor());
new Thread(paintThread).start();
}
public static void main(String[] args) {
Yard y=new Yard();
y.beginTime=System.currentTimeMillis();
y.launch();
}
/*
* 将变量gameOver设置为true,使得在paint()函数中将使得线程停止
* */
public void stop() {
gameOver = true;
}
@Override
public