猜数字游戏:
计算机随机生成没有重复的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); //输出游戏提示信息
}