数字竞猜游戏
斯蒂芬霍金-聘用合同范本
数字竞猜游戏
#include
#include
#include
#include
#include
#define MAX 5
struct record
{
char name[10];
int sorce;
}rec[MAX],Rec;
int n; 记录行数
int num;
输入的数字
void display(); 开始界面
void
xuanze(); 选择函数
void sys(int a);
操作函数
void newgame(); 新游戏
void
vdisplay(); 浏览记录界面
void vxuanze();
浏览选择函数
void help(); 帮助说明
void
vsys(int a); 浏览操作函数
void
viewsorce(); 按记录的顺序浏览
void viewname();
按记录的姓名浏览
void viewsname(); 按记录和姓名浏览
void delrec(); 删除记录
int qushu();
取数函数
int tishi(int aa); 提示函数
void addrec(int a); 判断并且增加记录
void recread(); 读取记录文件
void recwrite(); 写入记录文件
函数定义
void display()
开始界面
{
system( 清屏
printf(
============================================n
printf(
================数字竞猜游戏================n
printf(
============================================n
printf(
printf(
1: 新游戏n
printf(
printf(
2: 浏览记录n
printf(
printf(
3: 帮助说明n
printf(
printf(
4: 清除记录n
printf(
printf(
5: 退出n
printf(
printf(
============================================n
xuanze();
}
void xuanze() 选择函数
{
int a;
printf(请输入你所选择的操作数:n
scanf(
if(a==1||a==2||a==3||a==4||a==5)
{
sys(a);
}选择相应的操作数执行函数
else
{
printf(错误的操作数!n
printf(
printf(请按任意键继续...n
getchar();
getchar();
display();
}
}
void
sys(int a) 操作函数
{
switch(a)
{
case 1:newgame();break;
case
2:vdisplay();break;
case 3:help();break;
case 4:delrec();break;
case 5:exit(0);break;
退出
}
}
void newgame() 新游戏
{
recread();
system( 清屏
printf(
printf(记录列表显示如下:n
printf(
for(int i=0;i
if(rec[i].sorce==0)printf(
<---空记录--->n
else
printf( 第 %d 名:
姓名: %s 分数 %dn
}
printf(
printf(请按任意键继续...n
getchar();
getchar();上面列出记录文件中的记录
int snum;
输入的数字
int sn=10; 机会次数
num=qushu(); 取数
L: system( 清屏
printf(
============================================n
printf(
================数字竞猜游戏================n
printf(
============================================n
printf(
printf( 1:
显示答案n
printf(
============================================n
printf(
printf(请输入你猜想的四个数字(格式为9999样式)你还有 %d
次机会:n
scanf(
if(snum<10000 && snum>1000 ||
snum==1)
{
if(snum==1)
{
printf(你放弃了本局游戏!该四个数字是: %dn
printf(
printf(请按任意键继续...n
getchar();
getchar();
display();
}
else
{
int flag=tishi(snum);
if(flag!=0 && sn!=0)
{
sn--;
if(sn==0)
{
printf(真是遗憾!十次机会没有了!没有关系!下次继续!n
printf(
printf(请按任意键继续...n
getchar();
getchar();
display();
}
printf(请按任意键继续猜...n
getchar();
getchar();
goto L;
}
else
{
if(sn!=0)addrec(sn);
else
{
printf(请按任意键继续...n
getchar();
getchar();
display();
}
}
}
}
else
{
printf(错误的操作数!n
printf(
printf(请按任意键继续...n
getchar();
getchar();
goto L;
}
}
void help() 帮助说明
{
system( 清屏
printf(
============================================n
printf(
==============数字竞猜游戏帮助==============n
printf(
============================================n
printf(
printf(新游戏中,你可以输入四位数,来竞猜系统自动生成的四个数字!,只
有十次的机
会,n
printf(
每次机会都有相对应的提示,十次的机会利用完了还没有猜对的话就算失败!四个
数字的n
printf(
相应格式在游戏中会有提示!当成功猜出系统给定的数字时候,就会统计你的成绩.
当你的n
printf(
成绩比记录文件中的记录好的时候就会提示你是否把记录记录到记录文件中,当
你选择是n
printf( 的时候就会接着提示你输入你的名字.再按回车.没有意外就会提示保存成功!n
printf( 还有要说明的是记录中的分数是越低就代表成绩越好!n
printf(浏览记录有
三种方式!第一种只是列出记录中的姓名;第二种是列出记录中的成绩
次序n
printf(
第三种是姓名跟成绩一起列出来!n
printf(清除记录就是把记录文件初始化.即是让记录文件为空!n
printf(
printf(请按任意键继续...n
getchar();
getchar();
display();
}
void vdisplay()
浏览记录界面
{
system( 清屏
printf(
============================================n
printf(
================数字竞猜游戏================n
printf(
============================================n
printf(
printf( 1:
按记录的顺序浏览n
printf(
printf(
2: 按记录的姓名浏览n
printf(
printf(
3: 姓名记录全部浏览n
printf(
printf(
4: 返回上级n
printf(
printf(
============================================n
vxuanze();
}
void vxuanze() 浏览选择函数
{
int a;
printf(请输入你所选择的操作数:n
scanf(
if(a==1||a==2||a==3||a==4)
{
vsys(a);
}选择相应的操作数执行函数
else
{
printf(错误的操作数!n
printf(
printf(请按任意键继续...n
getchar();
getchar();
vdisplay();
}
}
void
vsys(int a) 浏览操作函数
{
switch(a)
{
case 1:viewsorce();break;
case
2:viewname();break;
case 3:viewsname();break;
case 4:display();break; 返回上级
}
}
void viewname() 按记录的顺序浏览
{
recread();
system( 清屏
printf(
printf(记录列表显示如下:n
printf(
for(int i=0;i
if(rec[i].sorce==0)printf(
<---空记录--->n
else
printf( 第 %d
名: 姓名: %sn
}
printf(
printf(请按任意键继续...n
getchar();
getchar();
vdisplay();
}
void viewsorce()
按记录的姓名浏览
{
recread();
system( 清屏
printf(
printf(记录列表显示如下:n
printf(
for(int i=0;i
if(rec[i].sorce==0)printf(
<---空记录--->n
else
printf( 第 %d 名:
分数 %dn
}
printf(
printf(请按任意键继续...n
getchar();
getchar();
vdisplay();
}
void viewsname()
按姓名和记录浏览
{
recread();
system( 清屏
printf(
printf(记录列表显示如下:n
printf(
for(int i=0;i
if(rec[i].sorce==0)printf(
<---空记录--->n
else
printf( 第 %d 名:
姓名: %s 分数 %dn
}
printf(
printf(请按任意键继续...n
getchar();
getchar();
vdisplay();
}
void delrec()
删除记录
{
recread();
for(int
i=0;i
rec[i].sorce=0;
}
recwrite();
printf(删除成功!n
printf(
printf(请按任意键继续...n
getchar();
getchar();
display();
}
int
qushu() 取数函数
{
int a=0;
int
i=0;
srand( (unsigned)time( NULL ) );
随机数种子设置
while(i==0)
{
i=rand(); 这样做就是为了增加随机性
i=i%100;
}
L: for(int j=0;j {
a=a+rand(); 判断随机数是否是四位数 如果不是继续取数
}
a=(ai+rand())%10000;
if(a<1000)goto L;
return(a);
}
int
tishi(int aa) 提示函数
{
int
a,b,c,d;
int af,bf,cf,df;
if(aa==num)
{
printf(恭喜!你猜对了!四个数就是:%dn
return(0);
}
else
{
a=(num-
num%1000)1000;
b=(num%1000-(num%1000)%100)100;
c=((num%1000)%100-((num%1000)%100)%10)10;
获取默认四个数字
d=((num%1000)%100)%10;
af=(aa-aa%1000)1000;
bf=(aa%1000-(aa%1000)%100)100;
cf=((aa%1000)%100-((aa%1000)%100)%10)10;
获取输入的四个数字
df=((aa%1000)%100)%10;
if(af>a)printf(第一个数应该比 %d 小一点!n
if(af==a)printf(恭喜!第一个数字对了!应该是: %dn 数字比较
if(af
if(bf>b)printf(第二个数应该比 %d 小一点!n
if(bf==b)printf(恭喜!第二个数字对了!就是: %dn 数字比较
if(bf
if(cf>c)printf(第三个数应该比 %d 小一点!n
if(cf==c)printf(恭喜!第三个数字对了!就是: %dn 数字比较
if(cf
if(df>d)printf(第四个数应该比 %d 小一点!n
if(df==d)printf(恭喜!第四个数字对了!就是: %dn 数字比较
if(df
return(1);
}
}
void addrec(int
a) 判断并且增加记录
{
char c;
int flag=0; 标志位
a=11-a;
recread();
for(int i=0;i
if(a
if(i==4 || rec[i].sorce==0)
{
printf(
printf(恭喜!你的成绩 %d 分已经达到了前五名!n
printf(确认要保存记录请按'y',任意键返回...!n
scanf(
if(c!='y')display();
rec[i+1].sorce=rec[i].sorce; 记录后移
strcpy(rec[i+1].name,rec[i].name);
printf(请输入你的名字n
scanf(
rec[i].sorce=a;
recwrite();
写入
printf(恭喜!添加成功!n
flag++;
printf(
printf(请按任意键继续...n
getchar();
getchar();
display();
}
else
{
printf(
printf(恭喜!你的成绩 %d 分已经达到了前五名!n
printf(确认要保存记录请按'y',任意键返回...!n
scanf(
if(c!='y')display();
for(int
j=i;j
rec[j+1].sorce=rec[j].sorce; 记录后移
strcpy(rec[j+1].name,rec[j].name);
if(rec[j+2].sorce==0)break;
}
printf(
printf(请输入你的名字n
scanf(
rec[i].sorce=a;
recwrite(); 写入
printf(恭喜!添加成功!n
flag++;
printf(
printf(请按任意键继续...n
getchar();
getchar();
display();
}
}
}
if(flag==0)
{
printf(
printf(请按任意键继续...n
getchar();
getchar();
display();
}
}
void recread()
读取记录文件
{
FILE *fp;
L: fp=fopen(
if(fp==NULL)
{
recwrite();
goto
L; 初始化
}
if(fread(&rec,sizeof(record),MAX,fp)==MAX)
{
}
else
{
printf(文件读取失败!
}
fclose(fp);
}
void recwrite() 写入记录文件
{
FILE *fp;
fp=fopen(
if(fp==NULL)
printf(写入失败!n
fwrite(rec,sizeof(record),MAX,fp);
fclose(fp);
}
void main()
{
display();
}
猜数字游戏
#include
#include
#include
using namespace std;
int main()
{
int a,b,num1,num2,num3,x,y,z,times;
num1,num2,num3为随机生成的目标数字
srand(time(NULL));
初始化随机数种子
num1=rand()%10;
生成第一个随机数,并确定它是个位数,下
同
while(num1==0){
随机数中0产生的概率较大,故排除0
num1=rand()%10;
}
num2=rand()%10;
while(num2==num1 ||
num2==0){ 用while语句使3个随机数不同
num2=rand()%10;
}
num3=rand()%10;
while(num3==num1 || num3==num2 || num3==0){
num3=rand()%10;
}
for(times=1;times<=7;++times){
规定只能输入7次
a=0,b=0;
a为完全正确的数字个数,b为位置不正确的数的个数
cout<<请输入你猜测的数字:
cin>>x>>y>>z;
if(x==num1) a=a+1;
else
if(x==num2||x==num3) b=b+1;
if(y==num2)
a=a+1;
else if(y==num1||y==num3) b=b+1;
if(z==num3) a=a+1;
else if(z==num2||z==num1)
b=b+1;
if(a==3) {cout<<恭喜,你猜对了 猜测正确后跳出程序
else{
cout< }
}
if(times>7)
cout<<很遗憾,你没有在规定次数内猜对。答案是:
return 0;
}