java复习 做一个简易的飞机游戏

本文记录了使用Java基础实现一个简单的飞机游戏的过程,包括GameUtil工具类、GameObject基类、Plane飞机类、Shell炮弹类、Constant常量类和Explode爆炸效果类的实现。玩家通过键盘控制飞机躲避随机生成并反弹的炮弹,碰撞后游戏结束并显示存活时间。游戏采用AWT和Swing进行GUI设计,通过双缓冲技术解决画面闪烁问题。
摘要由CSDN通过智能技术生成

最近闲来无事复习下java基础,没有特别复杂的功能,一切从简,旨在回顾知识点!!!

游戏效果如下:
在这里插入图片描述
我们通过键盘控制飞机前后移动躲避炮弹,如果碰到炮弹则会爆炸,游戏结束并显示游戏坚持的时间

基本的功能实现

MyGameFrame类

package com.xiaodao.game;

import java.awt.Color;
import java.awt.Font;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Date;


/**
 * 飞机游戏的主窗口
 * @author 刘小叨
 *
 */
public class MyGameFrame extends Frame {
		Image plane = GameUtil.getImage("images/plane.png");
		Image bg = GameUtil.getImage("images/bg.jpg");
		Date startTime = new Date();//游戏起始时刻
		Date endTime;
		int gameTime;
		
		Plane p = new Plane(plane,250,250);
		Shell s = new Shell();
		Shell[] shells = new Shell[50];
		Explode bao;
		@Override
		public void paint(Graphics g) {//自动被调用 g 就是一支画笔
			Color c = g.getColor();
			g.drawImage(bg, 0, 0, null);
			
			p.drawSelf(g);//画飞机
			//画出所有炮弹
			for(int i=0;i<shells.length;i++) {
				shells[i].draw(g);
				
				//飞机和炮弹的碰撞检测
				boolean peng = shells[i].getRect().intersects(p.getRect());
				if(peng) {
					p.live = false;
					if(bao == null) {
					bao = new Explode(p.x, p.y);
					endTime = new Date();
					gameTime = (int)((endTime.getTime()-startTime.getTime())/1000);
					}
					bao.draw(g);
				}
				if(!p.live) {
				g.setColor(Color.red);
				Font f = new Font("宋体",Font.BOLD,50);
				g.setFont(f);
				g.drawString("时间:"+ gameTime + "秒",125,250);
				}
			}
			g.setColor(c);
			
		}
		//帮助我们反复重画窗口
		class PaintThread extends Thread{
			@Override
			public void run() {
				while(true) {
//					System.out.println("窗口画一次");
					repaint();//重画
					
					try {
						Thread.sleep(40);
		
  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值