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

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

被折叠的 条评论
为什么被折叠?



