【Java】Java小游戏之Shoot游戏源码及详解

2024-06-14 01:32

本文主要是介绍【Java】Java小游戏之Shoot游戏源码及详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【Java】Java小游戏之Shoot游戏源码及详解


Shoot游戏是模仿微信中打飞机小游戏,这个游戏虽然简单,但通过这个游戏小项目,可以练习很多小的知识点,提高对面向对象的理解,还能提高逻辑思维能力。总之,好处多多,下面我将对游戏的结构及代码进行详细说明:

游戏运行状态界面:

1)游戏中类的结构图:

2)游戏步骤01:

1.class FlyingObject{image,width,height,x,y}
2.interface Enemy{int getScore();}
3.interface Award{DOUBLE_FILE,LIFEint getType();}
4.class Airplane extends 1 implements 2{speedAirplane(){}重写getScore()}
5.class Bee extends 1 implements 3{xSpeed,ySpeed,awardTypeBee(){}重写getType()}
6.class Bullet extends 1{speedBullet(int x,int y){}}
7.class Hero extends 1{life,doubleFire,images,indexHero(){}}
8.class ShootGame extends JPanel{WIDTH,HEIGHTbackground,start,pause,gameoverairplane,bee,bullet,hero0,hero1hero(Hero)flyings(FlyingObject[])bullets(Bullet[])ShootGame(){初始化对象}static{}重写paint(g){画背景图paintHero(g);paintFlyingObjects(g);paintBullets(g);}paintHero(g){} //画英雄机paintFlyingObjects(g){} //画敌人paintBullets(g){} //画子弹main(){...frame.setVisible(true);}}

3)游戏步骤02:

