游戏基础课程设计.docx

上传人:b****0 文档编号:18157049 上传时间:2023-08-13 格式:DOCX 页数:19 大小:29.40KB
下载 相关 举报
游戏基础课程设计.docx_第1页
第1页 / 共19页
游戏基础课程设计.docx_第2页
第2页 / 共19页
游戏基础课程设计.docx_第3页
第3页 / 共19页
游戏基础课程设计.docx_第4页
第4页 / 共19页
游戏基础课程设计.docx_第5页
第5页 / 共19页
游戏基础课程设计.docx_第6页
第6页 / 共19页
游戏基础课程设计.docx_第7页
第7页 / 共19页
游戏基础课程设计.docx_第8页
第8页 / 共19页
游戏基础课程设计.docx_第9页
第9页 / 共19页
游戏基础课程设计.docx_第10页
第10页 / 共19页
游戏基础课程设计.docx_第11页
第11页 / 共19页
游戏基础课程设计.docx_第12页
第12页 / 共19页
游戏基础课程设计.docx_第13页
第13页 / 共19页
游戏基础课程设计.docx_第14页
第14页 / 共19页
游戏基础课程设计.docx_第15页
第15页 / 共19页
游戏基础课程设计.docx_第16页
第16页 / 共19页
游戏基础课程设计.docx_第17页
第17页 / 共19页
游戏基础课程设计.docx_第18页
第18页 / 共19页
游戏基础课程设计.docx_第19页
第19页 / 共19页
亲,该文档总共19页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

游戏基础课程设计.docx

《游戏基础课程设计.docx》由会员分享,可在线阅读,更多相关《游戏基础课程设计.docx(19页珍藏版)》请在冰点文库上搜索。

游戏基础课程设计.docx

游戏基础课程设计

枣庄学院

信息科学与工程学院课程设计任务书

 

题目:

贪吃蛇游戏的设计与开发

 

专业:

计算机多媒体技术专业

课程:

游戏基础

姓名:

姓名:

姓名:

指导教师:

孙晓飞职称:

助教

完成时间:

2013年12月----2014年1月

枣庄学院信息科学与工程学院制

2013年12月29日

课程设计任务书及成绩评定

课程设计的任务和具体要求

任务:

采用VC++实现一个小游戏,或者采用所学VC++技术开发一个程序。

具体要求:

此系统分前台学生端和后台管理端两部分,功能模块如下:

(1)采用软件工程方法来设计、开发软件。

(2)有比较完整的文档。

(3)要求采用课程所学习的VC++开发技术。

(4)最好是游戏的实现,也可采用VC++技术来实现其他类型的软件。

(5)以个人为单位进行设计和开发。

(6)设计小结:

总结课程设计的过程、体会及建议。

(7)其他:

参考文献等。

指导教师评语

 

成绩:

指导教师签字:

日期:

指导教师评语

 

成绩:

指导教师签字:

日期:

课程设计所需软件、硬件等

⏹硬件环境:

Iterl(R)Core(TM)2DuoCPU,主频2.31GHz;内存3G;

硬盘320G以上;1024×768显示分辨率

⏹软件环境:

VS2005等

 

课程设计进度计划

起至日期

工作内容

备注

参考文献、资料索引

序号

编著者

文献、资料名称

出版单位

[1]刘永华,于春花.实用Java网络编程技术.北京:

中国电力出版社,2009年.

[2]朱喜福.Java网络编程基础(第2版).北京:

人民邮电出版社,2008年.

[3]李芝兴.Java程序设计之网络编程.北京:

清华大学出版社,2006年.

 

目录

引言...................................................5

1.工作计划..............................................5

1.1主要任务阶段划分.................................5

1.2工作任务分工.....................................5

2.需求分析..............................................6

2.1概述.............................................6

2.2用户分析.........................................6

2.3约束条件.........................................6

2.4功能需求.........................................6

2.5用户界面需求.....................................7

3.设计与实现.............................................7

3.1概述..............................................7

3.2详细设计..........................................7

3.2.1类的抽象与设计...............................7

3.3主要程序文件......................................8

3.4开发环境以及部署环境要求...........................10

3.5主要源码...........................................10

4.测试....................................................14

4.1概述...............................................14

4.2测试环境...........................................14

4.3测试计划...........................................14

4.4测试项目及结果......................................14

5.工作总结.................................................15

5.1工作成果............................................15

5.2过程分析............................................15

5.3经验教训及其分析....................................15

引言

由于传统的贪吃蛇只是在一个宽阔的用户区进行游戏。

对于蛇只是在区域四周有障碍墙壁,这样也许在一开始不会有太大的难度和成就感。

又由于人们曾经也钟爱一种迷宫游戏,它主要是考察玩家的观察力,看能否在最短的时间里走出迷宫。

