猜数字游戏 流程图+源代码
千与千寻宫崎骏-简单的道理
1、问题描述:
该游戏可以由程序随机产生或由用户输入四个0到9之间的数字,且不
重复。
玩游戏者通过游戏提示输入八次来匹配上面所输入的数字。A表示位置正确且数字
正确,
B表示数字正确而位置不正确。如果4A0B,表示游戏成功。每次猜错都会
有提示,如果八次都未猜对
,游戏失败,显示正确答案。按任意键可以返回主菜
单。主要应运数组和循环实现改功能。(对该系统有
兴趣的同学可以在实现系统
基本功能后,完善系统的其它功能,如:破记录功能,若你所匹配的次数小于
纪
录保持者,则为破纪录。)
2、功能要求:
本游戏显示这样的菜单:
(1) 随机产生数据
(2) 用户输入数据
(3) 退出游戏
(4)游戏成功与否都能返回主菜单
测试数据:
测试数据:
第一次输入:
3792
1234
0A2B
第二次输入:
5678
0A1B
第三次输入: 0867
0A1B
第四次输入:
9786
1A1B
第五次输入: 1794
2A0B
第六次输入:
2793
2A2B
第七次输入: 3792
4A0B
游戏成功!!!
3.解题分析
利用主函数调
用子函数来实现模块化程序设计。将游戏的每一个功能设计
成一个子函数,通过函数调用完成游戏。主要
分为两大模块:随机模式和用户模
式。
猜数字游戏的主要功能,由系统自动产生4个随机排列
的整数,或者由用户
输入4个不同的整数,并给用户8次机会猜测数字的数值和排列顺序。如果用户在8次之内没有猜出正确的结果,则提示用户游戏失败,否则提示用户猜数字成
功。
4.
系统总体框图
开
始
游
戏
用
户
模
式
随
机
模
式
退
出
游
戏
开始
功能菜单显示
5.函数名称及功能
Int main() 主函数
void begin(void) 初始页函数
void
c_input(char *str)输入并判断函数
void c_game(char
*temp) 游戏实现函数
void c_rand() 随机模式函数
void
c_printf() 用户模式函数
int judgeA(char *a,char *b)
获取A函数
int judgeB(char *a,char *b) 获取B 函数
1. 函数间调用关系
void
c_game(char
*temp)
void
c_printf()
void
begin(void)
void c_rand()
主函数;
int main()
int judgeB(char
*a,char
*b)
voidc_input(char
*str)
int
judgeA(char
*a,char *b)
7.流程图
(1)
void c_rand() 随机模式函数流程图
(2) void
c_printf() 用户模式函数流程图
(3)主函数流程图
开始
int a=1
srand(time(NULL))
system(“cls”)
begin()
输出:选择
1
否
2
否
3
否
default
是
是
是
c_rand() break
c_printf()
break
a=0
break
while(a=0)
结束
8.运行结果
(1)起始页
(2)随机模式
(3)用户输入模式
综合题源程序
#include
#include
#include
如getch()函数
#include
#include
void begin(void);初始页
void c_game(char *temp);
void c_rand();
int judgeA(char *a,char *b);获取A
int
judgeB(char *a,char *b);获取B
char
x[4],y[4];y[4]是用户输入的数字,x[4]是系统随机产生的数字
void
c_input(char *str)输入函数
{
int i,j;定义两个变量
input:gets(str);输入一个字符串
putchar('n');格式控制
for(i=0;i<4;i++)循环输入
{
if(str[i]<'0'||str[i]>'9')判断输入是否合法
{
printf(无效输入,请重新输入:
goto
input;无条件转移语句
}
for(j=0;j {
if(str[i]==str[j])
{
printf(无效输入,请重新输入:
goto input;
}
}
}
}
void
c_game(char *temp)游戏实现函数
{
int a,b,i;
for(i=0;i<8;i++)for循环实现八次输入
{
printf(第 %d 次输入:
c_input(y);
a=judgeA(temp,y);获取a
b=judgeB(temp,y);获取b
if(a==4)游戏成功条件
{
printf(游戏成功,按下任意键返回主菜单。。
getch();
return;
}
else
printf(
}
printf(游戏失败,正确答案是:%sn按下任意键返回主菜单。
getch();
}
void c_rand()随机模式函数
{
int i,j;
char data[]=初始化一维数组
system(系统调用cls指令,清除屏幕
printf(随机模式**nn
for(i=0;i<4;i++)
{
j=rand()%(10-i);rand()产生随机数的随机函数,产生的是一个很
大的数,
对其求余限定范围
x[i]=data[j];
data[j]=data[10-i-1];
}
c_game(x);
system(
}
void c_printf()用户模式函数
{
system(
printf(用户输入模式**nn
printf(请输入测试数据:
c_input(x);
system(
printf(用户输入模式**nn
c_game(x);
system(
}
int judgeA(char *a,char
*b)获取A函数
{
int i,n=0;
for(i=0;i<4;i++)
if(a[i]==b[i])获取A条件
n++;
return n;
}
int
judgeB(char *a,char *b)获取B 函数
{
int
n=0;
if(b[0]==a[1]||b[0]==a[2]||b[0]==a[3])n++;
if(b[1]==a[0]||b[1]==a[2]||b[1]==a[3])n++;
if(b[2]==a[0]||b[2]==a[1]||b[2]==a[3])n++;
if(b[3]==a[0]||b[3]==a[1]||b[3]==a[2])n++;
return n;
}
void
begin(void)初始页和帮助
{
printf(
printf(
*****n
printf(
猜数字游戏n
printf(游戏帮助:n
printf(
每局游戏,计算机将随机产生一个四位整数,这个整数各个位
上的数字都n
pri
ntf(不重复,且首位可以为0。玩家有八次机会来猜这个数,每猜一次,
计算机将告n
printf(玩家:有几个数大小位置都对了,用A表示;有几个数大小对了
但位置错了,用n
printf(表示。八次机会用光后,游戏结束。n
printf(
(1) 随机产生数据 (2) 用户输入数据 (3) 退
出游戏
n
printf(
*****n
}
void main()主函数
{
int a=1;
srand(time(NULL));设置随机数种子,一个种子对应一个随机数
while(a!=0)
{
system(
begin();
printf(
switch(getch())switch实现多分支选择结构
{
case '1':c_rand();break;
case
'2':c_printf();break;
case
'3':a=0;break;
default:printf(
}
}
}