1.敌人入场的实现步骤:1)main(){ game.action(); }2)action(){...run(){ //10毫秒定时执行enteredAction(); //敌人入场repaint();}}3)int index = 0;enteredAction(){ //10毫秒index++;if(index%40==0){  //40*10毫秒FlyingObject one = nextOne(); //创建一个敌人对象flyings = Arrays.copyOf(flyings,flyings.length+1); //扩容flyings[flyings.length-1] = one; //将敌人对象添加到敌人数组中}}4)nextOne(){生成0到19间的随机数为0时return new Bee();否则return new Airplane();}
2.飞行物走一步的实现步骤:1)FlyingObject----抽象方法step();2)Airplane,Bee,Bullet,Hero---重写step()3)action(){run(){enterAction();stepAction();repaint(); //重画}}4)stepAction(){遍历所有敌人,调用step()遍历所有子弹,调用step()hero.step();}
3.子弹入场的实现步骤:1)Hero---shoot()英雄机发射子弹2)action(){run(){...shootAction(); //发射子弹repaint();}}3)int shootIndex = 0;shootAction(){ //10毫秒走一次shootIndex++;if(shootIndex%30==0){ //300毫秒调用Hero的shoot()得到发射出的子弹数组bs将bullets扩容将bs追加到bullets数组中--System.arraycopy()}}
4.英雄机随着鼠标移动的实现步骤:1)Hero---moveTo(int x,int y)2)action(){MouseAdapter l = new MouseAdapter(){重写MouseMoved(){获取鼠标的x和yhero.moveTo(x,y); //移动}};this.addMouseMotionListener(l);this.addMouseListener(l);run(){...}}
5.子弹和敌人碰撞的实现步骤:1)FlyingObject---shootBy(Bullet b)2)Hero----addDoubleFire(),addLife()3)action(){run(){...bangAction(); //检查碰撞repaint();}}4)bangAction(){遍历所有子弹,将子弹传给bang()方法}5)bang(Bullet b){ //1发子弹与所有敌人撞遍历所有敌人,获取每一个敌人f判断f是否与b撞上了若撞上了:5.1)得分或得奖励5.1.1)得到被撞敌人对象5.1.2)判断是敌人还是奖励若是敌人则增分若是奖励则得奖励类型判断不同的奖励类型:增命或增火力值5.2)将被撞对象从flyings中删除5.2.1)将被撞敌人与最后一个元素交换(追尾并绕圈)5.2.2)缩容---删除最后一个元素(被撞的对象)}

4)游戏步骤03:

1.画分和画命的实现步骤:1)hero---getLife()获取命2)paint(g){......paintScore(g); //画分和命}3)paintScore(g){设置颜色g.setColor(...)设置字体g.setFont(...)画分g.drawString(...);画命g.drawString(...);}
2.删除越

这篇关于【Java】Java小游戏之Shoot游戏源码及详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1058999

相关文章

Java五子棋之坐标校正

上篇针对了Java项目中的解构思维,在这篇内容中我们不妨从整体项目中拆解拿出一个非常重要的五子棋逻辑实现:坐标校正,我们如何使漫无目的鼠标点击变得有序化和可控化呢? 目录 一、从鼠标监听到获取坐标 1.MouseListener和MouseAdapter 2.mousePressed方法 二、坐标校正的具体实现方法 1.关于fillOval方法 2.坐标获取 3.坐标转换 4.坐

Spring Cloud:构建分布式系统的利器

引言 在当今的云计算和微服务架构时代,构建高效、可靠的分布式系统成为软件开发的重要任务。Spring Cloud 提供了一套完整的解决方案,帮助开发者快速构建分布式系统中的一些常见模式(例如配置管理、服务发现、断路器等)。本文将探讨 Spring Cloud 的定义、核心组件、应用场景以及未来的发展趋势。 什么是 Spring Cloud Spring Cloud 是一个基于 Spring

Javascript高级程序设计(第四版)--学习记录之变量、内存

原始值与引用值 原始值:简单的数据即基础数据类型,按值访问。 引用值:由多个值构成的对象即复杂数据类型,按引用访问。 动态属性 对于引用值而言,可以随时添加、修改和删除其属性和方法。 let person = new Object();person.name = 'Jason';person.age = 42;console.log(person.name,person.age);//'J

java8的新特性之一(Java Lambda表达式)

1:Java8的新特性 Lambda 表达式: 允许以更简洁的方式表示匿名函数(或称为闭包)。可以将Lambda表达式作为参数传递给方法或赋值给函数式接口类型的变量。 Stream API: 提供了一种处理集合数据的流式处理方式,支持函数式编程风格。 允许以声明性方式处理数据集合(如List、Set等)。提供了一系列操作,如map、filter、reduce等,以支持复杂的查询和转

Java面试八股之怎么通过Java程序判断JVM是32位还是64位

怎么通过Java程序判断JVM是32位还是64位 可以通过Java程序内部检查系统属性来判断当前运行的JVM是32位还是64位。以下是一个简单的方法: public class JvmBitCheck {public static void main(String[] args) {String arch = System.getProperty("os.arch");String dataM

详细分析Springmvc中的@ModelAttribute基本知识(附Demo)

目录 前言1. 注解用法1.1 方法参数1.2 方法1.3 类 2. 注解场景2.1 表单参数2.2 AJAX请求2.3 文件上传 3. 实战4. 总结 前言 将请求参数绑定到模型对象上,或者在请求处理之前添加模型属性 可以在方法参数、方法或者类上使用 一般适用这几种场景: 表单处理:通过 @ModelAttribute 将表单数据绑定到模型对象上预处理逻辑:在请求处理之前

eclipse运行springboot项目,找不到主类

解决办法尝试了很多种,下载sts压缩包行不通。最后解决办法如图: help--->Eclipse Marketplace--->Popular--->找到Spring Tools 3---->Installed。

JAVA读取MongoDB中的二进制图片并显示在页面上

1:Jsp页面: <td><img src="${ctx}/mongoImg/show"></td> 2:xml配置: <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001

Java面试题:通过实例说明内连接、左外连接和右外连接的区别

在 SQL 中,连接(JOIN)用于在多个表之间组合行。最常用的连接类型是内连接(INNER JOIN)、左外连接(LEFT OUTER JOIN)和右外连接(RIGHT OUTER JOIN)。它们的主要区别在于它们如何处理表之间的匹配和不匹配行。下面是每种连接的详细说明和示例。 表示例 假设有两个表:Customers 和 Orders。 Customers CustomerIDCus

22.手绘Spring DI运行时序图

1.依赖注入发生的时间 当Spring loC容器完成了 Bean定义资源的定位、载入和解析注册以后,loC容器中已经管理类Bean 定义的相关数据,但是此时loC容器还没有对所管理的Bean进行依赖注入,依赖注入在以下两种情况 发生: 、用户第一次调用getBean()方法时,loC容器触发依赖注入。 、当用户在配置文件中将<bean>元素配置了 lazy-init二false属性,即让