人机猜数字游戏课程设计报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算机科学与技术系
课程设计报告
2013~2014学年第一学期
课程C语言课程设计
课程设计名称人机猜数字游戏
学生姓名
学号
专业班级网络工程(一)班
指导教师王竹婷刘洁群
2014年6月
目录
一、问题分析和任务定义 (3)
二、概要设计和数据结构的选择 (3)
三、详细设计和编码 (3)
四、上机调试 (6)
五、用户使用说明 (7)
六、测试结果 (7)
七、附录:带注释源程序 (9)
八、参考书目 (11)
一、问题分析和任务定义
问题分析:
问题本身清楚明了。判断相同位置上的数字是否相同不需要特殊的算法。只截取相同位置上的数字进行比较即可。但在判断几位数字正确时,则应当注意:计算机所想的是“1123”,而人所猜的是“1576”,则正确的数字只有1位。所以我们再用到循环结构,判断结构,余数比较的时候要注意重复,所以应该死有标志变量。
程序中截取计算机所想的数的每位数字与人所猜的数字按位比较。若有两位数字相同,则要记信所猜中数字的位置,使该位数字只能与一位对应的数字“相同”。当截取下一位数字进行比较时,就不应再与上述位置上的数字进行比较,以避免所猜的数中的一位与对应数中多位数字“相同”的错误情况。
猜数字处理系统,包括三个模块,和一个主函数。三个模块分别是电脑产生一个正确的随机数,读取玩家正确的四位数,电脑与玩家数字的比较。其中脑产随机数函数和主函数为整型,其它都无返回类型。主函数通过在不断循环使用三大模块来实现。该程序采用面向对象的思想,来处理函数之间的调用,实现这个人机猜数字游戏。
任务定义:
可知,整个程序的设计实现大致分为三个部分,
(1)菜单,在用户界面上产生指示,让用户知道如何来参与这个游戏。
(2)产生随机数部分,利用随机函数来产生随机数,即计算机给的数。
(3)猜数对比输出部分,程序的核心部分,运用for循环,if判断语句,来提示参与者猜对了几个数,位置对了几个。
二、概要设计和数据结构的选择
1、使用for循环结构,if判断结构,比较余数,完成逐个比较,从而输出猜对了几个数,位置对了几个
2、运用子函数,指针传递地址,使主函数看起来更简便
3、加入判断,返回主函数,是否继续。
三、详细设计和编码
(一)算法及说明
计算机“想”了一个“1234”请人猜,可能的提示如下:
人猜的整数计算机判断有几个数字正确有几个位置正确1122 2 1
3344 2 1
3312 3 0
4123 4 0
1243 4 2
1234 4 4
游戏结束如以上分析,本次课题是猜数字游戏的设计与实现。主要是通过C++语言开发,实现《猜数字》游戏中的出数字方,在VC环境中实现了由电脑随机产生一个数字不重复的四位数(最高位不为零),并将所猜的数与它自动产生的数进行比较,若猜得不对并作出提示:"mAnB",A代表位置正确数字也正确,B代表数字正确但位置不正确。m代表A 的个数,n代表B的个数.在每次输入数字后,显示相应的提示信息,直到玩家猜对为止.这次课设是要求用C++编写程序,实现数字之间的相互比较,让玩家找出电脑写的四位数字,而玩家在找出四位数字中,电脑需要给出玩家一些提示信息,用以帮助玩家找出答案。对猜一个各个位数不等的四位数,电脑需要在程序刚运行时,确定一个随机的四位数,且各个位数不相等。而在玩家输入数字时,也需要检验玩家输入的数字是否满足条件,即一个各个位数不重复的四位数。只有玩家输入正确的数字后,电脑才能进行比较数字的运算,如果玩家输入的数字和电脑的不相等,输出提示信息,并应从新读取玩家的数字进行判断,直到玩家放弃猜数字或数字猜对为止。
(二)程序流程图
图2.1 流程图
(三)、函数及简介
V oid Panduan(int g, int z, int *k, int *j):接收用户输入的数字和正确的数字,进行判断,并把猜对的数的个数和位置保存到变量*k, *j 中。
四、上机调试
我们编写的程序不可能一次就成功的,要经过反复的调试,但错误是不可避免,而且高,编译器一般不报错,往往要费一番周折才能解决。经验、习惯和对C语言深刻理解成为彻底避免这类问题的关键因素。
对于此次的课程设计,从一开始的写程序到最终的成功运行,虽然这个程序并不像其他多样化的管理系统那样复杂,但是在编写和上机调试过程中,仍然出现不少问题。
子函数里的错误:
void panduan(int g,int z,int *k,int *j)
{
int a,b[4],i,t,m,s;
a=z;*j=0;*k=0;b[0]=b[1]=b[2]=b[3]=0;
for(i=1;i<5;i++)
{
s=g;m=1;
for(t=1;t<5;t++)
{
if(a%10==s%10)
{
if(m&&t!=b[0]&&t!=b[1]&&t!=b[2]&&t!=b[3])
{
*j+=1;m=0;b[j-1]=t;
}
if(i==t) *k+=1;
}
s/=10;
}
a/=10;
}
}
现在从中发现错误,在b[j-1]=t中,j是原量,而*j是指针传递原变量,并读
写,所以在这里有这个错误,改正即可。
五、用户使用说明
首先运行该游戏,进入开始界面。计算机会提醒你:我有一个数请你猜一猜,然后请输入一个四位数。计算机会提醒你,猜对了几个数,并且有几个数位置也是正确的。然后你在判断哪几个或哪一个是对的,位置也是对的。后面的猜数也是考验你的眼里与脑力,根据计算机的提示,可以采用逐个比较。如:你猜了一个数字:1234,;计算机提示:有2个数是对的,并且有0个位置也是对的。然后你判断,1、2可能是对的;3、4也有可能是对的;所以你可以先尝试着,如1200或3400看到底哪两个是正确的,当然0也可能是对的,所以需要再一次验证。
当然我们每输入一个字都需要按一下回车,然后看到提示再按回车,进行下一步。这样直到猜出正确的数字,恭喜你!然后计算机会提示:again? Y/N,你可以选择Y,接着游戏,也可以选择N进行结束。
六、测试结果
1、调试分析
输入的游戏玩家人数太多时屏幕显示不能控制为一页一页显示,所以为了方便起见,不要输入太多记录,十七左右为最佳。刚开始执行输入函数,按数字顺序输入输完后执行显示功能,数字、字母的位置显示不对,试着在其中增加一些语句,希望能把所需结果按正常顺序显示,但暂时没有成功,最后在老师的帮助下,所需结果能按正常顺序输出了。在前面对猜数字游戏进行需求分析的过程中,已经初步明确了系统的主要功能模块和用户需求,下面将在总体设计的过程中,给出猜数字游戏的模块结构、流程描述以及界面布局,并使得系统的总体设计符合软件工程中总体设计的基本原则。开发与设计的总体思想猜数字游戏是一种大众娱乐游,开发与设计的重点在于游戏供玩家进行猜数字游戏的原始数字的产生和用户每进行猜数字操作之后的游戏提示,这方面的规则设计往往决定了软件运行的正确性和质量。同时,要谨调试失败的原因以免下次犯同类错误
2、测试运行结果截屏及说明
游戏开始界面,可正常工作运行;