javaSwing愤怒的小鸟游戏

2024-03-26 23:52
文章标签 java 游戏 swing 小鸟 愤怒

本文主要是介绍javaSwing愤怒的小鸟游戏,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、简介

游戏名称是“愤怒的小鸟”,英文称为“AngryBird”。 “愤怒的小鸟”是著名游戏公司Rovio偶然间开发出来的益智游戏,从2009年12月上市到iOS。,讲述了鸟类和猪因为猪偷鸟蛋反生的一系列故事。游戏的类型版本是横向版本的水平视角,背景是为了报复偷鸡蛋的猪,鸟将自己的身体作为武器,就像炮弹一样从弹弓射出抛到绿猪搭建的堡垒,并将其摧毁。 游戏非常简单,小鸟跳上弹弓,发射角度和强度由玩家的自行控制,游戏中需要良好的整体计算,适当的调节强度和角度,从而更精确地击中猪。每次击中更多的绿猪,将获得大量的分数。游戏风格充满乐趣和幽默,游戏设计的体现了放松的情调,乐观的风格。
愤怒的小鸟这款游戏内容包含着丰富的人机交互:不管游戏本身设计的难度如何,只要玩家学会基本的游戏使用方法,大多数人都可以经过不断训练来打到通关这一目的。这一款益智类游戏的开发,目的是为了使人们更多了解物理引擎游戏所带来的与众不同。在今天如此复杂多样的游戏环境中,这一款游戏所带来的新鲜感让人为之疯狂,极大展现了Java语言在开发物理运动游戏方面独有的魅力,也极大促进了Java语言在游戏方面的发展。

二、系统需求分析

1 可行性分析

可行性分析是要求以经济方法和效益为核心进行全面的系统分析,围绕影响项目的各种因素、收集大量数据分析论证项目的可行性。对整个项目进行可行性研究是为了对项目进行分析和评估,突出项目的优缺点和讨论如何对项目进行改进。为了结论的可行性,经常还需要添加一些配件,如测试数据、演示材料、电子表格、图纸等,以提高可行性研究的严谨性,使其更具有说服力。

1. 技术可行性

技术可行性是从重要技术项目执行实施的角度,合理设计技术解决方案,进行比较评估不同行业和不同深度的大型技术可行性研究项目。这一款软件开发,在硬件方面不存在特殊要求,只需要在普通的硬件配置中便可以轻松实现,但必须保证系统的正常运行,并提高效率。如果硬件特别弱、性能差从而使得系统效率低下,导致整个系统不顺畅。但对于如今的个人PC的一般配置,进行软件开发是很容易满足条件的。 因此,该系统的开发在硬件方面完全可行。操作系统选择WINDOWS操作系统,开发软件为Eclipse,该系统的设计实现在软件方面是可行的。因此可以看出,该系统的开发是没有问题的。

2 经济可行性

经济可行性是在资源配置、区域经济发展目标、经济资源有效配置、增加供给、创造就业机会、改善环境、改善生活等方面,对项目的价值进行评估。本基于Java开发的愤怒的小鸟游戏,需要的软硬件环境,在市场上都是很方便可以购买得到,开发人员主要是进行软件开发和简单的维护。所以人力和财力资源开发方面没有问题,开发周期长,经济可行性很大。

3.1.3 操作可行性
操作可行性是设想项目验证是可行的,它提出了各种方案的实施,并解释了不同方案的优缺点。该系统使用基于Java语言编写,使用个人PC安装Eclipse来进行访问和操做,并且界面简单易用,只要用户稍加以学习和多试几次,完全可以熟悉访问和操作。这一款愤怒的小鸟游戏,有着界面上易于管理和良好的互动操作等各种优点。

4 发展可行性

软件生命周期的观点:随着中国游戏方面还处于成长期,这类游戏软件将会被广大用户提出需求。因此,这是游戏软件长寿的主要原因,开发一款游戏软件,合理的运营将会使它和谐的发展,而且这并不是一个太难的开发项目,它不仅可以在PC端进行操作使用,甚至可以跨平台传播,而且用户操作简单,使用起来非常方便,绝大多数用户都可以不用花费大量的时间便可以完全上手,这不仅是适应用户对游戏的追求,同时适应当前的游戏发展趋势。

3.2 性能需求分析

