Java飞机小游戏制作简单实现详细小结

本文分享了从技术小白到独立完成Java飞机大战游戏的全过程,涵盖了窗口布局、多线程动画、键盘控制、碰撞检测等关键技术点,附带详细代码注释。

567881@ftJava小游戏开发

Java飞机小游戏制作简单实现小结

本人原来是个技术小白,寒假我跟着高淇老师的Java300集开始自学Java,跟着做了一个飞机大战小游戏,已经实现了飞机的自由移动,炮弹爆炸,飞机死亡,游戏计时等功能,里面应用了一些小游戏开发的常用技术,如:窗口的布局、GameUtil类的图片加载、多线程的内部类实现动画效果、双缓冲技术、键盘控制原理(键盘监听机制来控制运动方向)、利用数组产生大量炮弹、矩形检测、碰撞检测、计时功能等知识,下面我会在代码里面展示,而且注释也会比较详细,希望对有兴趣的朋友有些帮助。

游戏的主窗口

package cn.ft.game;
import java.awt.Color;
import java.awt.Font;
import java.awt.Frame;//使用了双缓冲技术,页面不会闪烁
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Transparency;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.time.Period;
import java.util.Date;

import javax.xml.crypto.Data;

/**
 * 飞机小游戏开发
 * @author ft
 *
 */
public class mygameframe extends Frame {
   
   
	
	/**
	 * 通过路径加载图片
	 */
	Image bg =GameUtil.getImage("images//bg.jpg");
	Image planeimg=GameUtil.getImage("images//plane.png");
	Plane plane=new Plane(planeimg,250,250);//创建plane的对象,可以调用plane里面的方法
    shell[] shells=new shell[60];//创建一个炮弹数组
    Expolde bao;//声明一个爆炸对象
    Date startTime=new Date();//声明游戏开始时间对象
    Date endTime;//声明游戏结束
    int Period;//引入游戏持续时间变量
    
	/**
	 * paint方法的使用
	 */

	@Override
		public void paint(Graphics g) {
   
   
			
			super.paint(g);//表示在原来图像的基础上,再画图
			g.drawImage(bg, 0, 0, null);
			plane.drawSelf(g);//调用plane里面画飞机的方法画飞机
			
			//画所有的炮弹,用数组遍历
			for(int i=0;i<shells.length;i++) {
   
   
				shells[i].draw(g);
		/*
		 * 飞机和炮弹的碰撞检测		
		 */
			boolean peng=shells[i].getRect().intersects(plane.getRect());//碰撞矩形检测
			if (peng) {
   
     //如果发生碰撞
				plane.live=false;
				if(bao==null) {
   
    //因为炮弹爆炸是炮弹会沿着那个轨迹跑,如果不为空,会一直创建新对象,只能显示一张图片
				bao=new Expolde(plane.x,plane.y);//发生碰撞时创建一个爆炸对象
			    endTime=new Date();//创建爆炸结束是的新对象
			    Period=(int)((endTime.getTime()-startTime.getTime())/1000);//计算持续的时间,除以1000是缩小时间值,int为类型强制转换
			    
				}
				
				bao.draw(g);//画出爆炸方法
				
			}
			/*
			 * 计时功能,给出提示
			 */
			if (!plane.live) {
   
   
				Color c=g.getColor();
				g.setColor(Color.GRAY);
				g.setFont(new Font
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值