人机猜数字游戏课程设计报告

绝世美人儿
767次浏览
2021年01月01日 04:01
最佳经验
本文由作者推荐

葡萄产地-学生手抄报

2021年1月1日发(作者:郁文)


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

优雅女-幼儿园教师个人工作总结


关心则乱-新年短息


红色电影推荐-房屋转让合同


滚滚长江东逝水简谱-感恩父母的诗


政协委员推荐材料-建筑工程实习报告


今天的幸福1-功能材料有哪些


厦门菽庄花园-北暮苍山兰舟四


时间旅行者的妻子小说-高山流水遇知音