智能手机软件开发飞扬的小鸟.docx
《智能手机软件开发飞扬的小鸟.docx》由会员分享,可在线阅读,更多相关《智能手机软件开发飞扬的小鸟.docx(21页珍藏版)》请在冰豆网上搜索。
智能手机软件开发飞扬的小鸟
武汉理工大学华夏学院
课程设计报告书
课程名称:
智能手机软件开发
题目:
飞扬的小鸟
系名:
信息工程系
专业班级:
计算机1111
姓名:
学号:
10210411131
指导教师:
凌伟
2014年6月22日
武汉理工大学华夏学院信息工程系
课程设计任务书
课程名称:
智能手机软件开发课程设计指导教师:
凌伟
班级名称:
计算机1111开课系、教研室:
自动化与计算机
一、课程设计目的与任务
本课程的设计的目的是通过实践使同学们经历智能手机软件开发的全过程和受到一次综合训练,以便能较全面地理解、掌握和综合运用所学的智能手机开发的知识。
结合具体的开发案例飞扬的小鸟,理解并初步掌握智能手机开发的主要环节和步骤以及智能手机游戏开发的知识。
二、课程设计的内容与基本要求
1、课程设计题目
飞扬的小鸟
2、课程设计内容
要求学生根据所学的软件工程的理念,利用所学的Android手机开发的知识,开发一个智能手机游戏飞扬的小鸟,并针对该手机游戏软件进行需求分析,总体设计、详细设计、编码、测试。
《飞扬的小鸟》是由来自越南的独立游戏开发者DongNguyen所开发的作品,游戏中玩家必须控制一只小鸟,跨越由各种不同长度水管所组成的障碍,而这只鸟其实是根本不会飞的……所以玩家每点击一下小鸟就会飞高一点,不点击就会下降,玩家必须控制节奏,拿捏点击屏幕的时间点,让小鸟能在落下的瞬间跳起来,恰好能够通过狭窄的水管缝隙,只要稍一分神,马上就会失败阵亡。
游戏玩法:
在游戏开始后,点击屏幕,要记住是保持一定的规律的仔细观察点击屏幕,不要让小鸟掉下来。
游戏过程:
让小鸟不要撞到管子,每穿过一个管子的缝隙得1分。
游戏背景音乐设计
游戏背景动画设计
游戏界面设计
游戏关卡设计
游戏积分榜的设计
三、课程设计步骤及时间进度和场地安排
本课程设计将安排在第18周,教育技术中心。
具体安排如下:
第一天,系统开发平台搭建及主流开发工具安装
第二天,游戏界面的设计
第三天,游戏业务的设计
第四天,游戏关卡的设计
第五天,系统调试测试打包和验收
周次
星期一
星期二
星期三
星期四
星期五
第18周
第1-8节
第1-8节
第1-8节
第1-8节
第1-8节
地点
现教221
现教221
现教221
现教221
现教221
四、课程设计考核及评分标准
课程设计考核将综合考虑学生考勤和参与度,系统设计方案正确性,系统设计和开发效果以及课程设计报告书的质量。
具体评分标准如下:
设置六个评分点
(1)设计方案正确,具有可行性、创新性;25分
(2)系统开发效果较好;25分
(3)态度认真、刻苦钻研、遵守纪律;10分
(4)设计报告规范、课程设计报告质量高、参考文献充分20分
(5)课程设计答辩概念清晰,内容正确10分
(6)课程设计期间的课堂考勤、答疑与统筹考虑。
10分
按上述六项分别记分后求和,总分按五级记分法记载最后成绩。
优秀(100~90分),良好(80~89分),中等(70~79分),及格(60~69分),
不及格(0~59分)
1需求分析
1.1课设设计题目
飞扬的小鸟
1.2设计目的
⑴通过实践使同学们经历智能手机软件开发的全过程和受到一次综合训练,以便能较全面地理解、掌握和综合运用所学的智能手机开发的知识。
⑵结合具体的开发案例飞扬的小鸟,理解并初步掌握智能手机开发的主要环节和步骤以及智能手机游戏开发的知识。
⑶要求学生根据所学的软件工程的理念,利用所学的Android手机开发的知识,开发一个智能手机游戏飞扬的小鸟;
⑷针对该手机游戏软件进行需求分析,总体设计、详细设计、编码、测试。
1.3设计任务及要求
⑴设计“飞扬的小鸟”游戏包括:
游戏玩法,游戏过程,游戏背景音乐设计,游戏背景动画设计,游戏界面设计,游戏关卡设计,游戏积分榜的设计。
⑵游戏玩法:
游戏中玩家必须控制一只小鸟,跨越由各种不同长度水管所组成的障碍,而这只鸟其实是根本不会飞的……所以玩家每点击一下小鸟就会飞高一点,不点击就会下降,玩家必须控制节奏,拿捏点击屏幕的时间点,让小鸟能在落下的瞬间跳起来,恰好能够通过狭窄的水管缝隙,只要稍一分神,马上就会失败阵亡。
2软硬件运行环境及开发工具
2.1硬件环境
CPU:
Pentium43.0以上。
内存:
512MB以上。
硬盘:
80GB以上。
显示器:
1024×768像素以上。
数据库:
Access2000以上。
操作系统:
WindowsXP或更高版本。
2.2软件环境
MyElipse、JAVA
3游戏总体设计
3.1游戏功能简介
玩家每点击一下小鸟就会飞高一点,不点击就会下降,玩家必须控制节奏,拿捏点击屏幕的时间点,让小鸟能在落下的瞬间跳起来,恰好能够通过狭窄的水管缝隙,只要稍一分神,马上就会失败阵亡,具体的功能如下:
(1)登录界面按下图标进入游戏;
(2)每点击一下屏幕,小鸟飞一下;
⑶小鸟要是碰到柱子或者撞到地面就显示游戏结束界面。
3.2游戏的整体流程图
图1游戏的整体流程图
4系统详细设计
经过需求分析、功能模块设计之后要进入详细设计阶段,本阶段将按游戏的主要模块进行论述,重在阐述具体的某项功能的实现方法或运用到的相关技术。
4.1游戏背景动画设计
代码如下:
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
JFramewin=newJFrame("飞扬的小鸟作者:
卢灿");
win.setSize(432,674);
win.setLocationRelativeTo(null);
win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
win.setResizable(false);
Worldworld=newWorld();//创建一个小鸟活动世界
win.add(world);//把面板(world)添加到可视化窗口界面(win)里面
win.setVisible(true);
world.action();//让游戏界面动起来
}
}
4.2游戏界面设计
代码如下:
Worldworld=newWorld();//创建一个小鸟活动世界
win.add(world);//把面板(world)添加到可视化窗口界面(win)里面
win.setVisible(true);
world.action();//让游戏界面动起来
4.3游戏关卡设计
//游戏输赢的判定,代码如下:
if(bird.hit(ground)||bird.hit(c1)||bird.hit(c2)){
isGameOver=true;
}
4.4游戏积分榜的设计
代码如下:
if(bird.x==c1.x||bird.x==c2.x){
//得一分
score++;
}
repaint();//重绘游戏界面
try{
Thread.sleep(1000/60);
}catch(InterruptedExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
5操作说明及运行结果
5.1操作说明
⑴游戏玩法:
玩家每点击一下小鸟就会飞高一点,不点击就会下降,玩家必须控制节奏,拿捏点击屏幕的时间点,让小鸟能在落下的瞬间跳起来,恰好能够通过狭窄的水管缝隙,只要稍一分神,马上就会失败阵亡。
⑵游戏积分榜的设计:
让小鸟不要撞到管子,每穿过一个管子的缝隙得1分。
5.2运行结果
登录界面的设计
图2登录界面
游戏过程中的界面设计
图3游戏过程中的界面
游戏结束时的界面设计
图4游戏结束时的界面
6总结
在本次课程设计中,我们遇到的困难很多,在解决它们的同时我们又学到了很多,获益非浅,特别是如何分析、建立、开发一个游戏。
在一个游戏开发的过程中编码不是重要的,重要的是分析游戏、建立起游戏模型。
在分析一个游戏前,分析人员必须要对将要开发的游戏所涉及到的各方面知识有一个认识,然后将游戏的模型建立起来。
而且一个成功的游戏要符合用户的需要,要以用户为中心,开发出用户想要的游戏,而不能自以为是,想当然。
在游戏编写中,我们认识到游戏要有简便的界面,完备的文挡。
拥有这些条件,游戏的复杂度才能大大减少,修改代码时更加容易下手。
我认为,所谓良好的界面,就是用户需要的界面,力求简便全面。
所以设计一个界面时,开发人员必须要了解用户的想法,从用户的角度去设计,当然,开发不能全听用户的意见,在详细分析了游戏后,开发人员可以向用户提出一些修改的意见,在双方多次交流后定出游戏所需的功能,以决定界面的实现。
在编码中,良好的编程风格与习惯是提高工作效率的一个重要方面,而且良好的编程风格与习惯也是使软件便于维护的基础。
那如何是良好的编程风格与习惯呢?
我们认为主要是程序的模块化、必要的注释和完备的设计文挡三个方面。
所谓模块化就是使程序的功能实现分成多个单独的功能模块,而不能在一大段代码中实现多个功能,如果这样做,别的人是非常难读懂你的程序。
必要的注释,显而易见是要在程序的编写中加入对程序的说明,原因就是为了别人能读懂你的程序,再一段时间后你自己还能读懂自己的程序。
而完备的设计文挡是在系统开发过程中记录下开发的全部过程,拥有它,在以后维护软件时就有依据使维护工作变得简单一些。
总结这次课程设计给我们感受最深的至少有四点:
1.进行软游戏件开发这样的工作,要有恒心,要能静下新来做,而不能浮躁。
2.要遵循游戏开发本身的规律和善于吸收已有的经验。
3.要善于同别人交流与合作,善于获取有用的各种资源。
4.要真真实实多查资料,多问,多看。
7参考文献
[1]王建华.ASPNET2.0动态网站开发技术与实践[M].北京:
电子工业出版社,2007.
[2]王珊萨师煊,数据库系统概论(第四版),高等教育出版社,2006
[3]萨师煊,SQLServer从入门到精通,高等教育出版社,2006
[4]周之黄玫译,SQLServer2000技术参考大全,清华大学出版社,2001
[5]余杰李莎莎,SQLServer项目开发实践,中国铁道出版社,2006
附录
进入界面设计
packagecom.tarent.flappybird;
importjavax.swing.JFrame;
publicclassFlappyBird{
/**
*@paramargs
*/
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
JFramewin=newJFrame("飞扬的小鸟作者:
卢灿");
win.setSize(432,674);
win.setLocationRelativeTo(null);
win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
win.setResizable(false);
Worldworld=newWorld();//创建一个小鸟活动世界
win.add(world);//把面板(world)添加到可视化窗口界面(win)里面
win.setVisible(true);
world.action();//让游戏界面动起来
}
}
小鸟类
packagecom.tarent.flappybird;
importjava.awt.image.BufferedImage;
importjava.io.IOException;
importjavax.imageio.ImageIO;
/**小鸟类*/
publicclassBird{
BufferedImageimage;//鸟的图片
BufferedImage[]images=newBufferedImage[8];
intx;//鸟的中心点
inty;
intwidth;//鸟的宽和高
intheight;
doublealpha=0;
doubles;//t秒移动的距离
doubleg=4;
doublet=0.25;
doublespeed=20;//鸟的速度
intindex=0;//(让index++%8,赋值给图片的下标)
publicBird(){
//循环加载鸟的每一张图,存放在images数组里边
for(inti=0;i<8;i++){
try{
images[i]=ImageIO.read(getClass().getResource(i+".png"));
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
image=images[0];
width=image.getWidth();
height=image.getHeight();
x=132;//鸟的位置
y=280;
}
publicvoidstep(){
//x不变,y自由落体
doublev0=speed;
s=v0*t-0.5*g*t*t;
y-=s;//y=y-s;
speed=v0-g*t;//最后的速度作为鸟的初速度
alpha=Math.atan(s/8);
//换图片
image=images[index++%8];
}
publicvoidflappy(){
speed=20;
}
/*判断鸟是否碰撞到了地面*/
publicbooleanhit(Groundground){
if(y+height/2>=ground.y){
alpha=-3.14/2;//垂直撞地
returntrue;//碰到了地面
}
returnfalse;
}
publicbooleanhit(Columncolumn){//子类重载上面的hit方法,根据参数列表不同,访问
//不同的重载方法。
intm=x+width/2;
intn=x-width/2;
inta=column.x-column.width/2;
intb=column.x+column.width/2;
if(m>=a&&n<=b){
inta1=y-15;
inta2=y+15;
intb1=column.y-column.grap/2;
intb2=column.y+column.grap/2;
if(a1<=b1||a2>=b2){
returntrue;
}
}
returnfalse;
}
}
小鸟世界类
packagecom.tarent.flappybird;
importjava.awt.Color;
importjava.awt.Font;
importjava.awt.Graphics;
importjava.awt.Graphics2D;
importjava.awt.event.MouseAdapter;
importjava.awt.event.MouseEvent;
importjava.awt.image.BufferedImage;
importjava.io.IOException;
importjavax.imageio.ImageIO;
importjavax.swing.JPanel;
//ctrl+shift+f排版
publicclassWorldextendsJPanel{
BufferedImagebg;//背景图
BufferedImagestart_image;//游戏开始
BufferedImagegameover_image;//游戏结束
Groundground;//土地
Columnc1;//两个柱子
Columnc2;
Birdbird;//鸟
booleanisGameOver;//判断游戏是否结束
booleanstarted;//判断游戏是否开始
intscore=0;//得分
/*构造器,构造方法,构造函数,用来给属性赋初始值*/
publicWorld(){
try{
//加载背景图
bg=ImageIO.read(getClass().getResource("bg.png"));
start_image=ImageIO.read(getClass().getResource("start.png"));
gameover_image=ImageIO.read(getClass().getResource("gameover.png"));
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}//trycatch解决异常
//初始化土地,柱子,鸟
newWorld();
}
publicvoidnewWorld(){
ground=newGround();//初始化土地
c1=newColumn
(1);//第一根柱子
c2=newColumn
(2);//第二根柱子
bird=newBird();//初始化鸟
score=0;
isGameOver=false;
started=false;
}
/*画图的方法,g是画图工具*/
publicvoidpaint(Graphicsg){
//画背景图
g.drawImage(bg,0,0,null);
/*,先画柱子后画土地,美观*/
//画柱子
g.drawImage(c1.image,c1.x-c1.width/2,c1.y-c1.height/2,null);//画第一个柱子
g.drawImage(c2.image,c2.x-c2.width/2,c2.y-c2.height/2,null);//画第二个柱子
//画土地
g.drawImage(ground.image,ground.x,ground.y,null);//画土地
//画鸟
//bird.alpha=-1.2;//赋值改变头朝向
Graphics2Dg1=(Graphics2D)g;
//在鸟的(x,y)位置,把坐标系旋转alpha倾角
g1.rotate(-bird.alpha,bird.x,bird.y);
g1.drawImage(bird.image,bird.x-bird.width/2,bird.y-bird.height/2,null);
g1.rotate(bird.alpha,bird.x,bird.y);
if(!
started){//画游戏开始的示意图
g.drawImage(start_image,0,0,null);
}
if(isGameOver){
g.drawImage(gameover_image,0,0,null);
}
//画分数
Fontf=newFont("隶书",Font.BOLD,25);
g.setFont(f);
g.setColor(Color.black);
g.drawString("你的得分为:
"+score,10,20);
}
/**让图片动起来的方法*/
publicvoidaction(){
//为该游戏界面,添加鼠标监听事件
MouseAdapterm=newMouseAdapter(){
//监听鼠标点击操作
publicvoidmousePressed(MouseEvente){
System.out.println("点我!
随便点");
if(isGameOver){
newWorld();//重新开始
}else{
//鸟跳一下
bird.flappy();
started=true;//开始游戏
}
}
};
this.addMouseListener(m);
while(true){
if(started){//游戏开始,并且结束,这个过程,才动
if(!
isGameOver){
ground.step();//土地动一次
c1.step();//柱子动一次
c2.step();
bird.step();
}
}
//是否得分
if(bird.x==c1.x||bird.x==c2.x){
//得一分
score++;
}
repaint();//重绘游戏界面
try{
Thread.sleep(1000/60);
}catch(InterruptedExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
//游戏输赢的判定
if(bird.hit(ground)||bird.hit(c1)||bird.hit(c2)){
isGameOver=true;
}
}
}
}
柱子类
packagecom.tarent.flappybird;
importjava.awt.image.BufferedImage;
importjava.io.IOException;
importjava.util.Random;
importjavax.imageio.ImageIO;
/**柱子类*/
publicclassColumn{
BufferedImageimage;/