游戏开发 设计说明书.docx

上传人:b****3 文档编号:3811780 上传时间:2022-11-25 格式:DOCX 页数:15 大小:142.42KB
下载 相关 举报
游戏开发 设计说明书.docx_第1页
第1页 / 共15页
游戏开发 设计说明书.docx_第2页
第2页 / 共15页
游戏开发 设计说明书.docx_第3页
第3页 / 共15页
游戏开发 设计说明书.docx_第4页
第4页 / 共15页
游戏开发 设计说明书.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

游戏开发 设计说明书.docx

《游戏开发 设计说明书.docx》由会员分享,可在线阅读,更多相关《游戏开发 设计说明书.docx(15页珍藏版)》请在冰豆网上搜索。

游戏开发 设计说明书.docx

游戏开发设计说明书

游戏开发设计说明书

 

题目

2048

学号

09

学生姓名

董涛

指导教师

谢逸

所在班级

计科1108班

专业名称

计算机科学与技术

目录

游戏开发课程设计1

目录2

一.课程设计主要内容3

1.题目3

2.需求分析3

3.设计环境3

二.详细设计说明4

1.系统程序流程图4

2.系统概要说明5

3.功能说明5

4.系统各类的知识点说明5

5.主要算法设计6

三.游戏运行说明10

1.游戏运行流程图10

1.游戏开始11

2.游戏进行12

3.游戏结束12

四.课程设计总结13

一.课程设计主要内容

1.题目

2048

2.需求分析

游戏操作需求:

1、可使用鼠标或↑、↓、→、←或W、X、A、D键进行操作;

2、Play按钮重新开始游戏;

3、Undo按钮取消本次操作,回到上一步。

2048游戏算法

1、游戏开始时随机的产生2个数值为2/4的方格,其中1个方格置于4个角中的一个位置,

另一个方格随机的置于其它位置,其余方格值为0。

2、每次移动鼠标或按方向键后,逐行计算移动后的方格值。

每行移动的算法是:

先将所有值为0的数移至行首。

能后从行尾开始逐一和前一个数比较,如果相等则合并这2个格子。

3、每合并一次格子,将其值累计到游戏总分中。

4、一次移动结束后,在所有值为0的方格中随机的分配一个2/4的值。

5、所有方格值不为0且上下、左右相邻的方格都不相等,则游戏结束。

6、2出现的概率为90%,4出现的概率为为10%。

3.设计环境

运行环境:

windowsxp,windows2003windows7

开发环境:

MicrosoftVisualStudio2010

编写语言:

c#

 

二.详细设计说明

1.

系统程序流程图

N

Y

N

Y

Y

N

Y

Y

N

2.系统概要说明

本程序是在VS2010环境下编写的Windows应用程序,函数中利用了画图函数绘制基本方块模型,并通过键盘或鼠标执行相应的操作。

在产生的方块中,调用随机方法,随机产生1~100中的任何一个数字,数字小于90,方块显示数字为2,否则显示为4,每一,通过这种方式,实现了游戏中其中不同模块的数字的随机产生。

3.功能说明

(1)实现可以显示2或者4两张数字的方块

(2)实现各个方块的上下左右移动

(3)实现方块间数字判断与相加

4.系统各类的知识点说明

1.主类

Main()方法

主函数调用主要功能的三个方法,实现程序运行。

2.Cube类(画单元格)

Cube类的功能定义了单个方块的构架。

此类中,定义了不同的数字显示所显示的不同的单元格方块,使方块相加变化明显。

此类中定义了属性currValue//当前得分

以及方法Cube_Paint()方块的绘制,此方法针对可能出现的12中数字显示,运用Graphics类,画出不同的显示的方块

3.forms类(方块的控制)

此类主要实现对方块的控制,实现每种不同操作的实现

此类创建了四个属性

privateCube[]cubes=newCube[16];//创建个个cubes类的数组,实现游戏方块的创建

enumMoveDict{Up,Down,Left,Right};//定义枚举类型,键盘控制方向,上下左右

privateintx1,y1;//鼠标位置

privateintscore=0;//房钱成绩

privateint[]prev=newint[17];/./上一步方格值和积分

Form1()方法:

构造方法,实现方块的实例化创建

start()方法:

游戏的初始化,实现最开始两个方块的摆放。

SavePrevVaule()方法:

保存每上一步的方块值以及成绩,实现撤销一次的操作

LoadPrevValue()方法:

加载上一步值,当进行撤销操作时,调用该方法。

OneMove()方法:

实现移动一次的操作。

此方法调用MoveLine()进行累加,实现成绩的相加

MoveLine()方法:

移动一行的方法

getNextCube()方法:

取下一个方块

CanMove()方法:

通过方块是否能够移动,判断游戏是由结束

pictureBox1_MouseDown()方法:

获取鼠标移动的位置

getDirection()方法:

通过鼠标坐标判断方块的移动方向

Form1_KeyUp()方法:

接受键盘信息,判断方块移动方向

btnPlay_Click()方法:

“开始”按钮的单击事件,调用start()方法,开始游戏

btnUndo_Click()方法:

“撤销”按钮的单机事件,调用LoadPrevValue()方法,进行撤销操作

5.主要算法设计

1.方块值的随机数产生

System.Randomr=newRandom();

intn1=r.Next(1,100);

cubes[0].Value=(n1<90?

2:

4);

通过Random类产生100以内的随机数,数字大于90,方块值为4;小于90,方块值为2

2.游戏初始化两个随机方格位置的摆放

System.Randomr=newRandom();

intc1=r.Next(1,4);

intc2=c1;

do

