JAVA游戏《坦克大战》(一)

JAVA游戏《坦克大战》(一)

完成效果图

这是使用java完成的一个小窗体游戏,目前已实现八方位移动,炮弹发射,定时生成敌军坦克生成且可以自行移动,坦克及炮弹的碰撞的检测,我在这里总结一下游戏的制作过程及使用的技术。

游戏场景布局

游戏的整体都是使用图片进行加载展示的,图片可以上网找并进行ps处理,也可以简单的使用纯背景颜色搭建一个画面简单的游戏。

public class tankedz extends Frame{
	private static final long serialVersionUID = 1L;
	private tankedz tc = this;
	//在外面定义窗体的大小,方便后期调整
	static int  width=1200;static int  height=800;
	//背景图片与坦克的图片的加载
	Image zhutk = Toolkit.getDefaultToolkit().getImage("img/ztk50.png");
	Image desk = Toolkit.getDefaultToolkit().getImage("img/caopin.jpg");
    //绘制场景
    public void paint(Graphics  g){
    	fps++;
    	g.drawImage(desk, 0, 0, this);//绘制图片
    	g.setColor(Color.white);//字体颜色
    	Font font = new Font("等线", Font.BOLD, 14); //设置字体样式
        g.setFont(font);
        mytank.draw(g);
        //显示游戏信息
        g.drawString("坦克数量:" + tankes.size(), 10, 50);
    	g.drawString("炮弹数量:"+missiles.size(),10,70);
    	g.drawString("爆炸数量:"+baoes.size(),10,90);
    }

	//生成窗口
	private void launchFrame(){
		this.setLocation(450,150);//窗口位置
		this.setSize(width,height);//窗口大小
		this.setTitle("坦 克 大 战  │ by 丘 秋");//标题栏文字
		this.addKeyListener(new Keynote());
		//禁止窗口改变大小
		this.setResizable(false); 
		setVisible(true);
		//启动线程
		new Thread(new PaintThread()).start();
	} 
	
	//线程重画
	//通过线程不断的重绘使游戏画面不断刷新
	private class PaintThread implements Runnable{
		public void run() {
			while(true){
				try {
					repaint();
					Thread.sleep(33);//线程睡眠
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
		}
	}
}

通过以上方法就能简单的创建出游戏窗体与背景了

上面比较重要的方法是创建线程进行画面的刷新重绘,在游戏过程中坦克的移动就是通过不断重绘所实现的。

解决画面闪烁问题

在游戏运行起来后,如果刷新频率过高会出现画面闪烁的想象,这是因为上一个画面还未绘制完成下一个画面已经开始绘制了,特别是在后面坦克移动的时候闪烁现象会更加的严重,要解决这个问题就需要用到画面缓存,将要绘制的内容先加载到一张图片中再将这个图片显示出来。

//在类中再定义一个变量
Image offScreenImage = null;

//在绘制前将内容加载到一张图片中
public void update(Graphics g){
  	if(offScreenImage == null){
  		offScreenImage=this.createImage(width, height);
  	}
  	Graphics gOffScenn = offScreenImage.getGraphics();
  	paint(gOffScenn);
  	g.drawImage(offScreenImage,0,0,this);
}

窗口关闭事件

在生成窗口时还需要重写窗口的关闭事件,将程序停止写入关闭事件,不然关闭窗口后程序是仍然在运行的需要手动的终止程序才会停止。

//写在launchFrame中
this.addWindowListener(new WindowAdapter() {
	public void windowClosing(WindowEvent e) {
		System.exit(0);
	}
});

你可能感兴趣的:(JAVA)