找回密码
 立即注册
查看: 551|回复: 40

没事了- -。。。

[复制链接]

1万

回帖

1万

基友

2万

积分

末日审判

Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17

发表于 2013-7-7 19:58:37 | 显示全部楼层 |阅读模式
本帖最后由 悔  于 2013-7-8 18:46 编辑

用户从键盘输入4 位数字不重复的整数,来匹配程序运行时随机生成的一个
         4 位整数,若数字和位置均等同,表示用户赢了。每猜一次,计算机均给出提示
         信息 (x,y),x 表示数字、位置都猜得正确的数字的个数,y 表示数字猜对了,
         但位置没有猜对的数字的个数。
             程序运行中,给定H 键作为帮助键,帮助用户更快的达到目的,无论何时,
         按下H 键,均得到更详细的信息,如 “第1 位数字正确,第2,3 位数字位置不
         对”等。给定K 键为管理键,按下后可以查看计算机所给出的4 位数,但查看前
         需要输入密码,密码自定。

现在只是写出来猜数的主体,快捷键什么的都没加,求加上。

#include<stdio.h>
#include <dos.h>
#include<time.h>
#include<stdlib.h>
#define ESC 0x11B
#define LEFT 0x4B00
#define RIGHT 0x4D00
#define UP 0x4800
#define DOWN 0x5000

int getrand(){
         int a[10]={0,1,2,3,4,5,6,7,8,9};
         int j,n,e,b,c,d;
         srand((unsigned)time(NULL));
                n=rand()%9+1;
         e=a[n];
         for(;n<=8;n++)
          a[n]=a[n+1];
         srand((unsigned)time(NULL));
                n=rand()%8;
         b=a[n];
         for(;n<=7;n++)
         a[n]=a[n+1];
         srand((unsigned)time(NULL));
                n=rand()%7;
         c=a[n];
                for(;n<=6;n++)
          a[n]=a[n+1];
         srand((unsigned)time(NULL));
                n=rand()%6;
         d=a[n];
    j=e*1000+b*100+c*10+d;
return j;

}
void main()
{
   int stime,a,z,t,i,c,m,g,s,j,k,l[4],q;    /*j:数字正确的位数  k:位置正确的位数*/
   int ch;
   long ltime;
   ltime=time(NULL);       /*l:数字相同时,人所猜中数字的正确位置*/
   stime=(unsigned int)ltime/2;
   srand(stime);
   q=getrand();
   printf("\n");
   printf("-------------------------------欢迎进入猜数字游戏-------------------------------\n");
   printf("\n");
   printf("------------------------------------游戏帮助------------------------------------\n");
   printf("用户从键盘输入一个4位数,来匹配计算机内定的4位随机数,若数字和位数均等同,表示用户赢了。\n");
   printf("每猜一次,计算机均给出提示信息(x,y),x表示数字、位置都匹配的个数,y表示数字匹配但位置不匹配的个数。\n");
   printf("\n");
   for(c=1;;c++)         /*c: 猜数次数计数器*/
   {
      printf("请输入你猜的数字:");
      scanf("%d",&g);         
      a=q;j=0;k=0;l[0]=l[1]=l[2]=l[3]=0;
      for(i=1;i<5;i++)      /*i:原数中的第i位数。个位为第一位,千位为第4位*/
      {
         s=g;m=1;
         for(t=1;t<5;t++)     /*人所猜想的数*/
         {
            if(a%10==s%10)     /*若第i位与人猜的第t位相同*/
            {
               if(m&&t!=l[0]&&t!=l[1]&&t!=l[2]&&t!=l[3])
               {
                  j++;m=0;l[j-1]=t;    /*若该位置上的数字尚未与其它数字“相同”*/
               }                       /*记录相同数字时,该数字在所猜数字中的位置*/

            if(i==t) k++;         /*若位置也相同,则计数器k加1*/
         }
         s/=10;
      }
      a/=10;
   }
         
   printf("提示信息(%d,%d)\n",k,j);
   if(k==4) break;         /*若位置全部正确,则人猜对了,退出*/
  
   }
   printf("你一共猜了 %d次 \n",c);


}
回复

