约瑟夫生死游戏课程
第一章 问
背景
约瑟夫生死游戏是一款生死抉择的游戏,由于某种原因,需要在一群人中踢出一部分人,被踢出的人将会面临死亡的威胁,因此大家都不想成为那个被踢除的那个人,但是又必须踢出一些人才能保证其他人的安全,你的位置会影响你的生死,所以位置的选择很重要。
1
第二章 系统分析
2.1系统总需求
如果有r个人,需要剔除w个人,让他们围成一个圈,由第一个人数起,依次报数,数到第s个人,便把他剔除,然后再从他的下一个人数起,数到第s个人,再将他剔除,直至剔除了w个人时停止,没剔除的则生还。 2.2 功能需求
约瑟夫生死游戏能够精确的找到死亡者的位置,并且能够灵活的确定剔除第几个人,以及要剔除多少人,并且能够对很多人的情况下迅速确定生者和死者的位置。
整个游戏主要分为几个模块:队列初始化,入队,查找死亡位置,排序,生者位置的确定,输出死者位置。
队列初始化:对队列中每个人进行初始化。
入队:对每个人进行赋值,并且进行入队操作。
查找死亡位置:通过一控制块控制入队,出队,从而找到死亡位置,并且把死亡位置保存到数组。
排序:把死亡位置按从小到大进行排序,以便观看结果。
生者位置的确定:通过已经确定的死亡位置来确定生者位置,并对生者位置进行输出。
输出死者位置:对已排序的死亡位置进行输出。
2.3 数据需求
第i个人员信息=i-1;
总人数;
踢除第几个人;
剔除人数;
2
第三章 系统设计
3.1 系统体系结构
约瑟夫生死游戏通过通过一控制块控制入队,出队,找到死亡位置,从而确定生者位置。主要包括确定死亡位置和确定生者位置。约瑟夫的软件结构如图3.1所示。
约瑟夫生死游 戏
确定死亡位确定生者位
置 置
图3.1系统结构
3.2 各子功能模块设计
3.2.1确定死亡位置
(1)功能:通过通过一控制块控制入队,出队,找到死亡位置,并保存死亡位置。
(2)程序
图:约瑟夫生死游戏的程序流程图如图3.2所示。
3
开始
剔除人数是否小
于总死亡数
是
否 入队,出队控制块
剔除,并保存
符合 进行剔除的位置
判断 进行入队,
出队操作 剔除人数加
一
结束
图3.2 确定死亡位置
3.3 数据结构设计
3.3.1员工信息
数据结构设计人员信息
包括每个人员位置对应的值,以及队头,队尾的位置。 typedef struct
{
DATATYPE data[maxsize];//队中元素
int front,rear; //队头元素下标、队尾元素后面位置的下标 } SEQQUEUE;
4
第四章 系统实现 4.1人机交互部件
本系统的一个重要特点就是系统启动之后,同时显示主窗口,主窗口为可用,
必须在主窗口中进行赋值才可运行。
输入与显示为:
主要代码为:
//队列的插入
for(i=0;i<=r-1;i++)
{
temp=i;
QueueIn(&game,temp);
}
//找出死亡位置,并保存到数组p[m]
for(m=0;m<=w-1;)
{ n=0;
for(n=0;n
=w) break;
}
//将死亡位置从小到大输出
for(m=0;mp[j])
{t=p[m];
p[m]=p[j];
p[j]=t;
}
}
//找到生者位置并输出
for(y=1;y<=r;y++)
{
for(j=h;j<=w-1;)
{ z=p[j];
if(y!=z+1)
{
printf("生者的位置:");
printf("%d\n",y);
break;
}
if(y==z+1)
{
h++;
if(h>=w-1) h=w-1;
break;
}
}
6
}
//输出死亡者的位置
for(m=0;m表5.1.1
序 输入/动作 期望输出/相应 实际情况
号
输入人数:10
数到第几个人符合
1 则剔除:3
死亡的人数:4
输入人数:15
2 数到第几个人
则剔除:6 符合
死亡的人数:5
表5.1.1输入与显示
8
结 论
本游戏是一款生死抉择的游戏,由于某种原因,需要在一群人中踢出一部分人,被踢出的人将会面临死亡的威胁,因此大家都不想成为那个被踢除的那个人,但是又必须踢出一些人才能保证其他人的安全,你的位置会影响你的生死,所以位置的选择很重要,本游戏就起到了一个找到死亡位置的做用,其采用了数据结构中队列的
,通过一控制块控制入队,出队,找到死亡位置,并保存死亡位置,这样,生者的位置就能通过死者的位置确定。
系统在设计过程中不可避免地遇到了各种各样的问题,由于整个系统完全都是由个人设计的,,加之本人水平有限,代码过多,结构性不强,需要进行不断地补充和完善。
9
参考文献
[1]张乃孝.算法与数据结构.高等教育出版社.2010年11月,第二版 [2]杨路明.C语言程序设计教程.北京邮电大学出版社.2010年12月,第二版 [2]马石安.面向对象程序设计教程.清华大学出版社.2007年8月,C++语言描述
10
结束语
这次课程设计让我熟练掌握了队列,以及数组的动态内存申请,并且让我对与编写大程序的能力有较大的提升,同时也提高了我编写大程序时的全局思想能力,这次编程,我发现编写一些大程序对于提高编程能力有很大的帮助,能够把平时所学联系起来,对所学知识的真正理解有很大的帮助,这是我最大的收获。
同时,这次编程让我发现自己还有不足之处,编写的程序比较乱,结构不紧凑,可读性不强,这是我目前需要改进的。
11
目 录
第一章 问题背景 ......................................................................................................................... 1 第二章 系统分析 ........................................................................................................................... 2
2.1系统总需求 ........................................................................................................................ 2
2.2 功能需求 ........................................................................................................................... 2
2.3 数据需求 ........................................................................................................................... 2 第三章 系统设计 ............................................................................................................................. 3
3.1 系统体系结构 ................................................................................................................... 3
3.2 各子功能模块设计 ....................................................................................................... 3
3.2.1确定死亡位置 ........................................................................................................ 3
3.3 数据结构设计 ............................................................................................................... 4
3.3.1员工信息 ................................................................................................................ 4 第四章 系统实现 ............................................................................................................................. 5
4.1人机交互部件 .................................................................................................................... 5
4.2系统特点............................................................................................................................ 7
4.3关键技术............................................................................................................................ 7 第五章 系统测试 ........................................................................................................................... 8
5.1输入与显示: .................................................................................................................... 8 结 论................................................................................................................................................. 9
参考文献......................................................................................................................................... 10
结束语............................................................................................................................................. 11
12