基于以上两个游戏,我们准备利用本学期学到的windows界面程序设计方法将两个游戏有机结合起来,使用户既能体验贪吃蛇中看着蛇身不断加长而绕出各种折线的成就感,又能感受到在迷宫中找寻出路的紧张心情,而且迷宫的出现使蛇遇到的障碍遍布游戏区,这样用户就更能展示一下自己操作的高水平。

1工作计划

1.1主要工作阶段划分

项目名称

时间安排

需求分析

2013.2.7——2013.12.8

设计与实现

2013.12.8——2013.12.10

测试与维护

2013.12.10——2013.12.12

1.2工作任务分工

阶段名称

任务名称

任务描述

负责人

需求分析

现有游戏的分析

对现有的贪吃蛇游戏进行分析

李国昌

趣味性分析

对游戏的趣味性、休闲性分析

李国昌

功能需求

对游戏的功能、方式进行分析

李国昌

设计与实现

系统结构设计

游戏的功能、结构分析

张开成

界面设计

用户与游戏交互的设计

张开成

编码实现

具体的编程实现

张开成

测试与维护

功能测试

对游戏的功能进行测试

侯林昊

性能测试

对游戏的性能进行测试

侯林昊

2需求分析

2.1概述

本人进行了对现有游戏代码的分析,借鉴了其中的部分实现思想,进而在组内进行讨论,根据我们的需求参与了程序中两个主要类的设计及类中接口的功能定义。

并实现了CTable类的代码;

实现了对游戏界面框架的部分搭建,诸如对话框的实现等均有本人根据自己的现有知识,再加上网上查些信息、查看MSDN进行编写,而实现的接口则预留出来等待后期的具体核心代码来调用;

对游戏进行了测试,发现了问题并通过老师的帮助进行了解决。

2.2用户分析

1.该游戏至少支持贪吃蛇的基本玩法,创新可以有,但贪吃蛇游戏的经典玩法是不能少的;

2.该游戏对键盘输入要有较快的反应速度;

3.该游戏界面要漂亮一些;

4.该游戏要支持速度选择;

5.该游戏运行要比较稳定。

2.3约束条件

1.该游戏比较简单,要求在一周进行进行完从分析到设计到编码再到测试;

2.提交游戏要有相应的文档。

2.4功能需求

1.贪吃蛇的基本玩法:

即可以用上、下、左、右键控制游戏区蛇的运动方向,使之向着食物方向运动,并吞吃食物使身体增长;

2.调节蛇的运动速度:

即用户可以调节蛇的运动速度来选择不同的难度;

3.选择关卡功能:

即游戏分多个难度级别(关卡),用户可以选择不同的难度级别进行游戏;

4.背景颜色变换功能:

即用户可以选择一种自己喜欢的颜色作为游戏区的背景色,避免对一种颜色产生视觉疲劳。

2.5用户界面需求

1.选择速度和关卡最好不用人手工输入,只是用鼠标点一点

2.界面的有些东西最好可变,不要总是一种界面,让用户自己选择也可以。

3设计与实现

3.1概述

1.界面的设计只是体力活和个人审美的问题,没有什么深奥的问题。

虽说本游戏比较简单,但也是有其核心思想的。

2.本游戏的核心代码即处理蛇的运动吃食的思路是:

把游戏区纵横分成许多小方格,每一个小方格的属性可以是蛇身、食物、空白、墙壁几个属性之一。

蛇运动时用一个数组结构记录蛇的各个蛇身所处的小方格坐标,通过对坐标的处理使蛇的位置不断变化,反应在游戏区中即蛇在不断运动。

3.2详细设计

3.2.1类的抽象及设计

基于需求的分析,该游戏主要由两个类构成:

蛇类用于处理蛇的运动等操作;桌子类用于对桌面上的墙、蛇、食物进行控制。

classCSnake

{

private:

intm_length;//蛇的长度

SPoint*m_pOldPos;//移动前的位置

SPoint*m_pNewPos;//移动后的位置

MoveStatem_oldHeadDir;//蛇头旧的运动方向

MoveStatem_newHeadDir;//蛇头新的运动方向

boolm_bSnakeDied;//蛇是否还存活

intm_oldLength;//蛇的上一状态长度

public:

ObjectMove();//蛇的运动函数

voidChangeDirect(MoveStateDirection);//改变蛇的运动方向

intGetLength();//得到蛇当前长度

SPoint*GetOldPos();//得到蛇上一状态坐标数组

SPoint*GetNewPos();//得到蛇新状态坐标数组

MoveStateGetHeadDir();//得到蛇头方向

voidSetDied(booldied);//设置蛇的生死

voidInitSnake();//初始化蛇

intGetOldLength();//得到蛇上一状态长度

voidIsAddBody();//判断是否增加蛇身长度

CSnake();//构造函数

~CSnake();//析构函数

};