使用道具 举报

1万

回帖

1万

基友

2万

积分

末日审判

Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17

 楼主| 发表于 2013-7-7 20:00:27 | 显示全部楼层
@time 怎么样
回复 支持 反对

使用道具 举报

1万

回帖

1万

基友

2万

积分

末日审判

Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17

 楼主| 发表于 2013-7-7 20:01:53 | 显示全部楼层
加上注释- -
回复 支持 反对

使用道具 举报

5895

回帖

118

基友

1万

积分

苍海之魂

invincible

Rank: 13Rank: 13Rank: 13Rank: 13

发表于 2013-7-7 20:02:45 | 显示全部楼层
好麻烦的东西

评分

参与人数 1妹纸 +200 收起 理由
悔  + 200 赞一个!

查看全部评分

回复 支持 反对

使用道具 举报

1万

回帖

1万

基友

2万

积分

末日审判

Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17

 楼主| 发表于 2013-7-7 20:13:46 | 显示全部楼层
time 发表于 2013-7-7 20:02
好麻烦的东西

就是麻烦才弄不出来
回复 支持 反对

使用道具 举报

7310

回帖

174

基友

1万

积分

仙人2层 Lv.11

有事请@凉茶

Rank: 6Rank: 6

苍海的女仆

发表于 2013-7-7 20:21:08 | 显示全部楼层
请不要介意,穷点拼命赚基友中。。。
红包有限,请尽快领取,不定期埋100个红包- -请戳→《红包领取》
回复 支持 反对

使用道具 举报

7310

回帖

174

基友

1万

积分

仙人2层 Lv.11

有事请@凉茶

Rank: 6Rank: 6

苍海的女仆

发表于 2013-7-7 20:21:39 | 显示全部楼层
请不要介意,穷屌拼命赚基友中。。。

评分

参与人数 1基友 +255 收起 理由
悔  + 255 不哭站撸

查看全部评分

红包有限,请尽快领取,不定期埋100个红包- -请戳→《红包领取》
回复 支持 反对

使用道具 举报

1万

回帖

1万

基友

2万

积分

末日审判

Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17

 楼主| 发表于 2013-7-7 20:26:51 | 显示全部楼层
 凉 发表于 2013-7-7 20:21
请不要介意,穷点拼命赚基友中。。。

- -卧槽,你那么多呢还

点评

帖子  发表于 2013-7-7 20:30
奖励还没发呢 贴吧还会开的T_T  发表于 2013-7-7 20:30
回复 支持 反对

使用道具 举报

7310

回帖

174

基友

1万

积分

仙人2层 Lv.11

有事请@凉茶

Rank: 6Rank: 6

苍海的女仆

发表于 2013-7-7 20:34:20 | 显示全部楼层
额 这么好哇 么么哒
红包有限,请尽快领取,不定期埋100个红包- -请戳→《红包领取》
回复 支持 反对

使用道具 举报

7310

回帖

174

基友

1万

积分

仙人2层 Lv.11

有事请@凉茶

Rank: 6Rank: 6

苍海的女仆

发表于 2013-7-7 20:35:21 | 显示全部楼层
对了 你是墙角de那啥?有印象
红包有限,请尽快领取,不定期埋100个红包- -请戳→《红包领取》
回复 支持 反对

使用道具 举报

7310

回帖

174

基友

1万

积分

仙人2层 Lv.11

有事请@凉茶

Rank: 6Rank: 6

苍海的女仆

发表于 2013-7-7 20:37:48 | 显示全部楼层
@街角de幸福
红包有限,请尽快领取,不定期埋100个红包- -请戳→《红包领取》
回复 支持 反对

使用道具 举报

1万

回帖

1万

基友

2万

积分

末日审判

Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17

 楼主| 发表于 2013-7-7 20:54:33 | 显示全部楼层
 凉 发表于 2013-7-7 20:37
@街角de幸福

是啊,不是墙角
回复 支持 反对

使用道具 举报

5895

回帖

118

基友

1万

积分

苍海之魂

invincible

