C语言题目 编程实现数字猜谜游戏!

供稿:hz-xin.com     日期:2025-01-13
C语言编程题(设计一个猜数字的小游戏)满意再加200分!!!!

我看了楼上几个的答案,功能均不是很完善,所以我决定来试一试
,应该是今天最迟是明天可以贴出来了.希望不要那么快就结贴....


哈哈.....经过了几个小时的奋战.. 终于搞出来了!!!!!!!!!!!!!!!!!!! 你题目要求的功能几乎全部实现.希望你认真调试一下!!!!!!

调试环境.vc++ 6.0. 支持中文编译的编译器都可以调试运行的.

注意事项:如果编译器是不支持中文显示的就会出现乱码的,所以最好是在支持中文显示的编译器上面编译运行.例如:vc++ 6.0以上的版本!!!!




#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("cls"); //清屏

printf(" ============================================
");
printf(" ================数字竞猜游戏================
");
printf(" ============================================
");
printf("
");
printf(" 1: 新游戏
");
printf("
");
printf(" 2: 浏览记录
");
printf("
");
printf(" 3: 帮助说明
");
printf("
");
printf(" 4: 清除记录
");
printf("
");
printf(" 5: 退出
");
printf("
");
printf(" ============================================
");
xuanze();
}
void xuanze() //选择函数
{
int a;
printf("请输入你所选择的操作数:
");
scanf("%d",&a);
if(a==1||a==2||a==3||a==4||a==5)
{
sys(a);
}//选择相应的操作数执行函数
else
{
printf("错误的操作数!
");;
printf("
");
printf("请按任意键继续...
");
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("cls"); //清屏
printf("
");
printf("记录列表显示如下:
");
printf("
");
for(int i=0;i<MAX;i++)
{
if(rec[i].sorce==0)printf("
");
else
printf(" 第 %d 名: 姓名: %s 分数 %d
",i+1,rec[i].name,rec[i].sorce);
}

printf("
");
printf("请按任意键继续...
");
getchar();
getchar();//////////////上面列出记录文件中的记录

/////////////////////////////////////////////////////////////////////////////
int snum; //输入的数字
int sn=10; //机会次数
num=qushu(); //取数
L: system("cls"); //清屏


printf(" ============================================
");
printf(" ================数字竞猜游戏================
");
printf(" ============================================
");
printf("
");
printf(" 1: 显示答案
");
printf(" ============================================
");
printf("
");
printf("请输入你猜想的四个数字(格式为9999样式)你还有 %d 次机会:
",sn);
scanf("%d",&snum);
if(snum1000 || snum==1)
{
if(snum==1)
{
printf("你放弃了本局游戏!该四个数字是: %d
",num);
printf("
");
printf("请按任意键继续...
");
getchar();
getchar();
display();
}
else
{
int flag=tishi(snum);
if(flag!=0 && sn!=0)
{
sn--;
if(sn==0)
{
printf("真是遗憾!十次机会没有了!没有关系!下次继续!
");
printf("
");
printf("请按任意键继续...
");
getchar();
getchar();
display();
}
printf("请按任意键继续猜...
");
getchar();
getchar();
goto L;
}
else
{
if(sn!=0)addrec(sn);
else
{
printf("请按任意键继续...
");
getchar();
getchar();
display();
}
}
}
}
else
{
printf("错误的操作数!
");;
printf("
");
printf("请按任意键继续...
");
getchar();
getchar();
goto L;
}
}

void help() //帮助说明
{
system("cls"); //清屏
printf(" ============================================
");
printf(" ==============数字竞猜游戏帮助==============
");
printf(" ============================================
");
printf("
");
printf("1.新游戏中,你可以输入四位数,来竞猜系统自动生成的四个数字!,只有十次的机会,
");
printf(" 每次机会都有相对应的提示,十次的机会利用完了还没有猜对的话就算失败!四个数字的
");
printf(" 相应格式在游戏中会有提示!当成功猜出系统给定的数字时候,就会统计你的成绩.当你的
");
printf(" 成绩比记录文件中的记录好的时候就会提示你是否把记录记录到记录文件中,当你选择是
");
printf(" 的时候就会接着提示你输入你的名字.再按回车.没有意外就会提示保存成功!
");
printf(" 还有要说明的是记录中的分数是越低就代表成绩越好!
");
printf("2.浏览记录有三种方式!第一种只是列出记录中的姓名;第二种是列出记录中的成绩次序
");
printf(" 第三种是姓名跟成绩一起列出来!
");
printf("3.清除记录就是把记录文件初始化.即是让记录文件为空!
");
printf("
");
printf("请按任意键继续...
");
getchar();
getchar();
display();
}

void vdisplay() //浏览记录界面
{
system("cls"); //清屏

printf(" ============================================
");
printf(" ================数字竞猜游戏================
");
printf(" ============================================
");
printf("
");
printf(" 1: 按记录的顺序浏览
");
printf("
");
printf(" 2: 按记录的姓名浏览
");
printf("
");
printf(" 3: 姓名记录全部浏览
");
printf("
");
printf(" 4: 返回上级
");
printf("
");
printf(" ============================================
");
vxuanze();
}
void vxuanze() //浏览选择函数
{
int a;
printf("请输入你所选择的操作数:
");
scanf("%d",&a);
if(a==1||a==2||a==3||a==4)
{
vsys(a);
}//选择相应的操作数执行函数
else
{
printf("错误的操作数!
");;
printf("
");
printf("请按任意键继续...
");
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("cls"); //清屏
printf("
");
printf("记录列表显示如下:
");
printf("
");
for(int i=0;i<MAX;i++)
{
if(rec[i].sorce==0)printf("
");
else
printf(" 第 %d 名: 姓名: %s
",i+1,rec[i].name);
}

printf("
");
printf("请按任意键继续...
");
getchar();
getchar();
vdisplay();
}
void viewsorce() //按记录的姓名浏览
{
recread();
system("cls"); //清屏
printf("
");
printf("记录列表显示如下:
");
printf("
");
for(int i=0;i<MAX;i++)
{
if(rec[i].sorce==0)printf("
");
else
printf(" 第 %d 名: 分数 %d
",i+1,rec[i].sorce);
}

printf("
");
printf("请按任意键继续...
");
getchar();
getchar();
vdisplay();
}
void viewsname() //按姓名和记录浏览
{
recread();
system("cls"); //清屏
printf("
");
printf("记录列表显示如下:
");
printf("
");
for(int i=0;i<MAX;i++)
{
if(rec[i].sorce==0)printf("
");
else
printf(" 第 %d 名: 姓名: %s 分数 %d
",i+1,rec[i].name,rec[i].sorce);
}

printf("
");
printf("请按任意键继续...
");
getchar();
getchar();
vdisplay();
}
void delrec() //删除记录
{
recread();
for(int i=0;i<MAX;i++)
{
rec[i].sorce=0;
}
recwrite();
printf("删除成功!
");
printf("
");
printf("请按任意键继续...
");
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<i;j++)
{
a=a+rand(); //判断随机数是否是四位数 如果不是继续取数
}
a=(a/i+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("恭喜!你猜对了!四个数就是:%d
",num);
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 小一点!
",af);
if(af==a)printf("恭喜!第一个数字对了!应该是: %d
",af); //数字比较
if(af<a)printf("第一个数应该比 %d 大一点!
",af);

if(bf>b)printf("第二个数应该比 %d 小一点!
",bf);
if(bf==b)printf("恭喜!第二个数字对了!就是: %d
",bf); //数字比较
if(bf<b)printf("第二个数应该比 %d 大一点!
",bf);

if(cf>c)printf("第三个数应该比 %d 小一点!
",cf);
if(cf==c)printf("恭喜!第三个数字对了!就是: %d
",cf); //数字比较
if(cf<c)printf("第三个数应该比 %d 大一点!
",cf);

if(df>d)printf("第四个数应该比 %d 小一点!
",df);
if(df==d)printf("恭喜!第四个数字对了!就是: %d
",df); //数字比较
if(df<d)printf("第四个数应该比 %d 大一点!

",df);

return(1);
}
}

void addrec(int a) //判断并且增加记录
{
char c;
int flag=0; //标志位
a=11-a;
recread();
for(int i=0;i<MAX;i++)
{
if(a<rec[i].sorce || rec[i].sorce==0)
{
if(i==4 || rec[i].sorce==0)
{
printf("
");
printf("恭喜!你的成绩 %d 分已经达到了前五名!
",a);
printf("确认要保存记录请按'y',任意键返回...!
");
scanf("%s",&c);
if(c!='y')display();
rec[i+1].sorce=rec[i].sorce; //记录后移
strcpy(rec[i+1].name,rec[i].name);
printf("请输入你的名字
");
scanf("%s",&rec[i].name);
rec[i].sorce=a;
recwrite(); //写入
printf("恭喜!添加成功!
",a);
flag++;
printf("
");
printf("请按任意键继续...
");
getchar();
getchar();
display();
}
else
{
printf("
");
printf("恭喜!你的成绩 %d 分已经达到了前五名!
",a);
printf("确认要保存记录请按'y',任意键返回...!
");
scanf("%s",&c);
if(c!='y')display();
for(int j=i;j<MAX-1;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("请输入你的名字
");
scanf("%s",&rec[i].name);
rec[i].sorce=a;
recwrite(); //写入
printf("恭喜!添加成功!
",a);
flag++;
printf("
");
printf("请按任意键继续...
");
getchar();
getchar();
display();
}
}
}
if(flag==0)
{
printf("
");
printf("请按任意键继续...
");
getchar();
getchar();
display();
}
}

void recread() //读取记录文件
{
FILE *fp;
L: fp=fopen("E:\ec.rec","rb");
if(fp==NULL)
{
recwrite();
goto L; //初始化
}
if(fread(&rec,sizeof(record),MAX,fp)==MAX)
{
}
else
{
printf("文件读取失败!");
}
fclose(fp);
}
void recwrite() //写入记录文件
{
FILE *fp;
fp=fopen("E:\ec.rec","wb");
if(fp==NULL)
printf("写入失败!
");
fwrite(rec,sizeof(record),MAX,fp);
fclose(fp);
}

void main()
{
display();
}

////////////////////////////////

源码如下:
/* File: guess.c */
#include /* standard input & output support */
#include /* srand() rand() */
#include /* time() */
/* 宏定义 */
#define NUMBER_LENGTH 5 /* 随机数长度 */
#define NUMBER_LIMIT 10 /* 随机数限制, 每一位0-9 */
#define INPUT_LENTH 128 /* 输入缓冲区大小 */
char goal[NUMBER_LENGTH] = {0}; /* 保存随机数 */
char flag[NUMBER_LIMIT] = {0}; /* 保存随机数标志, 保证不重复 */
char input[INPUT_LENTH] = {0}; /* 保存输入 */
/* 初始化用于保存数据的数组 */
void initData()
{
int i = 0;
while (i < NUMBER_LENGTH)
goal[i++] = 0;

i = 0;
while (i < NUMBER_LIMIT)
{
flag[i++] = 0;
}
}
/* 初始化用于保存缓冲区的数组 */
void initBuffer()
{
int i = 0;
while (i < INPUT_LENTH)
input[i++] = 0;
}
/* 显示猜测结果 */
void display()
{
int count = 0;

int i = 0;
while (i < NUMBER_LENGTH)
{
if (input[i] == goal[i])
{
printf("%c", 'o');
count++;
}
else
{
printf("%c", 'x');
}

i++;
}

printf("
RIGHT: %d bit(s)
", count);

if (count == NUMBER_LENGTH)
{
printf("You win! The number is %s.
", goal);

exit(0);
}
}
/* 生成随机数 */
void general()
{
/* 以时间作为时间种子保证生成的随机数真正具有随机性质 */
srand((unsigned int)time(NULL));

int i = 0;
while (i < NUMBER_LENGTH)
{
char tmp;
do
{
tmp = '0' + ((i != 0) ? (rand() % 10) : (1 + rand() % 9));
} while (flag[tmp] != 0);

flag[tmp] = 1;
goal[i++] = tmp;
}
}
/* 输入方法,用于猜测 */
void guess()
{
printf("Please input the number you guessed:
");
scanf("%s", input);
display();
initBuffer();
}
/* 主函数,程序主框架 */
int main (int argc, const char * argv[])
{
initData();
initBuffer();
general();
while (1) guess();
return 0;
}
==============================================
运行结果见附图,希望我的回答能够对你有所帮助。

一个函数用于生成一个随机数

再用一个函数进行三次循环

如果循环中输入的数字猜对了就返回1如果三次循环结束则返回0

主数字判断返回的结果如果是1则表示猜对否则表示猜错

然后询问是否继续进行猜数字游戏


下面是一个简单的代码

#include <stdio.h>
#include <time.h>

void clean_input_buf(void)
{
    while(getchar() != '
');
}

int make_num(int num)
{
    srand(num);
    return 1+rand()%20;
}

int guess_num(void)
{
    int i=3;
    int n;
    int num;

    num=make_num(clock());
    while(i)
    {
        printf("请输入一个你猜的数字:");
        scanf("%d",&n);

        if(n == num)
            return 1;

        clean_input_buf();
        --i;
    }

    return 0;
}

int main(int argc,char **argv)
{
    char c;

    printf("猜数字游戏!
游戏要猜测的数字为1-20,每个数字可以猜测3次!
");

    while(1)
    {
        if(guess_num() == 1)
            printf("恭喜你,你猜中了!
");
        else
            printf("很遗憾,你猜错了!
");

redo:
        printf("还要继续游戏吗?继续输入Y否则输入N!
Y/N:");
        c=getchar();
        clean_input_buf();

        if(c == 'Y' || c == 'y')
            continue;
        else if(c == 'N' || c == 'n')
            break;
        else
        {
            printf("输入错误,请重新输入!
");
            goto redo;
        }

    }

    return 0;
}


C语言题目 编程实现数字猜谜游戏!
然后询问是否继续进行猜数字游戏 下面是一个简单的代码 include <stdio.h>#include void clean_input_buf(void){ while(getchar() != '\\n');}int make_num(int num){ srand(num); return 1+rand()%20;}int guess_num(void){ int i=3; int n; int num; num=m...