猜数字游戏
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
任务要求
要求这个猜数字游戏有一定的容错功能,界面友 好,功能齐全。 游戏规则: (1)一个四位数,各位上的数字不重复,取值 从1~9. (2)按以下提示猜出这个四位数: 每次猜测输入的数据给出类似的提示*A*B。 其中A前的*代表你本次猜对了多少个数字。 其中B前的*代表你本次猜对的数字并且位置正 确的个数
应用平台 Windows XP32位。
Windows XP 32位是当今主流的电脑操作系 统平台,虽然2009年windows7已经开始流行, 但是该系统仍然被编程人员所采用。其兼容性高 ,占用内存小,需求配置低,对Microsoft Visual C++ 6.0的兼容性好等特点,在许多领域仍然保 持着良好的口碑。
主函数的N-S流程图如下:
调用函数computer(int m)
srand函数是随机数发生器的初始化函数。它需要提供一 个种子,这个种子会对应一个随机数,如果使用相同的种 子后面的rand()函数会出现一样的随机数。如: srand(1); 直接使用1来初始化种子。不过为了防止随机 数每次重复常常使用系统时间来初始化,即使用 time函 数来获得系统时间,它的返回值为从 00:00:00 GMT, January 1, 1970 到现在所持续的秒数,然后将time_t型 数据转化为(unsigned)型再传给srand函数,即: srand((unsigned) time(&t)); 还有一个经常用法,不需 要定义time_t型t变量,即: srand((unsigned) time(NULL)); 直接传入一个空指针,因为你的程序中往 往并不需要经过参数获得的t数据。 srand((int)getpid()); 使用程序的ID(getpid())来作为 初始化种子,在同一个程序中这个种子是固定的
目录
一. 综合设计概述 二. 总体设计 三. 详细设计 四. 调试过程分析描述 五.综合设计体会 六.源程序代码 七.参考文献
综合设计概述
综合设计名称 任务要求 开发环境 应用平台
综合设计名称
猜数字游戏 本程序主要目的是在VC环境中实现由电脑随机产 生一个数字不重复的四位数,并将所猜的数与它 自动产生的数字进行比较,若猜的不对就作出相 应提示:“*A*B” 其中A前的*代表你本次猜对了 多少个数字。B前的*代表你本次猜对的数字并且 位置正确的个数。
系统总体N-S流程图
调试过程
文件调试主界面
调试过程分析描述
调试过程 调试发现的问题与解决
进行游戏猜数
调试发现的问题与解决
让电脑自动生成一个各个位上的数均不同的四位数:
此过程中的问题为:while ((a > 1000 ) && (a< 10000)&&(k==0))语句执行后出现的是当数未一 个各个位上的数均不同的四位数时会继续执行循 环及k未初始化。 应改为:while (!((a > 1000 ) && (a< 10000)&&(k==0)))且do-while中应将k初始化为0 。
}
此过程中的问题为:
for(k=1;k<=N;k++) 修改后的正确程序应为: { printf("请你输入一个各个位上的数均不同的四位数数n:\n"); scanf("%d",&n); x=m; y=n; d=0; c=0; for(i=0,j=0;i<4,j<4;i++,j++) { a[i]=x%10; b[j]=y%10; x=x/10; y=y/10; if(a[i]==b[j]) d++;
输出提示测试次数及*A*B
系统功能模块图及各功能模块的目 的与意义
计算机自 动产生一 个四位数 两数 进行 比较 人猜测一 个四位数
主 模 块
给出提示 *A*B及 猜测次数
详细设计
系统各模块N-S流程图及功能特色简介 系统总体N-S流程图
百度文库
系统各模块N-S流程图及功能特色 简介 主函数main() 主函数主要通过switch()循环语句 ,实现菜单界面的操作控制,并且发挥了 界面友好,模块化等特点,追求语句简洁 ,调用简单函数,通俗易懂。
%dA%dB",c,d);
else { printf(" ~~~~~~~~~~~很遗憾,你还没有猜对,请继续努力 ~~~~~~~~~~~:\n 提示:*A*B为: %dA%dB\n\n\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n",c,d); printf("********是否继续游戏?是输入:Y;否输入:N*******\n"); getchar(); cons=getchar(); if(cons=='N') { printf("正确结果为:%d\n",m); break; } } } } int computer(int m) { int a,i,j,t,k,b[4]; srand((int)time(0)); do { k=0;//k在循环内初始化,清除上次循环产生的值
a=rand();
t=a; for(i=0;i<4;i++) { b[i]=t%10; t=t/10; } for(i=0;i<3;i++) for(j=i+1;j<4;j++) if(b[i]==b[j]) k++; } while (!((a > 1000 ) && (a< 10000)&&(k==0)));//应该是不满足条件时继续循环,所以 用非"!",k==0表示输出的数各个位上的数不同 return(a); }
学院: 学号: 姓名: 教师:
摘要
猜数字游戏是一个运行在Windows平台下的小型游 戏软件,依据猜数字游戏的基本规则,给用户提供 一个游戏平台。以VC++作为软件开发环境,利用随 机函数,通过数字比较,编程实现的。它的规则简 单,但玩起来有一定的难度,是消磨时间和锻炼脑 力的好选择。通过选择猜数字游戏这个题目,让我 更深入的了解了编程中的一些问题及以前不知道的 程序。在分析阶段,要面向对象的需求分析,系统 设计,画出相应的需求分析图,系统设计模型图, 学会多角度思考问题。
修改后正确的源代码应为:
int computer(int m)
{
int a,i,j,t,k,b[4]; srand((int)time(0)); do { k=0;//k在循环内初始化,清除上次循环产生的值 a=rand(); t=a; for(i=0;i<4;i++) { b[i]=t%10; t=t/10; } for(i=0;i<3;i++) for(j=i+1;j<4;j++) if(b[i]==b[j]) k++; } while (!((a > 1000 ) && (a< 10000)&&(k==0)));//应该是不满足条件时继续循环,
} for(j=0;j<4;j++) for(i=0;i<4;i++) if(a[i]==b[j]) c++; printf("这是你猜的第%d次\n",k); printf("提示:%dA%dB\n",c,d);}
综合设计体会
本次我选择的课题设计为《猜数字游戏》,在程序设计过程中我只用到 了一个主函数和一个调用函数int computer(int m),另外,我主要 用到的结构为for循环。其中我遇到的最大问题为如何使电脑自动输 入一个各个位上的数均不同的四位数,由于不知道产生这一过程的源 代码,所以我上网查了一下此过程的基本源代码:#include<time.h> #include<stdlib.h> int main() {int a; srand((int)time(0)); a=rand();} 由于不懂srand,rand,time等函数的意义,又查了些资料了解了一下它 们的定义。虽然在此次程序设计中花费了一定的时间,但在次过程中 我也学到了一些以前不知道的东西,如:目录的生产,表格的制作, 课题报告文档的基本制作以及设计一个程序的思路与方法。
系统总体设计框架
该处理系统包括三个模块和一个主函数。三 个模块分别是由电脑产生一个正确的随机数,读 取用户正确的四位数,电脑与用户数字的比较。 其中电脑产生的随机数函数和主函数为整型,其 它都无返回类型。主函数通过在不断使用三大模 块来实现。该程序采用面向对象的思想来处理函 数之间的调用。
电脑产生一个正确的随机数 用户输入一个四位数 比较电脑产生的数与用户输入的数
开发环境
开发工具为Microsoft Visual C++ 6.0. 20世纪90年代以来,C语言迅速在全世界普 及和推广。Microsoft Visual C++ 6.0作为此语言 的编写平台已而受到广泛应用。Microsoft Visual C++ 6.0功能丰富、使用灵活方便、应用面广、 目标程序效率高、可移植性好、既可以满足高级 语言设计,又具有低级语言编写功能,因此是该 程序设计的首选。
for(k=1;k<=N;k++) { printf(" 请你输入一个各个位上的数均不同的四位数数n:\n"); scanf("%d",&n);//游戏者输入一个数 x=m; y=n; d=0; c=0; for(i=0,j=0;i<4,j<4;i++,j++) { a[i]=x%10; b[j]=y%10; x=x/10; y=y/10; if(a[i]==b[j]) d++;//d为本次你你猜对的数字并且位置正确的个数 } for(j=0;j<4;j++) for(i=0;i<4;i++) if(a[i]==b[j]) c++;//c为本次你猜对了多少个数 printf(" 这是你猜的第%d次\n\n",k); if(c==4&&d==4) { printf(" ~~~~~~~~~恭喜你,答对了!~~~~~~~~~~~~\n\n break; }
总体设计
系统功能需求分析 系统总体设计框架 系统功能模块图及各功能模块的目 的与意义
系统功能需求分析
设计一个猜数字游戏程序,要求具有如下特性: (1)游戏软件能随机产生一个四位数,但不显示 。 (2)用户能输入一个各个位上的数字不重复的四 位数。 (3) 程序随机产生的数能与用户输入的数进行比 较,且应具有一定的提示,如: 本次你猜对了多少个数; 本次你你猜对的数字并且位置正确的个数。 (4) 本程序有一定的容错功能。 (5) 此程序还应记录用户一共玩了多少次。
所以用非"!"
return(a); }
错误源代码为:
让游戏者有N次猜测机会:
for(k=1;k<=N;k++) { printf("请你输入一个各个位上的数均不同的四位数数n:\n"); scanf("%d",&n); for(i=0,j=0;i<4,j<4;i++,j++) { a[i]=m%10; b[j]=n%10; m=m/10; n=n/10; if(a[i]==b[j]) d++; } for(j=0;j<4;j++) for(i=0;i<4;i++) if(a[i]==b[j]) c++; printf("这是你猜的第%d次\n",k); printf("提示:%dA%dB\n",c,d);
源程序代码
include<stdio.h> #include<time.h> #include<stdlib.h> #define N 10 void main() { int computer(int m); int m,n,c,d,e=1234,i,j,k,x,y,a[4],b[4]; char cons='N'; printf(" \n\n ~~~~~~~~~~~~~~~~~~~~~欢迎进入猜数字游戏 ~~~~~~~~~~~~~~~~~~~~\n\n\n"); printf(" 《说明》:\n 此游戏过程中输出提示*A*B\n 其中A前的*代表 你本次猜对了多少个数字\n B前的*代表你本次猜对的数字并且位置正确的个数\n 你有10次猜测机会\n\n\n"); printf(" 电脑随机输入一个各个位上的数均不同的四位数m:\n\n");//电脑自动输入一个数 m=computer(e);