为了保证愤怒的小鸟程序的长期、稳定和有效的运作,必须保证系统的发展。 在开发基于Java语言的愤怒的小鸟程序的过程中,系统必须确保使用适当方法来保证程序的安全性和有效性。 我们必须充分考虑以下几点:
安全性:在信息时代,信息是确保信息安全的重要资产,特别是个人信息也需要强大的安全性,所以在游戏个人信息保存方面,应该确保安全性是第一位。
超前性:结合当今时尚潮流,开发满足用户需求,让用户总是可以第一时间获得超前的游戏体验,获得新鲜感,获得新的乐趣。
可扩展性:基于Java的愤怒的小鸟游戏不仅可以在PC端进行使用,由于Java语言的可扩展性,注定这个游戏也可以进行多平台使用,更加方便的获取以及更加方便的操作。

3.3 功能需求分析

需求分析是对用户需求和要求的分析。需要准确评估用户需求的结果从而反映实际用户需要,这将直接影响整个设计的流程,也会对系统的使用产生影响。关注需求评估来完成调查收集和研究,可能会受到数据管理和信息安全过程的影响。一般用户相对于开发者来说,绝大部分用户都是缺少计算机相关知识,并且无法确定计算机是否可以为自己做到或者做不到一些事情,准确表达他们的需求是需要的,必须通过跟用户的深入了解来获取用户的需求从而准确的确定计算机的功能。
搜索用户分析和细化特征等用户的描述的信息是必要的。它是软件开发过程的第一阶段主要部分,主要任务是了解您需要什么,需要做个什么样的系统,使完整的目标系统拥有清晰准确的功能,并且可以进行书面表达。
在愤怒的小鸟程序中,主要实现以下功能
游戏玩法功能:
(1) 能实现发射器创建、发射角度、发射力度等
(2) 可以实现小鸟飞行功能,包括小鸟飞行抛物线、小鸟飞行悬停
(3) 实现游戏中猪的移动功能,包括猪的根据级别不同改变移动速度、猪在哪里移动
(4) 碰撞功能:实现小鸟与障碍的碰撞、小鸟与猪的碰撞、鸡蛋与障碍物的碰撞、鸡蛋与猪的碰撞、猪与障碍物的碰撞
页面管理功能:实现各个页面功能,包括主界面、载入游戏界面、控制帮助界面、跳转界面功能等
难度、级别功能:实现游戏难度功能,难度不同猪的移动速度不同,实现级别功能,级别不同地图难易程度也不同
实体类管理功能:创建游戏中各种实体类,包括鸟的种类、猪、障碍物、草地等
玩家管理功能和备份功能:实现玩家信息管理以及游戏信息保存的功能
如下图3-1所示:
在这里插入图片描述

3.4系统UML分析

UML是在面向对象的方法Booch,TMO,OOSE等基础上开发的方法,以及根据许多其他方法和材料的基础从而衍变出来的。 UML符号是为各种图形符号表示,消除混淆、冗余符号或很少使用以及容易导致的图形符号,同时添加一些新的图形符号。
UML是统一建模语言的缩写,也称为统一建模语言。它是用于可视化建模的一种语言。 UML是开发人员用于建模事物的客观标记,同时也为开发人员了解什么样的系统工作以及整个过程做出了准备工作。 现在我们在这个基础上对愤怒的小鸟进行建模分析,UML用例图如下图3-2所示:
在这里插入图片描述

3.5界面需求分析

目前,界面设计已成为软件质量评估的重要指标,良好的用户界面能提高用户操作系统的信心和增加兴趣、提高效率。 客户界面是指与用户与机器进行交互的软件系统界面,通常覆盖界面格式输出,输入和其他人机对话。
1.输出设计
输出是游戏程序解决基本信息的输入,产生高质量的正确信息,并使其具有一定的格式,供管理人员使用,这是发布设计和目标的主要责任和目标。
与系统开发过程的实现不同,不是从输入设计到输出,而是输处设计到输入到设计。 这是因为输出表与用户直接链接,应设计为确保用户可以方便地使用输出表格,及时将有用的信息可以反映在各个部门。