c2=r.Next(1,16);

while(c2==c1);

for(inti=0;i<16;i++)

cubes[i].Value=0;

intn1=r.Next(1,100);

intn2=r.Next(1,100);

switch(c1)

{

case1:

cubes[0].Value=(n1<90?

2:

4);

break;

case2:

cubes[3].Value=(n1<90?

2:

4);

break;

case3:

cubes[12].Value=(n1<90?

2:

4);

break;

case4:

cubes[15].Value=(n1<90?

2:

4);

break;

}

cubes[c2-1].Value=(n2<90?

2:

4);

四个角随机摆放一个方格,其他位置随机摆放,位置重叠,再随机产生一个

3.保存上一步值的算法实现

privateint[]prev=newint[17];//定义一个数组记录值

for(inti=0;i<16;i++)

prev[i]=cubes[i].Value;//数组前16个元素保存,16个方块的值

prev[16]=score;//数组最后一个元素保存当前成绩值

4.方块移动一次的算法实现

每移动一次,要加载得分,并是先移动后方块的位置摆放以及方块数值的相加及显示

privateintMoveLine(Cubecube1,Cubecube2,Cubecube3,Cubecube4)

{

intscore=0;

if(cube1.Value==0&&cube2.Value==0&&cube3.Value==0&&cube4.Value==0)

return0;

Cube[]cubes={cube1,cube2,cube3,cube4};

ArrayListiCubes=newArrayList();//判断最低行方块值是否为0,为0即不存在方块,去掉为0的方块

for(inti=0;i

if(cubes[i].Value!

=0)

{

iCubes.Add(cubes[i].Value);

}

for(inti=0;i

cubes[i].Value=0;

for(inti=0;i

cubes[i+cubes.Length-iCubes.Count].Value=(int)iCubes[i];

if(cubes[2].Value!

=0)//如果等于0,说明改行只有一个非0的数,则不需要移动和累加数了

{

if(cubes[3].Value==cubes[2].Value)//后一块与前一块方块比较,如果数字相同,则累加成绩

{

score+=2*cubes[3].Value;

cubes[3].Value=2*cubes[3].Value;

if(cubes[1].Value==cubes[0].Value)

{

score+=2*cubes[1].Value;

cubes[2].Value=2*cubes[1].Value;

cubes[1].Value=0;

cubes[0].Value=0;

}

else

{

cubes[2].Value=cubes[1].Value;

cubes[1].Value=cubes[0].Value;;

cubes[0].Value=0;

}

}

else

{

if(cubes[2].Value==cubes[1].Value)

{

score+=2*cubes[2].Value;

cubes[2].Value=2*cubes[2].Value;

cubes[1].Value=cubes[0].Value;;

cubes[0].Value=0;

}

else

{

if(cubes[1].Value==cubes[0].Value)

{

score+=2*cubes[1].Value;

cubes[1].Value=2*cubes[1].Value;

cubes[0].Value=0;

}

}

}

}

returnscore;

}

 

5.获取下一个方块的算法实现

privatevoidgetNextCube()

{

ArrayListiCubes=newArrayList();//去除0之后的方块

for(inti=0;i<16;i++)

{

if(cubes[i].Value==0)

{

iCubes.Add(i);

}

}

if(iCubes.Count>0)

{//在所有为0的数上,随机增加一个数

System.Randomr=newRandom();

cubes[(int)iCubes[r.Next(1,iCubes.Count)-1]].Value=(r.Next(1,100)<90?

2:

4);;

}

else

{

if(CanMove()==false)

{//当不能移动,游戏结束!

MessageBox.Show("GameOver!

");

}

}

}

6.判断游戏是否结束的算法实现

privateboolCanMove()

{

//判断左右是否能够移动,如果存在两个数相同,即方块可以移动累加,返回true,游戏未结束

if(cube1.Value==cube2.Value||cube2.Value==cube3.Value||cube3.Value==cube4.Value||

cube5.Value==cube6.Value||cube6.Value==cube7.Value||cube7.Value==cube8.Value||

cube9.Value==cube10.Value||cube10.Value==cube11.Value||cube11.Value==cube12.Value||

cube13.Value==cube14.Value||cube14.Value==cube15.Value||cube15.Value==cube16.Value

returntrue;

//同理。

判断上下能否移动

if(cube1.Value==cube5.Value||cube5.Value==cube9.Value||cube9.Value==cube13.Value||

cube2.Value==cube6.Value||cube6.Value==cube10.Value||cube10.Value==cube14.Value||

cube3.Value==cube7.Value||cube7.Value==cube11.Value||cube11.Value==cube15.Value||

cube4.Value==cube8.Value||cube8.Value==cube12.Value||cube12.Value==cube16.Value

returntrue;

returnfalse;//全部不能移动,返回false,即游戏结束

}

三.游戏运行说明

1.游戏运行流程图

1.游戏开始

2.游戏进行

3.游戏结束

当方块不能移动时,游戏结束

四.课程设计总结

通过本次课程设计,对.netwindows应用程序有了更多的了解,不过我也发现我的好多不足之处,首先是自己编程粗心大意,经常出错,通过学习也有所改进;再有对C#类库的一些标准方法不太熟悉,还以及对C#语言中经常出现的错误也不了解,通过实践,使我在这几个方面的认识有所提高。

通过实践的学习,我认识到学好计算机要重视实践操作,不仅仅是学习C#语言,还是其它的语言,以及其它的计算机方面的知识都要重在实践,所以后在学习过程中,我会更加注视实践操作,使自己更好地学好计算机。

 

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

当前位置:首页 > 工程科技 > 能源化工

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

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