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