计算机科学与技术专业综合课程设计报告.docx

上传人:b****2 文档编号:24282206 上传时间:2023-05-26 格式:DOCX 页数:26 大小:330.10KB
下载 相关 举报
计算机科学与技术专业综合课程设计报告.docx_第1页
第1页 / 共26页
计算机科学与技术专业综合课程设计报告.docx_第2页
第2页 / 共26页
计算机科学与技术专业综合课程设计报告.docx_第3页
第3页 / 共26页
计算机科学与技术专业综合课程设计报告.docx_第4页
第4页 / 共26页
计算机科学与技术专业综合课程设计报告.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

计算机科学与技术专业综合课程设计报告.docx

《计算机科学与技术专业综合课程设计报告.docx》由会员分享,可在线阅读,更多相关《计算机科学与技术专业综合课程设计报告.docx(26页珍藏版)》请在冰豆网上搜索。

计算机科学与技术专业综合课程设计报告.docx

计算机科学与技术专业综合课程设计报告

计算机科学与技术专业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.PLAIN,17));

button_stop.setFont(newFont("楷体",Font.PLAIN,17));

label_tips.setFont(newFont("楷体",Font.PLAIN,25));

button_start.setFocusable(false);

button_wait.setFocusable(false);

button_stop.setFocusable(false);

label_tips.setFocusable(false);

button_start.setBounds(10,10,110,40);

button_wait.setBounds(145,10,110,40);

button_stop.setBounds(280,10,110,40);

label_tips.setBounds(70,70,300,40);

add(button_start);

add(button_wait);

add(button_stop);

add(label_tips);

}

publicJButtongetStartButton(){

returnbutton_start;

}

publicJButtongetWaitButton(){

returnbutton_wait;

}

publicJButtongetStopButton(){

returnbutton_stop;

}

publicJLabelgetTipsLabel(){

returnlabel_tips;

}

2.3蛇的移动

publicvoidmove(){

if(!

(oldDirection+newDirection==0)){

oldDirection=newDirection;

}

System.out.println("Snake'smove");

oldTail=body.removeLast();

intx=body.getFirst().x;

inty=body.getFirst().y;

switch(oldDirection){

caseUP:

y--;

if(y<0){

y=Global.HEIGHT-1;

}

break;

caseDOWN:

y++;

if(y==Global.HEIGHT){

y=0;

}

break;

caseLEFT:

x--;

if(x<0){

x=Global.WIDTH-1;

}

break;

caseRIGHT:

x++;

if(x==Global.WIDTH){

x=0;

}

break;

}

PointnewHead=newPoint(x,y);

body.addFirst(newHead);

}

2.4监听按键

publicvoidkeyPressed(KeyEvente){

if(!

snake.isPause()&&snake.isLive()&&snake.isMoving()){

switch(e.getKeyCode()){

caseKeyEvent.VK_UP:

snake.changeDirection(Snake.UP);

break;

caseKeyEvent.VK_DOWN:

snake.changeDirection(Snake.DOWN);

break;

caseKeyEvent.VK_LEFT:

snake.changeDirection(Snake.LEFT);

break;

caseKeyEvent.VK_RIGHT:

snake.changeDirection(Snake.RIGHT);

break;

}

}

}

2.5画出蛇的身体

publicvoiddrawMe(Graphicsg){

g.setColor(Color.BLUE);

for(Pointp:

body){

g.fill3DRect(p.x*Global.CELL_SIZE,p.y*Global.CELL_SIZE,Global.CELL_SIZE,Global.CELL_SIZE,true);

}

}

2.6随机产生食物

publicPointgetPoint(){

Randomradom=newRandom();

intx=0,y=0;

do{

x=radom.nextInt(Global.WIDTH);

y=radom.nextInt(Global.HEIGHT);

}while(rocks[x][y]==1);

return(newPoint(x,y));

}

2.7初始化墙

publicGround(){

for(intx=0;x

rocks[x][0]=1;

rocks[x][Global.WIDTH-1]=1;

}

for(inty=0;y

rocks[0][y]=1;

rocks[Global.HEIGHT-1][y]=1;

}

}

