猜数字游戏——复杂版

本文介绍了一个猜数字游戏的C语言程序实现,游戏随机生成四个不重复的数字,玩家通过输入猜测并与生成数字比对获得反馈,游戏提供十次尝试机会及得分计算。

猜数字游戏:

计算机随机生成没有重复的n个数,用户从键盘输入猜测的数。每猜一次,电脑给出提示信息。如果用户输入的数跟计算机生成的数,数值和位置都完全相等,则胜出。

基本功能要求:(假设n=4)

1.       随机生成没有重复的4个数。(每个数字在0-9范围内)。

2.       用户从键盘输入4个不重复的数,程序能对用户输入的数与随机生成的数进行匹配,并给出提示信息:“有 x个数数值和位置都相同!有 y个数数值相同,但位置不同。”

3.       控制用户的尝试次数为10次。

4.       计算、输出并保存用户的得分,计分规则:总分是100分,每失败一次扣10分。

5.       有操作菜单,能根据不同选择运行不同功能:1:开始游戏!2:查看上次成绩!3:输出帮助信息!0:退出程序!

具体程序:

#include<stdio.h>                                                               //标准输入输出头文件
#include<stdlib.h>                                                              //头文件中系统函数,调用系统自带工具函数
#include<time.h>                                                                //时间函数头文件
void decide(int a[],int b[],int n,int m);                                       //自定义数组
int Rungame();
int Mark();
int Help();
int *p,*q;
int u,r,N=4;                                                                    //定义所需整形函数


int main()                                                                      //定义主函数
{
int a;

system("cls");                                                               //用于清除屏幕
printf("猜数字游戏>>>根目录\n");
printf("┏━━━━━━━━━━━━━━━━━┓\n");
printf("┃************1.开始游戏************┃\n");
printf("┃************2.查看上次成绩********┃\n");
printf("┃************3.输出帮助信息********┃\n");                      //输出初始状态根目录
printf("┃************4.系统设置************┃\n");
printf("┃************0.退出程序************┃\n");
printf("┗━━━━━━━━━━━━━━━━━┛\n");
printf("请选择操作:");
scanf("%d",&a);                                                              //用于地址输入,按格式输入要选择的功能


switch(a)                                                                    //使用switch选择结构,已达到功能选择效果
{
case 1:
system("cls");Rungame();                                             //先清屏后运行游戏
break;
case 2:
system("cls");
printf("你上一次的得分:%d\n\n",r);                                   //输出上一次得分
printf("输入任意整数返回根目录");
scanf("%d",&a);                                                      //用于返回
return(main());
break;
case 3:
system("cls");Help();                                                //输出帮助信息
break;
case 4:
system("cls");
printf("请您输入您需要猜的整数的个数(0-9)\n");                     //系统设置
printf("N=");
scanf("%d",&N);                                                    //输入设置的个数
return(main());
break;
case 0:
printf("**********谢谢使用**********\n(提示:按任意键退出)\n");      //正常退出程序
exit(0);
break;
default:
printf("输入不合法!\n输入任意整数返回根目录!\n");
scanf("%d",&a);                                                      //不正常输入处理
return(main());
break;                                                               //最后default语句带break使正常跳出switch语句
}
printf("\n");
}


int Rungame()                                                                    //运行游戏
{
int a[4],b[4],i,j,k,l,z;
srand(time(0));                                                             //随机函数发生器初始化函数,用以初始化随机数的生成
for(i=0;i<=(N-1);i++)                                                       //使用for语句实现循环
{
a[i]=rand()%10;
for(j=0;j<i;j++)                                                         
if(a[i]==a[j])
{
i--;
break;                                                          //中止该步骤
}
}
for(k=10;k>=1;k--)
{
u=k;                                                                     //游戏剩余次数
decide(a,b,4,4);
if(*p==N&&*q==N)                                                         //对比判断
{
printf("恭喜你,完全正确!!!\n你的分数:%d\n",10*k);
break; 
}
}
if(k==0)                                                                 //游戏终止
printf("您剩余的次数为0,游戏结束!!!\n");
printf("正确答案是:");
for(i=0;i<=(N-1);i++)
printf("%d",a[i]);
printf("\n");
l=10*k;
r=&l;
printf("返回根目录请按1,重新开始游戏请按其他整数");
scanf("%d",&z);
if(z==1)
{
system("cls");                                                      //用以清除屏幕
return(main());                                                     //返回
}
else                                                                    //使用if、else语句实现循环

system("cls");
return(Rungame());                                                     //返回开始游戏
}
}

int Help()                                                                       //输出帮助信息
{
int a;
printf("输入n个不重复的整数,每次输入后,计算机会判断其与系统产生的随机数的匹配程度并给出提示,您可以输入10次,每猜错一次扣10分,开局分数100分,如果用户输入的数组跟计算机生成的数组的数值和位置都完全相等,则胜出\n");
printf("\n\n按任意整数继续");
scanf("%d",&a);                                                              //输入数字返回
return(main());

}

void decide(int a[],int b[],int n,int m)                                     
{
int i,j,c=0,d=0;
printf("请您输入%d个不重复的整数,以空格隔开,剩余%d次:",N,u);
for(i=0;i<=(N-1);i++)
scanf("%d",&b[i]);
for(i=0;i<=(N-1);i++)                                                          //用for语句实现循环
{
for(j=0;j<=(N-1);j++)             
{
if(a[i]==b[j])
{
c++;  
if(i==j)                                                         //if,else语句 
d++;                                                         //判断有数字位置与数字相同
}
}
}


q=&d;
p=&c;
printf("有%d个数数值和位置都相同,有%d个数数值相同但位置不同\n",d,c-d);        //输出游戏提示信息

}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值