1、武 汉 理 工 大 学 华 夏 学 院课 程 设 计 报 告 书课程名称: 智能手机软件开发 题 目: 飞 扬 的 小 鸟 系 名: 信息工程系 专业班级: 计算机 1111 姓 名: 学 号: 10210411131 指导教师: 凌伟 2014 年 6 月 22 日武汉理工大学华夏学院信息工程系课 程 设 计 任 务 书课程名称:智能手机软件开发课程设计 指导教师: 凌伟 班级名称: 计算机 1111 开课系、教研室: 自动化与计算机 一、课程设计目的与任务本课程的设计的目的是通过实践使同学们经历智能手机软件开发的全过程和受到一次综合训练,以便能较全面地理解、掌握和综合运用所学的智能手机开发
2、的知识。结合具体的开发案例飞扬的小鸟,理解并初步掌握智能手机开发的主要环节和步骤以及智能手机游戏开发的知识。二、课程设计的内容与基本要求1、课程设计题目飞扬的小鸟2、课程设计内容要求学生根据所学的软件工程的理念,利用所学的 Android 手机开发的知识,开发一个智能手机游戏飞扬的小鸟,并针对该手机游戏软件进行需求分析,总体设计、详细设计、编码、测试。 飞扬的小鸟是由来自越南的独立游戏开发者 Dong Nguyen 所开发的作品,游戏中玩家必须控制一只小鸟,跨越由各种不同长度水管所组成的障碍,而这只鸟其实是根本不会飞的所以玩家每点击一下小鸟就会飞高一点,不点击就会下降,玩家必须控制节奏,拿捏点
3、击屏幕的时间点,让小鸟能在落下的瞬间跳起来,恰好能够通过狭窄的水管缝隙,只要稍一分神,马上就会失败阵亡。游戏玩法:在游戏开始后,点击屏幕,要记住是保持一定的规律的仔细观察点击屏幕,不要让小鸟掉下来。游戏过程:让小鸟不要撞到管子,每穿过一个管子的缝隙得 1 分。游戏背景音乐设计游戏背景动画设计游戏界面设计游戏关卡设计游戏积分榜的设计三、课程设计步骤及时间进度和场地安排本课程设计将安排在第 18 周, 教育技术中心。具体安排如下:第一天,系统开发平台搭建及主流开发工具安装第二天,游戏界面的设计第三天,游戏业务的设计第四天,游戏关卡的设计 第五天,系统调试 测试 打包和验收周次星期一 星期二 星期三
4、 星期四 星期五第 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)课程设计期间
5、的课堂考勤、答疑与统筹考虑。 10 分按上述六项分别记分后求和,总分按五级记分法记载最后成绩。优秀(10090分),良好(8089分),中等(7079分),及格(6069分),不及格(059 分)1 需求分析1.1 课设设计题目飞扬的小鸟1.2 设计目的通过实践使同学们经历智能手机软件开发的全过程和受到一次综合训练,以便能较全面地理解、掌握和综合运用所学的智能手机开发的知识。结合具体的开发案例飞扬的小鸟,理解并初步掌握智能手机开发的主要环节和步骤以及智能手机游戏开发的知识。要求学生根据所学的软件工程的理念,利用所学的 Android 手机开发的知识,开发一个智能手机游戏飞扬的小鸟;针对该手机游
6、戏软件进行需求分析,总体设计、详细设计、编码、测试。1.3 设计任务及要求设计“飞扬的小鸟”游戏包括:游戏玩法,游戏过程,游戏背景音乐设计,游戏背景动画设计,游戏界面设计,游戏关卡设计,游戏积分榜的设计。游戏玩法:游戏中玩家必须控制一只小鸟,跨越由各种不同长度水管所组成的障碍,而这只鸟其实是根本不会飞的所以玩家每点击一下小鸟就会飞高一点,不点击就会下降,玩家必须控制节奏,拿捏点击屏幕的时间点,让小鸟能在落下的瞬间跳起来,恰好能够通过狭窄的水管缝隙,只要稍一分神,马上就会失败阵亡。2 软硬件运行环境及开发工具2.1 硬件环境CPU:Pentium 4 3.0 以上。内存:512MB 以上。硬盘:
7、80GB 以上。显示器:1024768 像素以上。数据库:Access2000 以上。操作系统:Windows XP 或更高版本。2.2 软件环境MyElipse、JAVA3 游戏总体设计3.1 游戏功能简介玩家每点击一下小鸟就会飞高一点,不点击就会下降,玩家必须控制节奏,拿捏点击屏幕的时间点,让小鸟能在落下的瞬间跳起来,恰好能够通过狭窄的水管缝隙,只要稍一分神,马上就会失败阵亡,具体的功能如下:(1)登录界面按下图标进入游戏;(2)每点击一下屏幕,小鸟飞一下;小鸟要是碰到柱子或者撞到地面就显示游戏结束界面。3.2 游戏的整体流程图游戏登录界面点击开始进入游戏判断小鸟是否撞地撞柱子游戏 ove
8、r是否结束游戏游戏结束YYNYNN图 1 游戏的整体流程图4 系统详细设计 经过需求分析、功能模块设计之后要进入详细设计阶段,本阶段将按游戏的主要模块进行论述,重在阐述具体的某项功能的实现方法或运用到的相关技术。4.1 游戏背景动画设计代码如下:public static void main(String args) / TODO Auto-generated method stubJFrame win = new JFrame(“飞扬的小鸟 作者:卢灿“);win.setSize(432, 674);win.setLocationRelativeTo(null);win.setDefault
9、CloseOperation(JFrame.EXIT_ON_CLOSE);win.setResizable(false);World world = new World();/ 创建一个小鸟活动世界win.add(world);/ 把面板(world)添加到可视化窗口界面(win)里面win.setVisible(true);world.action();/让游戏界面动起来4.2 游戏界面设计代码如下:World world = new World();/ 创建一个小鸟活动世界win.add(world);/ 把面板(world)添加到可视化窗口界面(win)里面win.setVisible(
10、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 (InterruptedException e) / TODO Auto-generated catch blocke.printStackTrace();5
11、操作说明及运行结果5.1 操作说明游戏玩法:玩家每点击一下小鸟就会飞高一点,不点击就会下降,玩家必须控制节奏,拿捏点击屏幕的时间点,让小鸟能在落下的瞬间跳起来,恰好能够通过狭窄的水管缝隙,只要稍一分神,马上就会失败阵亡。游戏积分榜的设计:让小鸟不要撞到管子,每穿过一个管子的缝隙得 1 分。5.2 运行结果登录界面的设计图 2 登录界面游戏过程中的界面设计图 3 游戏过程中的界面游戏结束时的界面设计图 4 游戏结束时的界面6 总结 在本次课程设计中,我们遇到的困难很多,在解决它们的同时我们又学到了很多,获益非浅,特别是如何分析、建立、开发一个游戏。在一个游戏开发的过程中编码不是重要的,重要的是分
12、析游戏、建立起游戏模型。在分析一个游戏前,分析人员必须要对将要开发的游戏所涉及到的各方面知识有一个认识,然后将游戏的模型建立起来。而且一个成功的游戏要符合用户的需要,要以用户为中心,开发出用户想要的游戏,而不能自以为是,想当然。在游戏编写中,我们认识到游戏要有简便的界面,完备的文挡。拥有这些条件,游戏的复杂度才能大大减少,修改代码时更加容易下手。我认为,所谓良好的界面,就是用户需要的界面,力求简便全面。所以设计一个界面时,开发人员必须要了解用户的想法,从用户的角度去设计,当然,开发不能全听用户的意见,在详细分析了游戏后,开发人员可以向用户提出一些修改的意见,在双方多次交流后定出游戏所需的功能,
13、以决定界面的实现。在编码中,良好的编程风格与习惯是提高工作效率的一个重要方面,而且良好的编程风格与习惯也是使软件便于维护的基础。那如何是良好的编程风格与习惯呢?我们认为主要是程序的模块化、必要的注释和完备的设计文挡三个方面。所谓模块化就是使程序的功能实现分成多个单独的功能模块,而不能在一大段代码中实现多个功能,如果这样做,别的人是非常难读懂你的程序。必要的注释,显而易见是要在程序的编写中加入对程序的说明,原因就是为了别人能读懂你的程序,再一段时间后你自己还能读懂自己的程序。而完备的设计文挡是在系统开发过程中记录下开发的全部过程,拥有它,在以后维护软件时就有依据使维护工作变得简单一些。总结这次课
14、程设计给我们感受最深的至少有四点:1进行软游戏件开发这样的工作,要有恒心,要能静下新来做,而不能浮躁。2要遵循游戏开发本身的规律和善于吸收已有的经验。3要善于同别人交流与合作,善于获取有用的各种资源。4要真真实实多查资料,多问,多看。7 参考文献1 王建华. ASP NET 2.0 动态网站开发技术与实践M.北京:电子工业出版社,2007.2王珊 萨师煊,数据库系统概论(第四版) ,高等教育出版社,20063萨师煊,SQL Server 从入门到精通,高等教育出版社,20064 周之 黄玫译, SQL Server 2000 技术参考大全, 清华大学出版社,2001 5余杰 李莎莎,SQLSe
15、rver 项目开发实践,中国铁道出版社,2006附录进入界面设计package com.tarent.flappybird;import javax.swing.JFrame;public class FlappyBird /* param args*/public static void main(String args) / TODO Auto-generated method stubJFrame win = new JFrame(“飞扬的小鸟 作者:卢灿“);win.setSize(432, 674);win.setLocationRelativeTo(null);win.setDef
16、aultCloseOperation(JFrame.EXIT_ON_CLOSE);win.setResizable(false);World world = new World();/ 创建一个小鸟活动世界win.add(world);/ 把面板( world)添加到可视化窗口界面(win)里面win.setVisible(true);world.action();/让游戏界面动起来小鸟类package com.tarent.flappybird;import java.awt.image.BufferedImage;import java.io.IOException;import java
17、x.imageio.ImageIO;/*小鸟类*/public class Bird BufferedImage image;/鸟的图片BufferedImage images=new BufferedImage8;int x;/鸟的中心点int y;int width;/鸟的宽和高int height;double alpha=0;double s;/t 秒移动的距离double g=4;double t=0.25;double speed=20;/鸟的速度int index=0;/(让 index+%8,赋值给图片的下标)public Bird()/循环加载鸟的每一张图,存放在 image
18、s 数组里边for(int i=0;i=ground.y)alpha=-3.14/2;/垂直撞地return true;/碰到了地面return false;public boolean hit(Column column)/子类重载上面的 hit 方法,根据参数列表不同,访问/不同的重载方法。int m=x+width/2;int n=x-width/2;int a=column.x-column.width/2;int b=column.x+column.width/2;if(m=areturn false;小鸟世界类package com.tarent.flappybird;import
19、 java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.awt.image.BufferedImage;import java.io.IOException;import javax.imageio.ImageIO;import javax.swing.JPanel;/ctrl + shift +f 排版public
20、 class World extends JPanel BufferedImage bg;/ 背景图BufferedImage start_image;/游戏开始BufferedImage gameover_image;/游戏结束Ground ground;/土地Column c1;/两个柱子Column c2;Bird bird;/鸟boolean isGameOver;/判断游戏是否结束boolean started;/判断游戏是否开始int score=0;/得分/* 构造器,构造方法,构造函数,用来给属性赋初始值 */public World() try / 加载背景图bg = Ima
21、geIO.read(getClass().getResource(“bg.png“);start_image=ImageIO.read(getClass().getResource(“start.png“);gameover_image=ImageIO.read(getClass().getResource(“gameover.png“); catch (IOException e) / TODO Auto-generated catch blocke.printStackTrace();/ try catch 解决异常/初始化土地,柱子,鸟newWorld();public void new
22、World()ground = new Ground();/初始化土地c1 = new Column(1);/第一根柱子c2 = new Column(2);/第二根柱子bird=new Bird();/初始化鸟score=0;isGameOver=false;started=false;/* 画图的方法,g 是画图工具 */public void paint(Graphics g) / 画背景图g.drawImage(bg, 0, 0, null);/*,先画柱子后画土地,美观 */画柱子g.drawImage(c1.image, c1.x-c1.width/2, c1.y-c1.heigh
23、t/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;/赋值改变头朝向Graphics2D g1=(Graphics2D)g;/在鸟的(x,y)位置,把坐标系旋转 alpha 倾角g1.rotate(-bird.alpha,bird.x,bird.y);g1.drawImage(bird.image,bird.x-b
24、ird.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);/画分数Font f=new Font(“隶书 “,Font.BOLD,25);g.setFont(f);g.setColor(Color.black);g.drawString(“你的得分为:“+score, 10, 20
25、);/*让图片动起来的方法 */public void action()/为该游戏界面,添加鼠标监听事件MouseAdapter m=new MouseAdapter()/监听鼠标点击操作public void mousePressed(MouseEvent e)System.out.println(“点我!随便点“);if(isGameOver)newWorld();/重新开始else/鸟跳一下bird.flappy();started=true;/开始游戏;this.addMouseListener(m);while(true)if(started)/游戏开始,并且结束,这个过程,才动if
26、(!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 (InterruptedException e) / TODO Auto-generated catch blocke.printStackTrace();/游戏输赢的判定if(bird.hit(ground)|bird.hit(c1)|bird.hit(c2)isGam
27、eOver=true;柱子类package com.tarent.flappybird;import java.awt.image.BufferedImage;import java.io.IOException;import java.util.Random;import javax.imageio.ImageIO;/*柱子类*/public class Column BufferedImage image;/柱子的图片 int x;/柱子的中心点int y;int width;/柱子的宽和高int height;int distance;/两根柱子的距离int grap=144;/一根柱子
28、中间的间隙距离Random random = new Random();/随机函数生成器,用来随机柱子高度/* 构造器,给属性赋初值 */public Column(int num)/num 代表第几根柱子try image = ImageIO.read(getClass().getResource(“Column.png“); catch (IOException e) / TODO Auto-generated catch blocke.printStackTrace();width = image.getWidth();/把图片的宽和高赋值给柱子height = image.getHei
29、ght();y = random.nextInt(218)+132;/已经计算好的数据,不能改distance = 245;x = (num-1)*distance + 550;/*让柱子动的方法*/public void step()x-;if(x-width/2)/重新进场x = 2*distance-width/2;y = random.nextInt(218)+132;土地类package com.tarent.flappybird;import java.awt.image.BufferedImage;import java.io.IOException;import javax.i
30、mageio.ImageIO;/* 土地类*/public class Ground BufferedImage image;/土地的图片int x;/土地的位置int y;public Ground()/先加载图片try image = ImageIO.read(getClass().getResource(“ground.png“); catch (IOException e) / TODO Auto-generated catch blocke.printStackTrace();x = 0;y = 500;/*土地动起来的方法*/public void step()x-;if(x=-1
31、10)x = 0;设计过程中质疑(或答辩)记载:1. 游戏中是怎样实现小鸟飞动这种情况的?答:表面上是小鸟一直在飞动,实际上是地面动和柱子动。所以是,游戏开始到结束这个过程,每点一下屏幕,小鸟跳一次,土地动一次,柱子动一次。2. 怎样判断游戏输赢?答:用判断语句 if 语句来实现。假如小鸟碰到地面或者碰到第一根柱子,第二根柱子,游戏就会结束。具体程序如下:if(bird.hit(ground)|bird.hit(c1)|bird.hit(c2)isGameOver=true;3. 让柱子动的方法?答:让柱子的中心点循环减一,当中心点小于-width/2 时,重新进场,具体程序如下:public void step()x-;if(x-width/2)/重新进场x = 2*distance-width/2;y = random.nextInt(218)+132;指导教师评语:签名:年 月 日