2.输入设计
收集和输入输出数据更加不方便,需要大量的人力物力,而且经常出错。 一旦不正确的数据输入系统,处理后的输出会扩大这些错误,所以输入数据的准确性对系统的整体性能起决定性的作用。输入设计有以下几点原则:
1)输入量必须最小程度的满足处理要求。 输入数据越少,错误率会越小,数据准备时间也较少。
2)如果可能的话,尝试尽可能方便的准备和输入过程,以减少更多的发生错误发生率。
3)尽早检查输入数据(尽可能靠近原始数据生成点),及时进行纠错更改。
4)可能会尽可能早地将输入数据记录所需的处理形式进行记录,以防止从一个介质传输到另一个介质而可能发生的转录数据错误。

三、运行截图

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

四、部分代码

MenuLevelView.java

package view;import java.util.ArrayList;import javax.swing.JButton;import model.LevelNumber;@SuppressWarnings("serial")
public class MenuLevelView extends GameViewMenu
{//���Ե�������Ӧ��ˮƽѡ��ҳ��private ArrayList<JButton> lvlButtons;public MenuLevelView(){lvlButtons = new ArrayList<JButton>();//��ͬ��εİ�ť�Ĵ���for (int lvlNumber = 0; lvlNumber < LevelNumber.getLevelNumber(); ++lvlNumber) {lvlButtons.add(new JButton("" + (lvlNumber+1)));lvlButtons.get(lvlNumber).setSize(60,60);int lineNumber = lvlNumber / 5;lvlButtons.get(lvlNumber).setLocation(frameWidth/2-190+(lvlNumber%5)*80,frameHeight/2-80 + lineNumber*80);}//���Ӱ�ť��1����������ǰ��for (JButton button : lvlButtons) {this.add(button, new Integer(1));}}public ArrayList<JButton> getLvlButtons(){return lvlButtons;}
}

MenuLoadView.java

package view;import java.util.ArrayList;import javax.swing.JButton;
import javax.swing.JComboBox;import model.Player;@SuppressWarnings("serial")
public class MenuLoadView extends GameViewMenu
{//��Ӧ��λ����ҳ�����Ե�����private JComboBox playersList;private JButton okLoadButton, deleteButton;public MenuLoadView(ArrayList<Player> players){playersList = new JComboBox();playersList.setSize(200,30);playersList.setLocation(frameWidth/2-100,150);//���������JComboBox��for(Player p : players){playersList.addItem(p);}okLoadButton = new JButton("ȷ��");okLoadButton.setSize(200,30);okLoadButton.setLocation(frameWidth/2-100, 200);deleteButton = new JButton("ɾ��");deleteButton.setSize(200,30);deleteButton.setLocation(frameWidth/2-100, 250);//��������1������������ǰ��this.add(playersList,new Integer(1));this.add(deleteButton, new Integer(1));this.add(okLoadButton,new Integer(1));}public JComboBox getPlayersList(){return playersList;}public void setPlayersList(ArrayList<Player> players){playersList.removeAllItems();for(Player p : players){playersList.addItem(p);}}public JButton getDeleteButton(){return deleteButton;}public JButton getOkLoadButton(){return okLoadButton;}}

MenuOptionsView.java

package view;import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;import javax.swing.ImageIcon;
import javax.swing.JLabel;
import main.GameFrame;@SuppressWarnings("serial")
public class MenuOptionsView extends GameViewMenu
{final int frameWidth = GameFrame.getFrameSize().width;final int frameHeight = GameFrame.getFrameSize().height;//���Ե������Ѿ���Ӧչ��ҳ��ؼ�private JLabel controlsLabel;private JLabel controlsImageLabel;private String controlsImagePath = "res/images/controls.png";private Image image;public MenuOptionsView(){ImageIcon ii = new ImageIcon(controlsImagePath);image = ii.getImage();controlsLabel = new JLabel("���� :");controlsLabel.setSize(200, 30);controlsLabel.setLocation(frameWidth/2-200,150);//��ˢ��JLabel�������ͼ��controlsImageLabel= new JLabel() {public void paint(Graphics g) {g.drawImage(image,frameWidth/2 - 345/2,frameHeight/2 - 245/2, 345,245, null);}};controlsImageLabel.setSize(new Dimension(frameWidth, frameHeight));setFocusable(true);setDoubleBuffered(true);//��������1������������ǰ��this.add(controlsLabel,new Integer(1));this.add(controlsImageLabel, new Integer(1));}}

五、联系与交流

q:969060742 完整代码、报告、ppt、程序资源

这篇关于javaSwing愤怒的小鸟游戏的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

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属性,即让