Chinaunix首页 | 论坛 | 博客
  • 博客访问: 99247
  • 博文数量: 102
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1011
  • 用 户 组: 普通用户
  • 注册时间: 2014-01-15 13:58
个人简介

普普通通一个人

文章分类

全部博文(102)

文章存档

2018年(1)

2015年(13)

2014年(88)

我的朋友

分类: C/C++

2014-02-05 22:22:49


点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>

  4. #define SIZE 4

  5. /* 函数原型 */
  6. void introduction(void); /* 打印游戏说明到屏幕 */
  7. int judgement(int[], int[]); /* 比较游戏者输入的数字和系统生成的数字 */

  8. int main(void){
  9.     int goal[SIZE];
  10.     int guess[SIZE];
  11.     /* 标题:介绍游戏方法规则 */
  12.     introduction();

  13.     /* 判断是否进入游戏 */
  14.     while ( getchar() == 'y' ){
  15.         int input_num;
  16.         int result = 0;
  17.         srand(time(NULL));/* 生成随机数 */

  18.         /* 创建目标数字, 也就是给数组goal的元素赋值 */
  19.         for (int i = 0; i < SIZE; i++){
  20.             goal[i] = rand() % 10;
  21.             /* 避免数字重复 */
  22.             for (int j = 0; j < i; j++){
  23.                 while (goal[i] == goal[j]){
  24.                     goal[i] = rand() % 9;
  25.                     j = 0;
  26.                 }
  27.             }
  28.         }
  29.         /* 打印一句提示 */
  30.         printf("\nOkey! 数字已经创建完毕!\n请输入您的答案:\n");

  31.         /* 判断游戏者在猜数字还是想看答案 */
  32.         while (scanf_s("%d", &input_num) != EOF && result != 1){
  33.             printf("%d%d%d%d\n", goal[0], goal[1], goal[2], goal[3]);/* debug */
  34.                 /* 使用游戏者输入的四位数给数组赋值 */
  35.                 guess[0] = input_num / 1000;
  36.                 guess[1] = (input_num - guess[0] * 1000) / 100;
  37.                 guess[2] = (input_num - (guess[0] * 1000 + guess[1] * 100)) / 10;
  38.                 guess[3] = input_num - (guess[0] * 1000 + guess[1] * 100 + guess[2] * 10);
  39.                 /* 打印数组中的各元素 */
  40.                 printf("%d%d%d%d", guess[0], guess[1], guess[2], guess[3]);
  41.                 /* 调用函数进行比较 */
  42.                 result = judgement(goal, guess);
  43.                 
  44.         }
  45.         /* 打印答案到屏幕 */
  46.         printf("%d%d%d%d\n", goal[0], goal[1], goal[2], goal[3]);
  47.         printf("\n是否再玩一局?(y/n):");
  48.     }
  49.     /* 不进入游戏则输出下文 */
  50.     printf("Okey! 那就下次见吧, Bye!\n");
  51.     
  52.     return 0;
  53. }


  54. /* 打印游戏说明到屏幕 */
  55. void introduction(void){
  56.      printf("************************** 游戏方法 **************************\n\n"
  57.          " 1、系统会生成一个4位数,例如0682(游戏时,这个数字您是看不到的),"
  58.          "\n该数字个、十、百、千位上的数字均不相同\n\n"
  59.          " 2、请您通过键盘键入您猜想的4位数字,然后回车。系统会给出提示,"
  60.          "\n请按照提示继续推理猜想\n\n"
  61.          " 3、如果放弃了,想看答案,请输入 Ctrl+z,然后回车\n\n"
  62.          "******************************************************************\n\n"
  63.          "OKey!! Come on baby!!!\n\n"
  64.          "准备好了吗?(y/n):");
  65. }

  66. /* 判断用户输入数组与系统生成数组是否匹配 */
  67. int judgement(int judge_goal[SIZE], int judge_guess[SIZE]){
  68.     int a = 0, b = 0;/* counter */
  69.     /* count the number and the position all correct */
  70.     for (int i = 0; i < SIZE; i++){
  71.         if (judge_goal[i] == judge_guess[i]){
  72.             a++;
  73.         }
  74.         /* count the number correct (if the number matching, then b+1)*/
  75.         for (int j = 0; j < SIZE; j++){
  76.             if (judge_goal[i] == judge_guess[j])
  77.                 b++;
  78.         }
  79.     }
  80.     /* b include a, so b-a */
  81.     b = b - a;
  82.     if (a == 4){
  83.         printf("你居然猜对了!!太厉害了,佩服佩服!");
  84.         printf("\n是否再玩一局?(y/n):");
  85.         return 1;
  86.     }
  87.     else{
  88.         printf("------%d 个数字、位置都正确; %d 个数字正确、但位置不正确!\n\n", a, b);
  89.         return 0;
  90.     }
  91. }

阅读(189) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~