一、简介
游戏名称是“愤怒的小鸟”,英文称为“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、程序资源