第5部分系统测试

5.1测试概述

进行软件测试是对系统的性能、完善程度以及安全性进行测试,在现今这个科技发达的时代,软件应用于各个领域,如果一个软件未经过细致的系统测试就投入使用,在使用过程中一旦出现问题后果将不堪设想,这不仅仅是对用户负责,更是对开发人员自身负责,通过系统测试不断地发现问题和解决问题,在以后的工作中就会减小这些漏洞出现的几率,不断地完善每一个软件是每一个软件开发人员共同的愿望。

所以,进行系统测试是十分必要的。

在进行本次游戏设计的过程中,对于软件的测试一直贯穿始终,对于在开发过程中的代码和文档,以及系统完成后都在进行测试。

测试并不仅仅是为了找出错误,通过分析错误产生的原因和错误的发生趋势,可以帮助项目管理者发现当前软件开发过程中的缺陷,以便及时改进。

测试主要分5种,即单元测试、集成测试、确认测试和白盒测试和黑盒测试。

本次游戏测试主要采用黑盒测试方法,检查游戏功能是否能实现。

5.2详细测试

5.2.1测试一

测试内容:

是否能正常开始游戏

测试方法:

点击开始按钮

预期结果:

游戏区出现蛇、食物和墙,蛇会移动

测试结果:

和预期一样,祥见图5.1

图5.1开始按钮测试

5.2.2测试二

测试内容:

是否能暂停/继续游戏

测试方法:

点击暂停/继续按钮

预期结果:

点击暂停后蛇停止移动,按钮变为继续游戏,点击继续后沿原方向移动,按钮变为暂停游戏。

测试结果:

和预期一样,祥见图5.2和图5.3

图5.2暂停游戏测试

图5.3继续游戏测试

5.2.3测试三

测试内容:

蛇是否能吃食物身体变长

测试方法:

控制蛇移动去吃食物

预期结果:

吃食物后蛇身体变长一节,同时产生一个新的食物

测试结果:

和预期一样,祥见图5.4

图5.4蛇吃食物测试(蛇身体默认为3节)

5.2.4测试四

测试内容:

蛇撞墙是否会死

测试方法:

控制蛇移动去撞墙

预期结果:

蛇死亡不再移动,游戏结束

测试结果:

和预期一样,祥见图5.5

图5.5蛇撞墙死亡测试

5.2.5测试五

测试内容:

蛇吃到自己身体是否会死

测试方法:

控制蛇移动让蛇头吃到自己身体

预期结果:

蛇死亡不再移动,游戏结束

测试结果:

和预期一样,祥见图5.6

图5.6蛇吃到自己身体测试

第6部分系统总结

本次课程设计从游戏界面和游戏控制两方面实现了比较完善的功能,因为本人能力有限,还需要学习的地方很多,所以还是不尽完美,有很多可以优化的地方,但游戏的基本功能都很齐全,相比之前做的管理系统类的设计,应该可以说是又上升了一个层次。

虽然在设计中遇到了很多困难,比如说为了修改一个小小的bug而花费一整天,重新去学习新的知识,改了一次又一次等等,但是终于功夫不负有心人,游戏的功能都基本上实现了,作为一个学习计算机的人,尤其是一个即将毕业的大四学生,更需要有坚持不懈的毅力和不断学习新知识的激情,困难只是我们走向成功的阶梯。

当你克服一个一个的困难后,会感到满满的成就感。

总体来说,这次课设对我自己是一次很好的锻炼机会,不仅把以前学到的只是温习了一遍,还学习到了很多新知识,而且还提高了敲代码的能力。

对设计中遇到的问题,通过仔细思考和查阅资料,使得问题得以解决,对自己以后独立思考解决问题的能力也有很大帮助。

参考文献

1李芝兴杨瑞龙.Java程序设计之网络编程(第2版).清华大学出版社,2013.7

2张海藩牟永敏.软件工程导论(第6版).清华大学出版社,2015.7

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 环境科学食品科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1