计算机科学与技术专业《综合课程设计》报告.docx
《计算机科学与技术专业《综合课程设计》报告.docx》由会员分享,可在线阅读,更多相关《计算机科学与技术专业《综合课程设计》报告.docx(22页珍藏版)》请在冰豆网上搜索。
![计算机科学与技术专业《综合课程设计》报告.docx](https://file1.bdocx.com/fileroot1/2022-10/12/8d70d4e4-2429-496f-b910-4abce5a3bbf8/8d70d4e4-2429-496f-b910-4abce5a3bbf81.gif)
计算机科学与技术专业《综合课程设计》报告
计算机科学与技术专业12级
《综合课程设计》报告
题目:
贪吃蛇小游戏
成员:
姓名学号
郝兴明201207051
指导教师:
王金龙
开始日期:
2015年12月7日
完成日期:
2016年01月8日
2012级《综合课程设计》评价表
题目
贪吃蛇小游戏
指导老师
王金龙
项目内容简介
本次综合课程设计的内容为“贪吃蛇”小游戏,游戏操作简单,设计却很复杂,主要实现的内容为:
通过键盘控制蛇的移动,判断蛇是否死亡,以及通过相应按钮来控制游戏的进程。
评价
工作量(□饱满、□达到要求、□不饱满);
运行效果(□良好、□有小问题、□错误较多);
文档及报告撰写(□规范、□较规范、□不规范、□未提交);
答辩(□优秀、□良好、□一般、□较差);
团队分工及协作(□很好、□较好、□一般、□较差)。
成绩
学号
姓名
组内分工
贡献排名
成绩
201207051
郝兴明
程序设计、编写、测试、报告
答辩小组签字
青岛理工大学课程设计任务书
姓名组内分工
郝兴明程序设计、编写、测试、报告
院(系):
计算机工程
专业:
计算机科学与技术
任务起至日期:
2015年12月7日至2016年01月8日
课程设计题目:
贪吃蛇小游戏
主要内容及要求:
“贪吃蛇”小游戏主要应实现以下几个方面的功能:
1.通过方向键控制蛇的移动
2.蛇吃到食物后身体变长
3.食物的随机产生
4.蛇吃到自己身体或墙后死亡
5.蛇在移动过程中可以暂停/继续
6.可手动停止游戏
工作计划安排:
2015年12月07日---2015年12月10日需求分析
2015年12月11日---2015年12月15日概要设计
2015年12月16日---2015年12月20日框架搭建
2015年12月21日---2015年12月30日详细功能设计
2015年12月31日---2016年01月03日程序测试
2016年01月04日---2016年01月05日书写报告
2016年01月06日项目答辩
第1部分概述
1.内容简介
“贪吃蛇”是一款经典的小游戏,以其操作简单、娱乐性强而广受欢迎。
一条蛇在封闭的围墙内移动,在围墙内随机出现一个食物,通过键盘的方向键来控制蛇的移动,当蛇吃到食物后蛇的身体长一节,同时出现一个新的食物等待蛇去吃,如果蛇在移动过程中蛇头吃到自己身体或者吃到围墙的石头,则蛇死亡,游戏结束。
作为一个小游戏,设计中必须要考虑人机交互和用户体验,因此游戏界面应简洁直观,让用户可直接了解游戏的操作。
“贪吃蛇”的设计对java编程的提高和进阶是一次很好的锻炼机会。
本次设计使用java语言,通过GUI编程、线程、事件监听等技术来实现游戏的开发,功能虽然较少,但游戏的基本功能都具备,可正常进行游戏。
2.功能介绍
“贪吃蛇”小游戏的设计较复杂,要想实现所有功能需要很高的技术要求和很强的编程能力。
由于本人技术能力欠缺,所以只能实现基本的游戏功能,通过画图的方法来显示出蛇的身体,食物的位置和墙的位置。
主要操作是通过键盘的方向键来控制蛇的移动方向,无效方向要忽略;当蛇吃到食物时蛇的身体变长一节,同时产生一个新的食物;蛇吃到自己身体或者吃到石头时死亡,游戏结束;在游戏控制区域可通过相应按钮来控制游戏的运行进度。
3.设计环境
本次游戏设计的环境及开发工具如下:
运行环境:
Windows7
编程语言:
java
开发环境:
eclipse
第2部分需求分析
1.用户特点分析
游戏开发成功后,可适用于各类人群使用,所以要求界面简单,操作方便,不需要进行专门培训就可以学会如何操作
2. 功能需求
2.1图形界面的需求
游戏画布区主要包括蛇的身体出现的位置,食物随机出现的位置,墙的固定位置,以及蛇可移动的区域。
游戏控制区域显示按钮及操作提示。
2.2属性需求
在可使用性方面,要求各个功能实现简单,操作方便,系统处理正确;整个系统恢复性能号,链接速度快,以确保系统可适用性好。
另外,还要求系统的可扩展性、可维护性、可移植性良好。
2.3功能模块需求
软件开发过程中的功能模块设计,主要解决实现该游戏需求的程序模块设计问题。
包括如何把该游戏划分成若干个模块、决定各个模块之间的接口、模块之间穿的的信息,以及模块结构的设计等。
2.3.1游戏功能
本游戏主要完成以下几方面的功能:
1)游戏控制功能
2)界面布局
3)其他辅助功能
2.3.2功能模块划分
根据游戏需求,整个游戏主要划分为游戏界面和游戏控制两个模块。
见图2.1。
游戏界面是整个游戏的运行区域,可动态的观察游戏过程。
游戏控制是用来控制游戏进程的,可以开始游戏,暂停/继续游戏,停止游戏。
图2.1游戏模块划分
第3部分系统设计
1.系统流程图
系统流程图是描绘系统物理模型的传统工具。
它的基本思想是用图形符号描绘系统里面的每个部件,表达信息在各个部件之间流动的情况。
是是
否
否
否
是
图3.1系统流程图
2.类模块设计
本次设计遵循MVC设计模式,主要类之间的关系如下:
图3.2MVC设计模式体现
Snake类:
设置蛇的属性,以及蛇的产生、移动、吃食物、死亡等方法。
Food类:
设置食物的随机产生和是否被吃掉等方法。
Controller类:
监听Snake类以及按键事件,并进行处理。
Game类:
用来控制游戏进程和界面的显示。
3.各类的详细设计
表3.1Snake类
成员
作用
privatebooleanpause;
判断是否暂停
privatebooleanlife;
判断蛇是否死亡
privatebooleanisMoving;
判断蛇是否在移动
privateLinkedListbody;
存放蛇的身体节点
privatevoidinit();
初始化方法
publicvoidmove();
蛇的移动方法
publicvoiddrawMe(Graphicsg);
画出蛇的身体
publicvoidstart();
让蛇开始移动
publicvoiddie();
让蛇死亡
表3.2Food类:
PublicvoidnewFood(Pointp);
设置食物产生的位置
PublicBooleanisSnakeEatFood(Snakesnake);
判断蛇是否吃到食物
publicvoiddrawMe(Graphicsg);
在画布上画出食物
表3.3Ground类:
Privateint[][]rocks;
存放石头的数组
PublicGround();
初始化石头
PublicBooleanisSnakeEatRock(Snakesnake);
判断是否吃到石头
PublicPointgetPoint();
设置食物产生的位置
publicvoiddrawMe(Graphicsg);
在画布上画出石头
表3.4Controller类:
PublicController(Snakesnake,Foodfood,Groundground,GamePanelgamePanel);
初始化控制器类
PublicvoidkeyPressed(KeyEvente);
监听按键事件
PublicvoidsnakeMoved(Snakesnake);
监听蛇的移动
PublicvoidnewGame();
创建新游戏
PublicvoidsetSnake(Snakesnake);
设置蛇
第4部分系统实现
1.界面展示
“贪吃蛇”小游戏适合广大群体,故界面应以简洁直观为主,让
玩家一眼便可了解游戏的操作。
具体游戏界面如下:
游戏初始化界面
图4.1游戏初始化界面
游戏开始界面
图4.2游戏开始运行界面
游戏结束界面
图4.3游戏结束界面
2.游戏的具体实现代码
2.1游戏画布区
publicvoiddisplay(Snakesnake,Foodfood,Groundground){
System.out.println("GamePanel'sdisplay");
this.snake=snake;
this.food=food;
this.ground=ground;
this.repaint();
}
protectedvoidpaintComponent(Graphicsg){
g.setColor(newColor(0xcfcfcf));
g.fillRect(0,0,Global.WIDTH*Global.CELL_SIZE,Global.HEIGHT*Global.CELL_SIZE);
if(ground!
=null&&snake!
=null&&food!
=null){
this.ground.drawMe(g);
this.snake.drawMe(g);
this.food.drawMe(g);
}
}
2.2控制区
privatestaticfinallongserialVersionUID=1L;
privatefinalJButtonbutton_start=newJButton("开始游戏");
privatefinalJButtonbutton_wait=newJButton("暂停游戏");
privatefinalJButtonbutton_stop=newJButton("停止游戏");
privatefinalJLabellabel_tips=newJLabel("方向键控制蛇的移动");
publicGameOptionPanel(){
super();
setLayout(null);
setFocusable(false);
setVisible(true);
button_start.setFont(newFont("楷体",Font.PLAIN,17));
button_wait.setFont(newFont("楷体",Font.P