人机猜数字游戏课程设计报告
葡萄产地-学生手抄报
C语言课程设计报告书
计算机科学与技术系
课程设计报告
2013~2014学年第一学期
课程 C语言课程设计
课程设计名称
人机猜数字游戏
学生 姓名
学号
专业班级 网络工程(一)班
指导教师 王竹婷 刘洁群
2014年 6月
厚德 博学
善思 致用
1
C语言课程设计报告书
目 录
一、 问题分析和任务定义…………………….….………..3
二、
概要设计和数据结构的选择…………………………3
三、详细设计和编码………………………..………........3
四、上机调试......................................6
五、用户使用说明..................................7
六、测试结果......................................7
七、附录:带注释源程序............................9
八、参考书目......................................11
厚德 博学
善思 致用
2
C语言课程设计报告书
一
、问题分析和任务定义
问题分析:
问题本身清楚明了。判断相
同位置上的数字是否相同不需要特殊的算法。只截取相同
位置上的数字进行比较即可。但在判断几位数字
正确时,则应当注意:计算机所想的是
“1123”,而人所猜的是“1576”,则正确的数字只有1
位。所以我们再用到循环结构,判断
结构,余数比较的时候要注意重复,所以应该死有标志变量。 程序中截取计算机所想的数的每位数字与人所猜的数字按位比较。若有两位数字相
同,则要记信所猜
中数字的位置,使该位数字只能与一位对应的数字“相同”。当截取下一
位数字进行比较时,就不应再与
上述位置上的数字进行比较,以避免所猜的数中的一位与
对应数中多位数字“相同”的错误情况。 猜数字处理系统,包括三个模块,和一个主函数。三个模块分别是电脑产生一个正确
的随机数,读取
玩家正确的四位数,电脑与玩家数字的比较。其中脑产随机数函数和主函
数为整型,其它都无返回类型。
主函数通过在不断循环使用三大模块来实现。该程序采用
面向对象的思想,来处理函数之间的调用,实现
这个人机猜数字游戏。
任务定义:
可知,整个程序的设计实现大致分为三个部分,
(1) 菜单,在用户界面上产生指示,让用户知道如何来参与这个游戏。
(2)
产生随机数部分,利用随机函数来产生随机数,即计算机给的数。
(3) 猜数对比输出部分,程序的
核心部分,运用for循环,if判断语句,来提示参与者
猜对了几个数,位置对了几个。
二、概要设计和数据结构的选择
1、使用for循环结构,if判断结构,比较余数,完成
逐个比较,从而输出猜对了几个数,
位置对了几个
2、运用子函数,指针传递地址,使主函数看起来更简便
3、加入判断,返回主函数,是否继续。
三、详细设计和编码
(一)算法及说明
厚德
博学 善思 致用
3
C语言课程设计报告书
计算机“想”了一个“1234”请人猜,可能的提示如下:
人猜的整数
计算机判断有几个数字正确 有几个位置正确
1122
2 1
3344
2 1
3312
3 0
4123
4 0
1243
4 2
1234
4 4
游戏结束
如以上分析,本次课题是猜数字游戏的设计与实现。主要是通过C++语言开发,
实
现《猜数字》游戏中的出数字方,在VC环境中实现了由电脑随机产生一个数字不重复的
四位
数(最高位不为零),并将所猜的数与它自动产生的数进行比较,若猜得不对并作出
提示:,A代表位置
正确数字也正确,B代表数字正确但位置不正确。m代表A
的个数,n代表B的个数.在每次输入数字后
,显示相应的提示信息,直到玩家猜对为止.这
次课设是要求用C++编写程序,实现数字之间的相互比
较,让玩家找出电脑写的四位数字,
而玩家在找出四位数字中,电脑需要给出玩家一些提示信息,用以帮
助玩家找出答案。对
猜一个各个位数不等的四位数,电脑需要在程序刚运行时,确定一个随机的四位数,
且各
个位数不相等。而在玩家输入数字时,也需要检验玩家输入的数字是否满足条件,即一个
各
个位数不重复的四位数。只有玩家输入正确的数字后,电脑才能进行比较数字的运算,
如果玩家输入的数
字和电脑的不相等,输出提示信息,并应从新读取玩家的数字进行判断,
直到玩家放弃猜数字或数字猜对
为止。
(二)程序流程图
厚德
博学 善思 致用
4
C语言课程设计报告书
开始
计算机产生四位数z
输入猜的四位数g
a=z;s=g
调用函数 panduan()
a%10==s%10
N
Y
m&&t!=b[3]
N
Y
j++;m=0;b[j-1]=t;
K==t
N Y
Count++;s10;a10
输出j、k
N
K==4
Y
结束
图2.1 流程图
厚德 博学
善思 致用
5
C语言课程设计报告书
(三)、函数及简介
Void
Panduan(int g, int z, int *k, int
*j):接收用户输入的数字和正确的数字,进行判断,
并把猜对的数的个数和位置保存到变量 *k,
*j 中。
四、 上机调试
我们编写的程序不可能一次就成功的,要经过反复
的调试,但错误是不可避免,而
且高,编译器一般不报错,往往要费一番周折才能解决。经验、习惯和对
C语言深刻理解
成为彻底避免这类问题的关键因素。
对于此次的课程设计,从一开始的写程序
到最终的成功运行,虽然这个程序并不像其他多
样化的管理系统那样复杂,但是在编写和上机调试过程中
,仍然出现不少问题。
子函数里的错误:
void panduan(int
g,int z,int *k,int *j)
{
}
现在从中发现错误,在b[j-1]=t中,j是原量,而*j是指针传递原变量,并读
厚德
博学 善思 致用
6
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++)
{
}
a=10;
if(a%10==s%10)
{
}
s=10;
if(m&&t!=b[0]&&t!=b[1]&&t!=b[2]&&t!=b[3])
{
}
if(i==t) *k+=1;
*j+=1;m=0;b[j-1]=t;
C语言课程设计报告书
写,所以在这里有这个错误,改正即可。
五、用户使用说明
首先运行该
游戏,进入开始界面。计算机会提醒你:我有一个数请你猜一猜,然后请
输入一个四位数。计算机会提醒
你,猜对了几个数,并且有几个数位置也是正确的。然后
你在判断哪几个或哪一个是对的,位置也是对的
。后面的猜数也是考验你的眼里与脑力,
根据计算机的提示,可以采用逐个比较。如:你猜了一个数字:
1234,;计算机提示:有2
个数是对的,并且有0个位置也是对的。然后你判断,1、2可能是对的
;3、4也有可能
是对的;所以你可以先尝试着,如1200或3400看到底哪两个是正确的,当然0
也可能是
对的,所以需要再一次验证。
当然我们每输入一个字都需要按一下回车,然后看到提
示再按回车,进行下一步。这
样直到猜出正确的数字,恭喜你!然后计算机会提示:again?
YN,你可以选择Y,接着游
戏,也可以选择N进行结束。
六、测试结果
1、调试分析
输入的游戏玩家人数太多时屏幕显示不能控制为一页一页显示,所以为了方便起
见,不要输入太多记录,十七左右为最佳。刚开始执行输入函数,按数字顺序输入输
完后执行显
示功能,数字、字母的位置显示不对,试着在其中增加一些语句,希望能
把所需结果按正常顺序显示,但
暂时没有成功,最后在老师的帮助下,所需结果能按
正常顺序输出了。在前面对猜数字游戏进行需求分析
的过程中,已经初步明确了系统
的主要功能模块和用户需求,下面将在总体设计的过程中,给出猜数字游
戏的模块结
构、流程描述以及界面布局,并使得系统的总体设计符合软件工程中总体设计的基本
原则。 开发与设计的总体思想猜数字游戏是一种大众娱乐游,开发与设计的重点在于
游戏供玩家进行猜
数字游戏的原始数字的产生和用户每进行猜数字操作之后的游戏提
示,这方面的规则设计往往决定了软件
运行的正确性和质量。同时,要谨调试失败的原
因以免下次犯同类错误
2、测试运行结果截屏及说明
游戏开始界面,可正常工作运行;
厚德
博学 善思 致用
7
C语言课程设计报告书
图6.1 测试结果
然后游戏者可以猜一个四位数,看计算机给出的提示继续猜;
图6.2
测试结果
当四位数被完全参与者猜出时,计算机会告诉你猜了多少次,并且会
问你,要不要再一次。
厚德 博学 善思 致用
8
C语言课程设计报告书
图6.3 测试结果
七、附录:带注释源程序
#include
#include
#include
void panduan(int g,int z,int *k,int *j)
通过k的地址,指针对原变量k、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++) i:原数中的第i位数。个位为第一位,千位为第4位
{
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;
记录相同数字时,该数字在所猜数字中的
9
{
厚德 博学
善思 致用
C语言课程设计报告书
位置
}
if(i==t) *k+=1; 位置相同加一
}
s=10; 从各位到十位,百位,千位,小数点除去
}
a=10;
}
}
int main()
{
int
z,count,g,s,j,k; j:数字正确的位数 k:位置正确的数
count:一共猜多少次
char ag; 定义字符
srand((unsigned int)time(NULL)); 时间随机种子
z =
rand()%10000; 产生随机数
printf(我有一个四位数的数字,请猜一猜!n
for(count=1;;count++)
{
printf(请输入一个四位数:
scanf( 请人猜一猜
panduan(g,z,&k,&j); 传递k的地址
printf(你猜对了%d个数字,n
printf(并且在猜对的数字中有 %d
个位置也是正确的.n
if(k==4)break;
}
printf(恭喜你,猜对了!
printf(
printf(你用了%d次猜出了这个数.n
printf(
scanf(
if(ag=='y'||ag=='Y')return main(); 返回 主函数
return 0;
}
厚德 博学
善思 致用
10
C语言课程设计报告书
八、参考书目
[1]、郭翠英编著《C语言课程设计案例精编》北京:中国水利水电出版社2008
[2]、黄明,梁旭,万洪莉.C语言课程设计.北京:电子工业出版社.2006.6
[3]、
谭浩强《C语言习题集与上机指导》高等教育出版社 2003年2月版
[4]、
谭浩强主编《C语言程序设计试题汇编》清华大学出版社2003年4月版
[5]、
熊锡义主编《C语言程序设计案例教程》大连理工大学出版社09年3月版
[6]、姚合生等《C语言程序设计》-北京:清华大学出版社(高等
学校计算机教材—面向
应用与实践系列)2006
[7]、刘成等《C语言程序设
计实验指导与习题集》.北京:中国铁道出版社,
2005年4月版
........忽略此处.......
厚德 博学
善思 致用
11