|
本帖最后由 悔 于 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);
} |
|