classCTable

{

private:

intm_width;//桌子宽

intm_height;//桌子高

CSnakem_snake;//桌子上的蛇

int**m_board;//桌子各位块状态

public:

CTable();//构造函数

~CTable();//析构函数

voidInitTable();//初始化桌子

boolAddFood();//随机增加食物

boolClear();//清除桌子

voidSnakeMove();//蛇移动

voidChangeSnakeDir(MoveStatedir);//改变蛇运动方向

boolIsSnakeDied();//判断蛇是否死亡

voidSnakeDied(HWNDhwnd);//蛇死亡

CSnake*GetSnake();//得到蛇坐标数组

int**GetBoard();//得到桌子数组

};

3.3主要程序文件

头文件有Map.h,其中只是保存游戏区二维数组中各个位置的属性信息,如果要更改地图布局,只需更改数组中的数字即可,数字的含义在全局变量中都有定义:

enumObject{EMPTY,FOOD,WALL,SNAKE};//标识物体

头文件SnakeGame.h中主要定义了来两个主要的类CSnake、CTable;

实现文件SnakeGame.cpp中对了类中定义的函数以及一些全局的处理函数进行了实现。

主要类只有两个,即CSnake类和CTable类,其全部成员变量即成员函数已在上面一一列举,在这里针对一些主要的数据结构和处理方法进行说明:

structSPoint

{

intx;

inty;

};//蛇的一个结点的坐标位置结构,该类型变量用于记录蛇的一节身体在一个二维数组中的下标值,即蛇身在桌子上的格子的横向和纵向的位置

classCSnake

{

private:

SPoint*m_pOldPos;//移动前的位置,该变量为一个数组的指针,数组在蛇的初始化函数中//分配

SPoint*m_pNewPos;//移动后的位置,同上。

这两个变量是用于在更新蛇的坐标时将用旧的

//蛇身坐标来计算新的蛇身坐标用的

MoveStatem_oldHeadDir;//蛇头旧的运动方向

MoveStatem_newHeadDir;//蛇头新的运动方向,这两个变量的作用是用于判断新的蛇头运动方

//向是否与旧的运动方向相反的,相反是不允许的

public:

ObjectMove();//蛇的运动函数

/*说明:

该函数用于在定时器到达时对蛇的身体各段进行变化处理,处理过程为将未更新前蛇的各点坐标保存在旧态中,根据移动方向改变蛇头坐标值,然后判断新的蛇头所在方格的属性并返回给CTable类处理*/

voidChangeDirect(MoveStateDirection);//改变蛇的运动方向

/*说明:

根据传进来的方向值改变蛇头方向,但不能跟当前蛇头方向相反*/

voidInitSnake();//初始化蛇

/*说明:

用于在游戏中再次初始化蛇,只需设置蛇的初始两个身体坐标,初始运动方向,设置游戏开始即可*/

voidIsAddBody();//判断是否增加蛇身长度

/*说明:

用于在分配给蛇身坐标数组填充满时再一次性多分配若干个长度的空间*/

};

classCTable

{

private:

int**m_board;//桌子各位块状态,这是一个二维数组,其中用于填充桌子各方格的属性

public:

voidInitTable();//初始化桌子,针对不同的游戏难度级别从Map.h中调入不同的地图

boolAddFood();//在桌子上空白区域随机增加一个食物

boolClear();//清除桌子上除了墙以外的其他方格的属性

voidSnakeMove();//蛇移动,只要调用CSnake的相应函数就可以了,根据返回的蛇头位置属性

//信息对蛇的坐标进行变换

};

3.4开发环境以及部署环境要求

开发环境:

VS2008,WindowsXPSP3

3.5主要源码

ObjectCSnake:

:

Move()//处理蛇运动的方法