Rank: 13Rank: 13Rank: 13Rank: 13

发表于 2013-7-7 22:38:49 | 显示全部楼层
写完了
回复 支持 反对

使用道具 举报

5895

回帖

118

基友

1万

积分

苍海之魂

invincible

Rank: 13Rank: 13Rank: 13Rank: 13

发表于 2013-7-7 22:55:36 | 显示全部楼层
本帖最后由 time 于 2013-7-8 00:32 编辑

先发过来500基友.exe (9 KB, 下载次数: 1)
还没怎么测试bug呢
密码是abc

评分

参与人数 1基友 +255 收起 理由
悔  + 255 神马都是浮云

查看全部评分

回复 支持 反对

使用道具 举报

1万

回帖

1万

基友

2万

积分

末日审判

Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17

 楼主| 发表于 2013-7-8 11:50:08 | 显示全部楼层
time 发表于 2013-7-7 22:55
还没怎么测试bug呢
密码是abc

再回个帖子
回复 支持 反对

使用道具 举报

1万

回帖

1万

基友

2万

积分

末日审判

Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17

 楼主| 发表于 2013-7-8 11:54:30 | 显示全部楼层
time 发表于 2013-7-7 22:55
还没怎么测试bug呢
密码是abc

给做好然后c文件给我,剩下的基友给你
回复 支持 反对

使用道具 举报

1万

回帖

6412

基友

3万

积分

死神左手

纯白无邪

Rank: 16Rank: 16Rank: 16Rank: 16

二货勋章周年纪念勋章

发表于 2013-7-8 12:18:45 | 显示全部楼层
好厉害= =完全看不懂。。。话说LZ好像墙角の什么的

点评

不是墙角= =  发表于 2013-7-9 08:43
回复 支持 反对

使用道具 举报

339

回帖

468

基友

1762

积分

通神3段 Lv.6

Rank: 3Rank: 3

发表于 2013-7-8 12:22:23 | 显示全部楼层
围观
回复 支持 反对

使用道具 举报

1万

回帖

3万

基友

4万

积分

仙人9层 Lv.18

 万般繁华不如初相见

Rank: 12Rank: 12Rank: 12

发表于 2013-7-8 13:35:14 | 显示全部楼层
不明觉厉
回复 支持 反对

使用道具 举报

4637

回帖

1万

基友

5万

积分

快乐的小二b

二、谓之双,本命双子

Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17

周年纪念勋章二货勋章

发表于 2013-7-8 13:51:37 | 显示全部楼层
@龙
回复 支持 反对

使用道具 举报

5895

回帖

118

基友

1万

积分

苍海之魂

invincible

Rank: 13Rank: 13Rank: 13Rank: 13

发表于 2013-7-8 18:38:22 | 显示全部楼层
500.c (3.53 KB, 下载次数: 2)

评分

参与人数 1基友 +255 收起 理由
悔  + 255 虽然没运行出来

查看全部评分

回复 支持 反对

使用道具 举报

2527

回帖

1万

基友

1万

积分

仙人4层 Lv.13

举世皆敌我何惧

Rank: 7Rank: 7Rank: 7

发表于 2013-7-8 18:43:24 | 显示全部楼层
看不懂
回复 支持 反对

使用道具 举报

5895

回帖

118

基友

1万

积分

苍海之魂

invincible

Rank: 13Rank: 13Rank: 13Rank: 13

发表于 2013-7-8 18:46:53 | 显示全部楼层
你是说exe么
回复 支持 反对

使用道具 举报

1万

回帖

1万

基友

2万

积分

末日审判

Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17

 楼主| 发表于 2013-7-8 19:22:54 | 显示全部楼层
time 发表于 2013-7-8 18:46
你是说exe么

开始界面是英文,按K H没什么变化啊
回复 支持 反对

使用道具 举报

5895

回帖

118

基友

1万

积分

苍海之魂

invincible

Rank: 13Rank: 13Rank: 13Rank: 13

发表于 2013-7-8 19:23:58 | 显示全部楼层
悔  发表于 2013-7-8 19:22
开始界面是英文,按K H没什么变化啊

