杀人游戏.docx

上传人:b****6 文档编号:7971177 上传时间:2023-01-27 格式:DOCX 页数:9 大小:144.12KB
下载 相关 举报
杀人游戏.docx_第1页
第1页 / 共9页
杀人游戏.docx_第2页
第2页 / 共9页
杀人游戏.docx_第3页
第3页 / 共9页
杀人游戏.docx_第4页
第4页 / 共9页
杀人游戏.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

杀人游戏.docx

《杀人游戏.docx》由会员分享,可在线阅读,更多相关《杀人游戏.docx(9页珍藏版)》请在冰豆网上搜索。

杀人游戏.docx

杀人游戏

 

课程设计说明书

 

课程名称:

《算法分析与设计》课程设计

设计题目:

杀人游戏

2011年12月6日

1.设计背景

1.1问题描述

周末晚上,N个人围成一圈玩杀人游戏,按顺时针编号1,2,3,4,5……..,A是杀手,构思了他的杀人计划:

A从1号开始顺时针数到第M号就杀掉第一个人,被杀掉的人要退出游戏。

如果第M个人恰好是A自己,他就杀掉他顺时针方向的下一个人。

A从被杀的人的下一个顺时针数M个人,把第M个人杀掉。

重复以上过程,直至杀掉所有人。

A把这个杀人计谋告诉了法官,法官告诉了警察,警察应该如何选择座位才能活到最后?

1.2开发环境和工具

该职工管理系统系统是在VisualC++6.0集成环境下和WindowsXP操作系统平台下开发的。

1.3开发语言

该职工管理系统使用C语言开发,C语言是一种计算机程序设计语言。

它既具有高级语言的特点,又具有汇编语言的特点。

它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。

 

2.设计方案

2.1程序执行流程

以五人参与游戏为例,假设A选择1号为,每隔3个人杀掉一个人,过程如下:

(1)刚开始位置

(2)第一次三号位被杀

 

(3)转到一号位,一号位是A,转到下一个,2号位被杀

 

(4)因为三号以被杀,从四号还是转,转到一号位跳过,四号被杀

(5)剩余五号位,警察应该选择五号位与杀手A对决

2.2数据结构设计

1.每个玩家的数据结构设计,应包括座位号,以及状态。

2.在游戏进行时,考虑到第M个事杀手或者已死亡,需要计数器加一。

于是设计动态数组用来作为玩家,存储座位号和状态,如下:

typedefstruct{

intlength;//length待指N

int*flag;//flag为1,表示为未被杀。

为0表示被杀。

2表示为杀手

int*seat;//seat用于保存座位序号

}Player;

2.3函数功能设计

1、初始化

2、进行杀人过程

3、被杀者的状态

4、判断是否跳过

 

3.方案实施

3.1初始化函数

intInitPlayer(Player&Lp,intn)//初始化

{

Lp.flag=(int*)malloc(n*sizeof(int));

Lp.seat=(int*)malloc(n*sizeof(int));

if(!

Lp.flag||!

Lp.seat)exit(-2);

Lp.length=0;

return1;

}

 

3.2进行杀人过程

每杀死一个人,便有一人退出,于是首先考虑到递归算法,初步设计递归函数如下:

intKillMan(Player&Lp,intm,inta,intdead,inttemp)

//intN,inta,intm,intdeadN,a,m分别与main中定义照应,

{

if(temp>2)//dead表示当前被杀死的人座位号

{

dead=DeletePlayer(Lp,m+dead);//DeletePlayer(Lp,m+dead)为杀人函数

temp--;//每杀死一人,计数器temp就减1.

KillMan(Lp,m,a,dead,temp);

}

Else//表示除了杀手外只剩下警察,结束递归

{

for(intn=0;n

{

if((Lp.flag[n]==1)&&(Lp.seat[n]!

=a))

{

returnn;//返回警察应该选择的座位号。

}

}

}

}

3.3被杀者的状态

递归设计好后,开始设计DeletePlayer()函数,考虑到第M个人可能是杀手或者已死亡,于是设计跳过函数JumpNext()函数,对第M号进行判断。

intDeletePlayer(Player&Lp,inti)//杀死后节点flag=0;

{

i=JumpNext(Lp,i);//检测i是否已经被杀,是否是a,是否大于N。

Lp.flag[i-1]=0;//座位号码为i,设置其flag为0,表示已死亡

printf("Player%dwasdead!

\n",Lp.seat[i-1]);

returni;//返回当前被杀死的座位号。

以进行下一轮。

}

3.4判断是否跳过

杀手杀人函数设计完成后着手设计跳过函数JumpNext(),要跳过杀手,跳过已死亡玩家,由于再设计递归时,采用的是圆圈循环结构,所以要对座位号进行判断,因为当前死亡座位号加上间隔M,可能大于总人数。

所以设计函数如下:

intJumpNext(Player&Lp,inti)

{

while(i>Lp.length)//首先对当前死亡座位号+M判断,大于总人数则

{//减去总人数,直到小于总人数。

i=i-Lp.length;

}

while(Lp.flag[i-1]==0||Lp.flag[i-1]==2||i>Lp.length)

//判断是否已死亡,或者是杀手,则+1,

{

i++;

if(i>Lp.length)//如果+1后大于总人数,则减去总人

i=i-Lp.length;//数,继续判断,直到符合规定。

}

returni;//返回处理后的i值

}

4.结果与结论

4.1出入初始状态

4.2杀人过程及结果

5.收获与致谢

在本次课程设计中,独立完成了杀人游戏算法与算法实现等模块设计,对算法使用有了更深一层次的理解。

经过调试实现了以上模块的功能。

该课程设计还有很多不足之处,例如算法结构不够简洁。

本次课程设计之中,遇到很多问题,在所有成员的努力下,把问题一一解决,共同完成了一个杀人游戏实现过程,同时也提升每个成员自身解决问题与他人合作的能力。

6.参考文献

[1]《C程序设计教程》谭浩强编著(清华大学出版社2008)

[2]《算法与分析》(C语言版)严蔚敏吴伟民编著(清华大学出版社2007)

[3]《C程序设计(课程设计)》刘振安刘燕君编著(机械工业出版社2004.9)

7.附件

killman.rar

指导教师评语:

1、课程设计报告:

a、内容:

不完整□完整□详细□

b、方案设计:

较差□合理□非常合理□

c、实现:

未实现□部分实现□全部实现□

d、文档格式:

不规范□基本规范□规范□

2、出勤:

全勤□缺勤次

3、答辩:

a、未能完全理解题目,答辩情况较差□

b、部分理解题目,部分问题回答正确□

c、理解题目较清楚,问题回答基本正确□

d、理解题目透彻,问题回答流利□

课程设计报告成绩:

,占总成绩比例:

50%

课程设计其它环节成绩:

环节名称:

出勤,成绩:

,占总成绩比例:

20%

环节名称:

答辩,成绩:

,占总成绩比例:

30%

总成绩:

指导教师签字:

年月日

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

当前位置:首页 > 经管营销 > 财务管理

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

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