在学习的过程中,特别是学习程序,如果看懂了一个程序,但是你如果不亲自去写一遍这个程序,你还是不算是真正会制作这个程序的,本人利用闲暇时间,参考别人的程序,自己做出了一个贪吃蛇游戏的程序:
程序设计的过程是:
一:抽象出:贪吃蛇游戏中的各个对象(界面,游动的蛇,)
二.一步一步的理顺游戏的逻辑,从设计对象开始,
三,修改自己的程序,使其尽量少地bug出现
总结:我自己制作的贪吃蛇程序,没有运用到缓存技术所以有时候会看到屏闪,同时因为没有考虑到frame的边框效果,导致frame的边框挡住了游戏的边界部分!
从游戏的界面部分开始设计起:
设计游戏的格子->游动的蛇->被吃的豆豆->再回过头来实现游戏的主题逻辑部分,以下是设计出来后的程序代码,本人才疏学浅,如有错误,请不吝赐教!
游戏的主题逻辑部分(包括界面对象的设计)
/**
* @Title: Aboard.java
* @Package com.csdn.ranplus.snake
* @Description: TODO
* @author: Rainplus
* @date: Feb 15, 2014 9:46:41 PM
* @version: V1.0
*/
package com.csdn.ranplus.snake;
import java.awt.Color;
import java.awt.Font;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
/**
* @author: Rainplus
* @Description: 游戏活动的界面;
* @date: Feb 15, 2014 9:46:41 PM
*/
public class Aboard extends Frame {
public static final int ROWS = 30;
public static final int COLS = 30;
public static final int BLOCK_SIZE = 15;
private static Aboard singleton;
private static Snake s = new Snake();
private static Bean b = new Bean();
private MoveThread moveThread = new MoveThread();
private static boolean gameOver = false;
private static int score;
/**
* @Title: start
* @Description: 使用单例模式的入口点
* @throws:
*/
public static void start() {
if (singleton == null) {
singleton = new Aboard();
}
singleton.draw();
}
/**
* @Title: draw
* @Description: 画出贪吃蛇的界面大小;
* @throws:
*/
private void draw() {
this.setTitle("Rainplus自学版 贪吃蛇");
this.setSize(ROWS * BLOCK_SIZE, COLS * BLOCK_SIZE);
this.setLocation(200, 200);
this.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
this.setVisible(true);
this.addKeyListener(new KeyMonitor());
new Thread(moveThread).start();
}
/**
* @Title: paint
* @Override:
* @Desc