| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 418 人关注过本帖
标题:哪位大侠能给改下这个代码??谢谢 谢谢 谢谢
只看楼主 加入收藏
编程小将
Rank: 1
来 自:萧县
等 级:新手上路
帖 子:14
专家分:0
注 册:2010-12-8
结帖率:80%
收藏
已结贴  问题点数:20 回复次数:3 
哪位大侠能给改下这个代码??谢谢 谢谢 谢谢
游戏规则如下
通常电脑生成数字,一方猜。电脑出的是没有重复数字的4位数,猜的人就可以开始猜。每猜一组数字,电脑要根据这个数字给出几A几B,其中A前面的数字表示位置正确的数的个数,而B前的数字表示数字正确而位置不对的数的个数。   如正确答案为 5234,而猜的人猜 5346,则是 1A2B,其中有一个5的位置对了,记为1A,而3和4这两个数字对了,而位置没对,因此记为 2B,合起来就是 1A2B。   接着猜的人再根据出题者的几A几B继续猜,直到猜中(即 4A0B)为止。
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include<windows.h>
#include<string.h>

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

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

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


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

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

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

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

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

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

 printf("\n");
 printf("请按任意键继续...\n");
 getchar();
 getchar();
 vdisplay();
}
void delrec()         //删除记录
{
 recread();
 for(int i=0;i<MAX;i++)
 {
  rec[i].sorce=0;
 }
 recwrite();
 printf("删除成功!\n");
 printf("\n");
 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<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\n",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("\n第一个数应该比 %d 小一点!\n",af);
  if(af==a)printf("恭喜!第一个数字对了!应该是: %d\n",af);   //数字比较
  if(af<a)printf("第一个数应该比 %d 大一点!\n",af);

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

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

  if(df>d)printf("第四个数应该比 %d 小一点!\n",df);
  if(df==d)printf("恭喜!第四个数字对了!就是: %d\n",df);      //数字比较
  if(df<d)printf("第四个数应该比 %d 大一点!\n\n",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("\n");
    printf("恭喜!你的成绩 %d 分已经达到了前五名!\n",a);
    printf("确认要保存记录请按'y',任意键返回...!\n");
    scanf("%s",&c);
    if(c!='y')display();
    rec[i+1].sorce=rec[i].sorce;      //记录后移
    strcpy(rec[i+1].name,rec[i].name);
    printf("请输入你的名字\n");
    scanf("%s",&rec[i].name);
    rec[i].sorce=a;
    recwrite();                          //写入
    printf("恭喜!添加成功!\n",a);
    flag++;
    printf("\n");
    printf("请按任意键继续...\n");
    getchar();
    getchar();
    display();
   }
   else
   {
    printf("\n");
    printf("恭喜!你的成绩 %d 分已经达到了前五名!\n",a);
    printf("确认要保存记录请按'y',任意键返回...!\n");
    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("\n");
    printf("请输入你的名字\n");
    scanf("%s",&rec[i].name);
    rec[i].sorce=a;
    recwrite();                          //写入
    printf("恭喜!添加成功!\n",a);
    flag++;
    printf("\n");
    printf("请按任意键继续...\n");
    getchar();
    getchar();
    display();
   }
  }
 }
 if(flag==0)
 {
  printf("\n");
  printf("请按任意键继续...\n");
  getchar();
  getchar();
  display();
 }
}

void recread()                       //读取记录文件
{
 FILE *fp;
L: fp=fopen("E:\\rec.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:\\rec.rec","wb");
 if(fp==NULL)
  printf("写入失败!\n");
 fwrite(rec,sizeof(record),MAX,fp);
 fclose(fp);
}

void main()
{
 display();
}
搜索更多相关主题的帖子: 代码 
2010-12-20 21:38
fanghao520
Rank: 2
等 级:论坛游民
帖 子:17
专家分:18
注 册:2010-11-13
收藏
得分:5 
好长啊
2010-12-21 20:05
马后炮
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:156
专家分:560
注 册:2010-12-17
收藏
得分:8 
这个和文件有什么关系啊?

樱之雪,晓之车
2010-12-22 22:01
快速回复:哪位大侠能给改下这个代码??谢谢 谢谢 谢谢
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.028073 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved