猜数字游戏C语言课程设计
日上三竿-姓名预测学
《C程序设计》
课程设计报告
(2014— 2015学年第 2 学期)
题
目: 猜数字游戏
学 院: 机械工程学院
班 级: 机械1310班
学 号: 1303090190
姓 名: 杨晨
指导教师: 罗涛华
时 间:起 2015年5月25日止2015年5月31日
.
一、 课程设计基本信息
课程代码:05190124
课程名称:计算机基础课程设计
课程英文名称: Computer-based
Course Design
课程所属单位(院(系)、教研室):数学与计算机学院计算机基础课程群
课程面向专业:食
品科学与工程学院、机械工程学院、电气与电子工程学院、土建学
院、动物科学与营养工程学院、化学与
环境工程学院、工商管理类、国际经济与贸易、旅游
管理、金融学、行政管理、汉语言文学、英语、护理
学、康复治疗专业、生物科学类、制药
工程、制药工程(生物制药)、药物制剂、物流管理
课程类型:必修课
先修课程:大学计算机基础通识选修课程、程序设计课程
学分:1 总学时:1周
二、 课程设计目标
掌握所学语言程序设计的方法,熟悉 所学语言的开发环境及调试过程,熟悉所学语
言中的数据
类型,数据结构、语句结构、运算方法,巩固和加深对理论课中知识的理解,提
高学生对所学知识的综合
运用能力。通过综合设计要求达到下列基本技能:
1.培养查阅参考资料、手册的自学能力,通过独立
思考深入钻研问题,学会自己分
析、解决问题。
2.通过对所选题目方案分析比较,确立方
案,编制与调试程序,初步掌握程序设计
的方法,能熟练调试程序。
3.系统设计编程简练
,可用,功能全面,并有一定的容错能力。用户界面良好,有
较好的输出功能。在完成课题基本要求后,
具有创新型设计,具有一定的实用价值。
4.根据个人的设计调试过程,撰写设计报告。
三、 课程设计内容
熟练掌握所学语言的基本知识:数据类型(整形、实型、字符
型、指针、数组、结构
等);运算类型(算术运算、逻辑运算、自增自减运算、赋值运算等);程序结构
(顺序结构、
判断选择结构、循环结构);大程序的功能分解方法(即函数的使用)等。进一步掌握各种
函数的应用,包括时间函数、绘图函数,以及文件的读写操作等。
四、
课程设计要求
1. 要求每个同学都要认真对待,积极参与。
2. 课程设计结束时,提交
完成的所有源程序、相关文件和可执行文件。同时填写并完
成《课程设计报告册》。
3.
不符合要求的程序、设计报告、抄袭的设计报告或源程序代码、在设计中完全未参
与的将作不及格处理。
..
.
五、 考核方式
指导老师负责验收程序的运行结果,并结合学生的工作态度、实际动手能力、创新精神
和设计报告等进
行综合考评,百分制计算,具体考核标准主要包含以下几个部分:
1.
程序运行情况
20分
2. 程序功能的完善程度
10分
3. 程序结构的合理性
10分
4.
对问题的答辩情况
20分
5. 创新情况
10分
6.
学生的工作态度与独立工作能力
10分
7.
设计报告内容的规范性
20分
备注:
1.
按规定时间填写各阶段文档,学习态度加5分
2.
设计报告内容雷同扣40分,无调试过程问题分析扣10分,无参考文献扣10分
3.
源程序无注释则在程序结构合理性扣10分
六、 课程设计主要参考资料
1. 谭浩强著.
C程序设计(第3版). 北京:清华大学出版社,2005.7
2. 刘光蓉、汪靖、陆登波主编.
C程序设计实验与实践教程. 北京:清华大学出版社,
2011.2
3. 游洪跃主编.
C语言程序设计实验与课程设计教程. 北京:清华大学出版社,2011.5
4. (美)
Perter Van Der Linden著,徐波 译. C 专家编程(C编程语言经典之作) .
北京:人民邮电出版社,2008.2
5. 凯尼格 著,高巍 译. C陷阱与缺陷.
北京:人民邮电出版社,2008.2
6. Mark de
Berg等著,邓俊辉译,《计算几何-算法与应用(第3版)》,清华大学出版
社,2009年8月
7.
杨克昌编著,《计算机程序设计典型例题精解》,国防科技大学大学出版社,1999
年3月
七、 课程设计计划安排
时 间
课程设计前一周
课程设计第1天
课程设计第2天
课程设计第3天
课程设计第4天
课程设计第5天
“课程设计概述”
按功能模块编写详细设计说明,完成报告册中“总体设计”
编写程序、调试程序
编写程序、调试程序,完成报告册中“详细设计”
调试程序,完成报告册中“调试分析过程”
完成报告册中“总结”、“参考文献”、“课程设
计评审表”部分内
容,提交课程设计报告、源程序、面试或答辩
任
务
选择课程设计题目,分析课题的要求,确定设计方案,完成报告册中
..
.
一、课程设计概述
课
程
设
计
问
题
描
述
设
计
要
1.
主函数实现正整数的随机产生,主菜单的显示(图
18.1)
2.
编写一函数实现帮助信息的输出(图18.2)
计算机随机生成一个各位数字不重复的四位数,系统根
据玩家输入的数字给出提示信息: A
--表示位置与数字
均正确的个数; B--表示数字正确但位置不正确的个
数。玩家根据提示
调整输入,如果玩家输入超过八次仍
不成功,游戏自动结束。
求 3. 编写一函数控制比较
的次数和信息的输出。当玩家输
入次数不超过8时,每次将玩家输入的数字和随机数
依次进行比
较,如果匹配,则输出“You Win !”,
否则输出提示信息。
设
计
目
掌握结构化程序设计的主体思想,以自顶向下逐步求精
的方法编制程序解决一些实际的问题,
为将来编写软件
积累一些典型的案例处理经验。
的
..
.
开
发
环
境
操作系统:Windows7
软件环境:Microsoft Visual C++
6.0
二、总体设计(1)
..
.
猜数字游戏软件的
总体目标是按照特定游戏规则为用
户提供一个方便友好的游戏界面,同时给用户提供排行
榜的功
能使用户能够按照特定的目标提高自己的成绩,
并且提供相应的帮助功能。游戏规则如下。
①游戏软件随机产生4个数字,但不显示,给用户
提供输入提示符,让用户猜4个数字的值和位置顺序。
如果数字值和位置顺序均正确,则猜数字成功。
②玩家有8次猜数字的机会,如果在8次
之内仍末
猜出正确的数字值和数字位置顺序,则提示用户游戏失
系
统
功
能
需
求
分
析
败。
③一旦玩家在8次的次数限制内猜出正确的数字值
和位置顺序,则赢得游戏。
本游戏软件需要实现以下一些基本功能。
①游戏区:玩家可以在游戏区逐次猜数字,系统给出玩家每次猜数字后的提示,包括数值、位置均正确的
数字个数和数值正确但位置不正确的数字个数
。
②帮助:玩家通过帮助功能了解游戏规则。
③退出:玩家想结束并退出游戏系统。
二、总体设计(2)
..
.
系
统
总
体
设
计
框
架
三、详细设计(1)
..
.
C编译器提供了基于ANSI标准的伪随机数发生器
函数rand
()和srand(),用来生成随机数。这二个函数
的工作过程如下:
srand()提供一个种子,它是一个
unsigned
int类型,其取值范围从0~65535;
然后调
主
要
功
能
模
块
的
算
法
设
计
用srand(),它会根据提供给sran
d()的种子值返回一
个随机数(在0到32767之间);
根据需要多次调用
srand(),从而不间断地得到新的随机数; 无论什么时
候,都可以给
srand()提供一个新的种子,从而进一步
“随机化”srand()的输出结果。
三、详细设计(1)
..
.
主
要
功
能
模
块
源
程
序
#include
#include
#include
void main( void )
{
void help();
函数声明
void compare(int a[]);
函数声明
int i,k = 0,a[4],b;
srand(
(unsigned)time( NULL ) );
while (1)
{
for(i=0;i<4;i++)
{
a[i]=rand()%10;
}
if(a[0] != 0)
break;
}
..
.
三、详细设计(2)
1. 输出游戏菜单
2. 输出游戏规则
3.
比较用户输入数据与系统随机数,并产生提示信息
4. 玩家从键盘输入数据
5.
比较对应位置上的数
主
要
功
能
模
块
的
算
法
设
计
6. 输出游戏结果
..
.
三、详细设计(2)
printf(猜数字游戏:n
printf(
printf(新游戏n
printf(帮助n
printf(退出n
printf(
printf(请输入选择:n
scanf(
while(b!=3)
{
switch(b)
{
case 1:compare(a);break;
主
case 2:help();break;
default:printf(
要
}
scanf(
功
}
}
能
void
help()游戏规则说明函数
模
{
printf(该游戏由程序随机生成四个0到9的数字n游戏者有八
块
次机会来根据系统提示猜测数字n
printf(表示位置与数字均正确的个数nB--
表示数字正确
源
但位置不正确的个数n
}
程
序
void compare(int
a[])比较用户输入数据与系统随机数,并产生提
示信息
{
int
b[4],i,j,k=1,A=0,B=0,N=8,x;
printf(请输入猜测的四位数:n
while(A!=4&&k<=N)
{
A=0;B=0;
scanf(玩家从键盘输入的数据
while(x<999||x>10000)
{
printf(输入不合法!n
..
.
scanf(
}
for(i=3;i>=0;i--)
{
b[i]=x%10;
x=x10;
}
for(i=0;i<4;i++)比较对应位置上的数
if(a[i]==b[i]) A++;
for(i=0;i<4;i++)
for(j=0;j<4;j++)
if(a[i]==b[j]&&i!=j) B++;
printf(
if(A==4) printf(
k++;
}
if(A!=4&&k>8) printf(游戏失败!n
}
四、调试分析过程(1)
..
.
刚开始执行输入函数,
按数字顺序输入,输完后执行
显示功能,数字、字母的位置显示不对,试着在其中增
加一些语句
,希望能把所需结果按正常顺序显示,但暂
时没有成功,最后在老师的帮助下,所需结果能按正常
顺序输出了。
在前面对猜数字游 戏进行需求分析的过程
调
中,已经初步明确了系
统的主要功能模块和用
试
户需求,下面将在总体设计的过程中,给出猜
过
数字
游戏的模块结构、流程描述以及界面布局,
并使得系统的总体设计符合软件工程中总体设
程计的基本原则。
出
开发与设计的总体思想:
现
猜数字游戏是一
种大众娱乐游戏,开发与
设计的重点在于游戏供玩家进行猜数字游戏的
的
原始数字的产
生和用户每次进行猜数字操作之
问
后的游戏提示,这两方面的规则设计往往决定
了软件
运行的正确性和质量。同时,要谨记调
题
试失败的原因,以免下次犯同类错误。
及
解
决
方
法
四、调试分析过程(2)
..
.
游戏初始画面
测
试
数
据
及
测
试
结
果
进入系统选择1进行游戏,随机输入4个不同的数字
输入3个不同的数则会提示输入有误
..
.
选择2系统帮助界面
五、总结
..
. C编译器提供了基于ANSI标准的伪随机数发生器函数
设
rand()和srand()
,用来生成随机数。这二个函数的工
计
作过程如下:srand()提供一个种子,它是一个u
nsigned
用
int类型,其取值范围从0~65535; 然后调用rand(),<
br>到
它会根据提供给srand()的种子值返回一个随机数(在0
的
到3276
7之间); 根据需要多次调用rand(),从而不间
知
断地得到新的随机数;
无论什么时候,都可以给
识
srand()提供一个新的种子,从而进一步“随机
点
化”rand()的输出结果。
在进行课程设计之前几天,不知从何入手,一脸茫
然
。为什么呢?因为我们想自己自己做出来而不参考任
何资料,以为这样才可体现我们的智慧和能力,其实
这
是大错特错的。当然也不是一味强调自己动脑自己做出
收
获
与
体<
br>来不好,从开发方面角度来说是可以的,有些东西也并
不是一味的照搬照抄。抱着这样的态度迷茫
了三四天只
想出了一丁点大至结构。最后决定上网找资料,不查不
知道,一查大吃一惊,不但自
己的想法网上比比皆是,
会 比自己的想法更完美更合理的多得看都看不完。此时真
是自愧不如
,如早从网上借鉴,集大家之所成,加上自
己的修改完善,早已做出了更好的系统结结构和想法了。现在才知道,一个人的智慧敌不过千万人智慧的集成,
能借鉴的尽量借鉴,然后再修改完善,增加自
己所需的
..
.
功能,做出自己的特色。伟大的物理学家牛顿不也说过
他之所以成功是站在伟人的肩上吗? <
br>完成设计后,我觉得收获不少,首先是自己首次应
用所学知识做出了这个游戏系统,以前从未做过
这样大
(这是对我而言,在专业人仕看来是小菜一碟)的程序,
多少心里有点甜美的感觉;而收
获更大的是让我学到了
怎样和他人合作完成一件任务,以及在完成的过程中如
何沟通。
不
足
与
努
力
方
向
六、参考文献
完成设计是在一定时间内完成的,在完成这个设计
时,我们做得显然有
一些紧迫,我想是没合理安排好时
间和开始态度不正确所致,做守完后我觉得合理安排时
间是非
常重要的否则可能时间已到而还无法完成或完成
得仓促,应合理安排时间给各个环节。
..
.
参
考
书
籍
《C语言程序设计实验指导与习题解答》 蒋清明
人民邮电出版社
《C语言程序设计案例教程》 张基温
清华
大学出版社
《课程设计与系统开发案例》 伍俊良
清华大
学出版社
《C程序设计 (第三版)》 谭浩强
清华大学
出版社
及
《C语言程序设计》 蒋清明
人民邮电出版社
参
考
论
文
与
网
址
..
.
课程设计成绩评审表
姓名
设计题目
杨晨
学号
1303090190
猜数字游戏
班级
机械1310班
计算机随机生成一个各位数字不重复的四位数,系统根据玩家输入的数字给出提示作品
信息: A--表示位置与数字均正确的个数; B--
表示数字正确但位置不正确的个数。
描述
玩家根据提示调整输入,如果玩家输入超过八次仍不成功,游戏自动结束。
指导
教师
评语
观测内容
程序运行情况
程序功能的完善程度
程序结构的合理性
对问题的答辩情况
创新情况
工作态度与独立工作能力
设计报告内容的规范性
分值
20
10
10
20
10
10
20
评
分(上限)
A
20
10
10
20
10
10
20
B
15
8
8
15
8
8
15
C
10
6
6
10
6
6
10
D
5
4
4
5
4
4
5
E
3
2
2
3
2
2
3
得 分
指导教师评定成绩
指导教师(签名)
2015年 5月 29日
..