回车呢
回复 支持 反对

使用道具 举报

5895

回帖

118

基友

1万

积分

苍海之魂

invincible

Rank: 13Rank: 13Rank: 13Rank: 13

发表于 2013-7-8 19:34:58 | 显示全部楼层
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <time.h>
  5. #include <conio.h>
  6. #define SIZE 50 /*猜数范围*/
  7. #define PWORD "abc"/*密码*/
  8. typedef enum BOOL{FALSE=0,TRUE=1} BOOL;//枚举
  9. struct num//输入数字与随机数的结构
  10. {
  11.         int input[4];//输入数字
  12.         int random[4];//随机数
  13. };
  14. BOOL getnum(int * numarray,int * lastinput,int * lastrand)//获取输入的函数
  15. {
  16.         char * str[4];//为进入help模式和控制模式,使用char*
  17.         int ct,ct2;//计数器
  18.         for(ct=0;ct<4;ct++)//获取输入
  19.         {
  20.                 str[ct]=(char *)malloc(51*sizeof(char));//分配内存
  21.                 fgets(str[ct],50,stdin);
  22.                 fflush(stdin);
  23.                 if(helporctrl(str[ct],lastinput,lastrand))//判断是否为H和K
  24.                 {
  25.                         return FALSE;
  26.                         break;//如果是H和K则退出循环
  27.                 }
  28.                 else
  29.                 {
  30.                         numarray[ct]=atoi(str[ct]);//如果不是就调用atoi
  31.                 }
  32.         }
  33.         return TRUE;
  34. }

  35. BOOL helporctrl(char *str,int * lastinput,int * lastrand)//判断H和K,实现HELP和CONTROL模式
  36. {
  37.         int mistakes=0,mtime=0;
  38.         int ct;//都是计数器
  39.         int ctforhelp,ctforhelp2;
  40.         int ctforctrl;
  41.         char * password=(char *)malloc(20*sizeof(char));
  42.         for(ct=0;ct<50;ct++)//逐个判断
  43.         {
  44.                 if(str[ct]=='H')//help模式
  45.                 {
  46.                         printf("\nhelp:\n");
  47.                         for (ctforhelp=0;ctforhelp<4;ctforhelp++)
  48.                         {
  49.                                 for (ctforhelp2=0;ctforhelp2<4;ctforhelp2++)
  50.                                 {
  51.                                         if (lastinput[ctforhelp]==lastrand[ctforhelp2])
  52.                                         {
  53.                                                 printf("Number %d is right.",ctforhelp+1);
  54.                                                 if (ctforhelp==ctforhelp2)
  55.                                                 {
  56.                                                         printf("location is right too!\n");
  57.                                                 }
  58.                                                 else
  59.                                                         putchar('\n');
  60.                                         }
  61.                                         else
  62.                                         {
  63.                                                 mistakes=TRUE;
  64.                                                 mtime++;
  65.                                         }
  66.                                 }
  67.                         }
  68.                         if (mistakes&&mtime!=16)
  69.                         {
  70.                                 puts("There are still some mistakes\n");
  71.                         }
  72.                         if(mtime==16)
  73.                         {
  74.                                 printf("All wrong.\n");
  75.                         }
  76.                         return TRUE;
  77.                 }
  78.                 else if(str[ct]=='K')//control模式
  79.                 {
  80.                         printf("\ncontrol:\n");
  81.                         printf("Enter password\n");
  82.                         gets(password);
  83.                         while(strcmp(password,PWORD))//密码错误处理
  84.                                 printf("Wrong password,please try again.\n");
  85.                         {
  86.                                 puts("random numbers are: ");//输出随机数
  87.                                 for (ctforctrl=0;ctforctrl<4;ctforctrl++)
  88.                                 {
  89.                                         printf("%d\n",lastrand[ctforctrl]);
  90.                                 }
  91.                                 putchar('\n');
  92.                         }
  93.                         return TRUE;
  94.                 }
  95.         }
  96.         free(password);
  97.         return FALSE;
  98. }
  99. void random(int *rnum,int size)//生成随机数
  100. {
  101.         int ct;//计数器
  102.         srand(time(0));//随机数种子
  103.         for(ct=0;ct<4;ct++)
  104.         {
  105.                 rnum[ct]=rand()%size+1;//生成随机数并赋值给rnum[ct]
  106.         }
  107. }
  108. BOOL compare(int *input,int *rand)//比较输入数与随机数
  109. {
  110.         int count,incount;
  111.         int numct=0,addct=0;//正确次数计数器
  112.         for (count=0;count<4;count++)
  113.         {
  114.                 for (incount=0;incount<4;incount++)
  115.                 {
  116.                         if (input[incount]==rand[count])
  117.                         {
  118.                                 numct++;
  119.                                 if (incount==count)
  120.                                 {
  121.                                         addct++;
  122.                                 }
  123.                         }
  124.                 }
  125.         }
  126.         if (numct==addct&&addct==4)//全对则退出程序
  127.         {
  128.                 printf("Congratulations!random numbers are ");
  129.                 for (count=0;count<4;count++)
  130.                 {
  131.                         printf("%d ",rand[count]);
  132.                 }
  133.                 putchar('.\n');
  134.                 return TRUE;
  135.         }
  136.         else//有错误
  137.         {
  138.                 printf("<%d,%d>\n",addct,numct);
  139.         }
  140.         return FALSE;
  141. }
  142. int main(void)
  143. {
  144.         struct num number;//声明结构number
  145.         static struct num copy;//number的副本
  146.         int ct=0;
  147.         system("title GAME");//标题
  148.         system("color f8");//颜色
  149.         while (ct<4)//初始化为0(没有太大用)
  150.         {
  151.                 number.input[ct]=0;
  152.                 number.random[ct]=0;
  153.                 ct++;
  154.         }
  155.         random(number.random,SIZE);//生成随机数
  156.         puts("Help Mode:H\nControl Mode:K\n\n\n");
  157.         do
  158.         {
  159.                 copy=number;//副本
  160.                 printf("Input four integers:\n");
  161.                 if(!getnum(number.input,copy.input,copy.random))//输入数字
  162.                 {
  163.                         continue;
  164.                 }
  165.                 if(compare(number.input,number.random))//比较
  166.                         break;
  167.                 fflush(stdin);//清空缓冲区
  168.                 puts("\nPress any key to try again\n");//继续
  169.                 getch();
  170.         }while(1);
  171.         printf("\nBye!\n");
  172.         system("pause");
  173.         return 0;
  174. }
