职业IT人-IT人生活圈

 找回密码
 成为会员
搜索
查看: 1075|回复: 1

C语言猜数字游戏

[复制链接]
一路顺风 发表于 2009-2-10 13:17 | 显示全部楼层 |阅读模式
本帖最后由 一路顺风 于 2009-2-10 21:11 编辑

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
struct right_place {int right; int place;};

int main (void)
{
  int creatDialog (int x, int *p );

  void rndProduce (int numDft[]);
  struct right_place numCompare (int numDft[], int numIn[]);

  int dialog, quitOrContinue, allQuit;
  int numDft[4], numIn[4], result[2];
  struct right_place compareBack;
  
  creatDialog (1, NULL);
  
  allQuit = 1;
  while (allQuit == 1)
  {
     creatDialog (7, NULL);
     rndProduce (numDft);
     quitOrContinue = 1;
     while (quitOrContinue == 1)
     {
        dialog = 2;
        while (dialog == 2)
        {
           creatDialog (2, numIn);
           dialog = creatDialog (3, numIn);           
        }
        compareBack = numCompare (numDft, numIn);
        result[0] = compareBack.right ;
        result[1] = compareBack.place ;
        quitOrContinue = creatDialog (4, result);
     }
     if (quitOrContinue == 2)
        allQuit = creatDialog (5, numDft);
     if (quitOrContinue == 3)
        allQuit = 1;
     if (quitOrContinue == 4)
        allQuit = 2;     
   }

  if (allQuit == 2)
     creatDialog (6, NULL);

  getchar ();
  return 0;
}

int creatDialog (int x, int *p)
{
  int back;
  int i;
  switch (x)
  {
     case 0:
         printf (\"************************************************************************\\n\");
         break;
         case 1:
                 creatDialog (0, NULL);
                 printf (\"欢迎玩猜数字游戏!\\n版本2.0\\n作者:andyzhshg\\n制作日期:2007.9.1\\n\");
                 creatDialog (0, NULL);
                 printf (\"在本游戏中,你需要输入四个数字,\\n然后电脑会给出你猜测的正确情况。\");
                 printf (\"电脑会用它之前生成的\\n四位数与之你的输入比较,然后告诉你\");
                 printf (\"你猜对了几个数字,包\\n括数值和顺序的信息.\\n\");
                 break;
     case 2:
         creatDialog (0, NULL);
         printf (\"请输入你猜测的四位数字(用空格、回车、或Tab隔开):\\n\");
                 for (i = 0; i < 4; i++, p++)
                 scanf (\"%i\", p);
         break;
         case 3:
                 creatDialog (0, NULL);
                 printf (\"你输入的数字是:%i %i %i %i ,确认请输入“1”,重新输入按“2”。\\n\", *p, *(p + 1), *(p + 2), *(p + 3));
                 scanf (\"%i\", &back);
                 return back;
                 break;
         case 4:
                 creatDialog (0, NULL);
                 printf (\"你输入的数字中:\\n数值和位置都正确的有%i个,\\n数值正确但位置不正确的有%i个.\\n\", *p, *(p+1));
                 if ((*p) == 4)
                 {
                     printf (\"恭喜你,答对了!\\n\");
                     printf (\"继续游戏吗?继续请输入“1”,退出游戏请输入“2”。\\n\");
                     scanf (\"%i\", &back);
                     if (back == 1)
                         return 3;
                     if (back == 2)
                         return 4;
                 }
                 else
                 {
                    printf (\"继续吗?继续请输入“1”,显示正确答案请输入“2”。\\n\");
                    scanf (\"%i\", &back);
                    return back;
                 }
                 break;
         case 5:
                 creatDialog (0, NULL);
                 printf (\"正确答案是:%i %i %i %i,再接再厉啊!\\n\", *p, *(p + 1), *(p + 2), *(p + 3));
                 printf (\"继续游戏吗?继续请输入“1”,退出游戏请输入“2”。\\n\");
                 scanf (\"%i\", &back);
                 return back;
                 break;
         case 6:
                 creatDialog (0, NULL);
                 printf (\"感谢你玩本游戏,再见!\\n按任意键退出\\n\");
                 break;
         case 7:
                 creatDialog (0, NULL);
                 printf (\"新的游戏开始了!GOOD LUCK!\\n\");
                 break;
     default:
         break;
  }
}

void rndProduce (int numDft[])
{
   int i;
   srand( (unsigned)time( NULL ) ) ;
   for ( i = 0; i < 4; i++)
   numDft = rand () % 10;
   //printf (\"%i %i %i %i\\n\", numDft[0], numDft[1], numDft[2], numDft[3]);
}

struct right_place numCompare (int numDft[], int numIn[])
{
   int i, j;
   struct {int Dft; int In;} flag[4] = { 1, 1, 1 ,1 ,1, 1, 1, 1 };
   struct right_place result = { 0, 0 };
   for (i = 0; i < 4; i++)
     if (numDft == numIn)
     {
        (result.right)++;
        flag.Dft = 0;
        flag.In = 0;
     }
   for (i = 0; i < 4; i++)
       for (j = 0; j < 4; j++)
          if (flag.Dft && flag[j].In && numDft == numIn[j])
          {
             (result.place)++;
             flag.Dft = 0;
             flag[j].In = 0;
          }
   return result;
}
其实这个程序算法上很简单,写得很长是想实现一个好的人机交互,这可以在creatDialog()
的众多语句中看出来。
creatDialog文件下载:
dialog.rar.rar (181 KB, 下载次数: 6)
joe 发表于 2009-2-21 12:29 | 显示全部楼层
hao,bucuo
您需要登录后才可以回帖 登录 | 成为会员

本版积分规则

QQ|手机版|小黑屋|网站帮助|职业IT人-IT人生活圈 ( 粤ICP备12053935号-1 )|网站地图
本站文章版权归原发布者及原出处所有。内容为作者个人观点,并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是信息平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽造成漏登,请及时联系我们,我们将根据著作权人的要求立即更正或者删除有关内容。

GMT+8, 2024-5-5 04:43 , Processed in 0.166611 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表