{

m_oldLength=m_length;//未更新前的长度成为旧值

for(inti=0;i

{

m_pOldPos[i].x=m_pNewPos[i].x;

m_pOldPos[i].y=m_pNewPos[i].y;

}//将未更新前蛇的各点坐标保存在旧态中

switch(m_newHeadDir)//蛇头当前要移动的方向,根据移动方向改变蛇头坐标值

{

caseS_UP:

m_pNewPos[0].y--;

break;

caseS_DOWN:

m_pNewPos[0].y++;

break;

caseS_LEFT:

m_pNewPos[0].x++;

break;

caseS_RIGHT:

m_pNewPos[0].x--;

break;

}

intm=m_pNewPos[0].x;

intn=m_pNewPos[0].y;

intiObject=GetData(m,n);//判断蛇头移动后到什么地方

switch(iObject)

{

caseEMPTY:

//蛇头所在位置为空,则蛇顺利移动

for(inti=1;i

{

m_pNewPos[i].x=m_pOldPos[i-1].x;

m_pNewPos[i].y=m_pOldPos[i-1].y;

}//从旧态复制相应坐标到新态

returnEMPTY;

break;

caseFOOD:

//蛇头所在位置有食物

IsAddBody();//判断是否需要增加蛇最大长度

m_length++;//蛇长度加

for(inti=1;i

{

m_pNewPos[i].x=m_pOldPos[i-1].x;

m_pNewPos[i].y=m_pOldPos[i-1].y;

}

returnFOOD;

break;

caseWALL:

//撞墙就挂了

m_bSnakeDied=true;

returnWALL;

break;

caseSNAKE:

//自残也得死

m_bSnakeDied=true;

returnSNAKE;

break;

}

returnEMPTY;//这个其实不会被执行,但不写编译时总提示,反正写了也不费事

}

voidCTable:

:

SnakeMove()//CTable中对蛇运动的处理

{

for(intx=2;x<28;x++)

{

for(inty=2;y<43;y++)

{

if(m_board[x][y]==FOOD)

continue;

if(m_board[x][y]==SNAKE)

continue;

if(m_board[x][y]==EMPTY)

continue;

if(m_board[x][y]==WALL)

continue;

m_board[x][y]=EMPTY;

}

}//蛇移动先把旧的蛇清理掉

inti=m_snake.GetLength()-1;

intm=(m_snake.GetNewPos())[i].x;

intn=(m_snake.GetNewPos())[i].y;

m_board[n][m]=EMPTY;

if(++iFirst==0)//如果是第一次启动则自动先加个食物,以后吃掉才加

AddFood();

ObjectHeadObject=m_snake.Move();//蛇要动了

switch(HeadObject)//根据返回的蛇头状态相应摆放桌子上的东西

{

caseEMPTY:

//空的就没有什么可摆的了

{

intx=(m_snake.GetNewPos())[0].x;

inty=(m_snake.GetNewPos())[0].y;

m_board[y][x]=SNAKE;

}

break;

caseFOOD:

//吃了食物要再给加的

{

intx=(m_snake.GetNewPos())[0].x;

inty=(m_snake.GetNewPos())[0].y;

m_board[y][x]=SNAKE;

AddFood();

}

break;

caseWALL:

caseSNAKE:

//这两种就没的说了,只能死了

m_snake.SetDied(true);

bGameOver=true;

bGameBegin=false;

SnakeDied(hwndonly);

m_snake.InitSnake();//这是为下一次重新玩作准备

Clear();

return;

break;

}

for(inti=1;i

{

intm=(m_snake.GetNewPos())[i].x;

intn=(m_snake.GetNewPos())[i].y;

m_board[n][m]=SNAKE;

}//该有蛇的地方放好

}

voidCSnake:

:

IsAddBody()//增加蛇身的代码

{

if((m_length%100)==0)

{

SPoint*temp1;

temp1=newSPoint[m_length+100];

for(inti=0;i

{

temp1[i].x=m_pNewPos[i].x;

temp1[i].y=m_pNewPos[i].y;

}

delete[]m_pNewPos;

m_pNewPos=temp1;

SPoint*temp2;

temp2=newSPoint[m_length+100];

for(inti=0;i

{

temp2[i].x=m_pOldPos[i].x;

temp2[i].y=m_pOldPos[i].y;

}

delete[]m_pOldPos;

m_pOldPos=temp2;

}

else

return;

4测试

4.1概述

1.测试速度选择菜单是否可以正常使用并对游戏效果产生需求所要求的影响;

2.测试背景色选择菜单是否可以正常使用并对游戏效果产生需求所要求的影响;

3.测试难度级别菜单是否可以正常使用并对游戏效果产生需求所要求的影响;

4.测试游戏是否可以正常操作

5.测试游戏是否有较好的响应速度。

4.2测试环境

个人笔记本电脑一台,windowsXP操作系统;1G内存。

4.3测试计划

1.对基本的菜单功能进行测试:

点击相应菜单,看是否能够进行正确的响应并对游戏进行了预期的设置;

2.对对话框的测试,打开对话框,对对话框内的控件进行点击测试,看是否能够正确响应并对游戏进行预期的设置;

3.对游戏控制键的测试:

开始游戏,用键盘对游戏进行控制测试,看游戏是否及时正确处理键盘输入事件;

4.对游戏整体测试:

进行每一关的游戏测试,看是否能正确进入相应关卡并正确运行,看违反游戏规则时游戏是否会结束;

5.对游戏占用内存的测试:

运行游戏,看游戏占用的内存资源是否处于一个稳定的范围内,以此测试游戏是否有申请内存没有释放的问题。

4.4测试项目及结果

测试项目

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

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2