复制代码
稍微改了一下

点评

高端。。。  发表于 2013-7-9 08:58
回复 支持 反对

使用道具 举报

1万

回帖

1万

基友

2万

积分

末日审判

Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17

 楼主| 发表于 2013-7-8 19:46:02 | 显示全部楼层
time 发表于 2013-7-8 19:34
稍微改了一下

QQ截图20130708194413.png 怎么破
回复 支持 反对

使用道具 举报

5895

回帖

118

基友

1万

积分

苍海之魂

invincible

Rank: 13Rank: 13Rank: 13Rank: 13

发表于 2013-7-8 19:48:38 | 显示全部楼层
悔  发表于 2013-7-8 19:46
怎么破

大写
回复 支持 反对

使用道具 举报

1万

回帖

1万

基友

2万

积分

末日审判

Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17

 楼主| 发表于 2013-7-8 21:05:58 | 显示全部楼层
time 发表于 2013-7-8 19:48
大写

密码错了就会无限循环
回复 支持 反对

使用道具 举报

5895

回帖

118

基友

1万

积分

苍海之魂

invincible

Rank: 13Rank: 13Rank: 13Rank: 13

发表于 2013-7-8 21:08:14 | 显示全部楼层
悔  发表于 2013-7-8 21:05
密码错了就会无限循环

对啊
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|苍海国际 ( 鲁ICP备13020644号-1 )

GMT+8, 2025-8-18 03:33 , Processed in 0.170157 second(s), 35 queries .

Powered by Discuz! Theme By eRic Modified by 4bpa

© CangHai International We Do Our Rights!

返回顶部