[java]代码库
package org.crazyit.ball;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;
import java.awt.Dimension;
import java.awt.Image;
import java.awt.Graphics;
import java.awt.Color;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyListener;
import java.awt.event.KeyEvent;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.io.IOException;
/*
 * 游戏界面
 */
public class BallFrame extends JFrame {
	// 定义JPanel的宽度
	private final int BALLPANEL_WIDTH = 307;
	// 定义JPanel的高度
	private final int BALLPANEL_HEIGHT = 400;
	// 定义画板
	private BallPanel ballPanel = null;
	// 定义档板
	// private Image stick = null;
	// 设置档板x坐标
	private int stickX = -1;
	// 创建一个BallService实例
	private BallService service = null;
	// 定义一个timer
	Timer timer = null;
	/**
	 * 默认构造器
	 */
	public BallFrame() throws IOException {
		super();
		// 初始化
		initialize();
	}
	/*
	 * 初始化界面
	*/
	public void initialize() throws IOException {
		// 设置窗口的标题
		this.setTitle("弹球");
		// 设置为不可改变大小
		this.setResizable(false);
		// 设置背景为黑色
		this.setBackground(Color.BLACK);
		// 获取画板
		ballPanel = getBallPanel();
		// 创建BallService实例
		service = new BallService(this, BALLPANEL_WIDTH, BALLPANEL_HEIGHT);
		// 定义每0.1秒执行一次监听器
		ActionListener task = new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				// 开始改变位置
				service.run();
				// 刷新画板
				ballPanel.repaint();
			}
		};
		// 如果timer不为空
		if (timer != null) {
			// 重新开始timer
			timer.restart();
		} else {
			// 新建一个timer
			timer = new Timer(100, task);
			// 开始timer
			timer.start();
		}
		this.add(ballPanel);
		// 增加事件监听器
		KeyListener[] klarr = this.getKeyListeners();
		if (klarr.length == 0) {
			// 定义键盘监听适配器
			KeyListener keyAdapter = new KeyAdapter() {
				public void keyPressed(KeyEvent ke) {
					// 改变档板的坐标
					service.setStickPos(ke);
				}
			};
			this.addKeyListener(keyAdapter);
		}
	}
	public BallPanel getBallPanel() {
		if (ballPanel == null) {
			// 新建一个画板
			ballPanel = new BallPanel();
			// 设置画板的大小
			ballPanel.setPreferredSize(new Dimension(BALLPANEL_WIDTH,
					BALLPANEL_HEIGHT));
		}
		return ballPanel;
	}
	// 定义一个JPanel内部类来完成画图功能
	public class BallPanel extends JPanel {
		/**
		 * 重写void paint( Graphics g )方法
		 * 
		 * @param g
		 *            Graphics
		 * @return void
		 */
		public void paint(Graphics g) {
			// 画图
			service.draw(g);
		}
	}
}
[源代码打包下载]
初级程序员
by: 天之子 发表于:2017-11-15 08:48:34 顶(1) | 踩(0) 回复
好家伙
回复评论