www.pudn.com > cai.rar > cai.c


/*输入四个不重复的数字,按回车键后结果显示在右边方框,其形式为"?A?B".四位数字中,  
位置和数字都正确为A,数字相同而位置不同为B,当4A时为猜对."<",">"控制光标.*/  
#include            
#include            
#include            
#include            
#include            
#include            
#include            
#define x 150        /* 本程序的所有坐标都是相对x,y来画的  */ 
#define y 150  
char ransum[4];      /* 装入随机产生的数  */ 
static char insum[4][2]={{’’,’\0’},{’’,’\0’},{’’,’\0’},{’’,’\0’}};/* 装入输入的数  */ 
void main(void)  
{  
void shuijisum(void);/* 产生不相同的四个随机数  */ 
void huatu(void);    /* 初始化基本的屏幕  */ 
void input(void);    /* 输入猜的四个数字,并在方格内显示  */ 
int  bijiao(int);    /* 比较输入的数和随机产生的数,得出?A?B的结果  */ 
void ok(void);      /* 猜对数在方格下显示"YOU ARE GOOD"  */ 
void no(void);      /* 猜错数在方格下显示"YOU ARE PIG"  */ 
int  a,c,i,g_driver=VGA, g_mode=VGAHI;  
char  yn;  
detectgraph(&g_driver, &g_mode);  
initgraph(&g_driver, &g_mode, "..\\bgi");  
kaishi:  
do  
{  
  huatu();  
  shuijisum();  
  for(c=0;c<8;c++)  /* 最多猜8次  */ 
  {  
  input();          /* 猜对数显示"YOU ARE GOOD",没猜对显示"YOU ARE PIG",如果8  */ 
  a=bijiao(c);      /* 次都没猜对则询问"you are coutinue(y/n)"  */ 
  if(a==4)  
  {  
    ok();  
    delay(1500);  
    goto kaishi;  
  }  
  else  
    no();  
  }  
  if(a!=4)  
  {  
  settextstyle(1,0,1);  
  bar(x-40,y+75,x+190,y+100);  
  outtextxy(x-40,y+70,"you are coutinue(y/n)");  
  }  
}while((yn=getch())==’y’);  
closegraph();  
}  
void huatu(void)  
{  
int i;  
char biaohao[1];  
setfillstyle(1,BLACK);  
bar(0,0,640,480);  
setcolor(YELLOW);  
settextstyle(1,0,6);  
outtextxy(x-10,y-100,"CAI SHU ZI v1.0");  
setcolor(RED);  
settextstyle(0,0,1);  
outtextxy(x+262,y-93,"jk");  
setcolor(BLUE);  
rectangle(x,y,y+120,y+40);  
for(i=0;i<=1;i++)  
  rectangle(x+30+i*30,y,x+30+(i+1)*30,y+40);  
rectangle(x+200,y,x+340,y+160);  
setcolor(YELLOW);  
settextstyle(1,0,1);  
for(i=0;i<8;i++)               
  {sprintf(biaohao,"%d:",i+1);  
  outtextxy(x+205,y+i*20,biaohao);  
  }  
}  
void input(void)  
{  
int i=0,j;  
char key;  
settextstyle(1,0,4);  
do  
{  
  setcolor(LIGHTGREEN);  
  rectangle(x+i*30+5,y+35,x+(i+1)*30-5,y+33);  
  key=getch();  
  setcolor(BLACK);  
  if(key==’1’||key==’2’||key==’3’||key==’4’||key==’5’||key==’6’||key==’7’||key==’8’||key==’9’||key==’0’)  
  {  
  for(j=0;j<4;j++)    /* 判断输入的数字有没有重复的,如果有则消除原先的,在当前  */ 
  {if(j==i)            /* 的位置装入刚输入的数字  */ 
    j+=1;  
    if(key==insum[j][0])  
    {bar(x+5+30*j,y+5,x+25+30*j,y+35);  
      insum[j][0]=’’;  
    }  
  }  
  insum[i][0]=key;  
  setcolor(YELLOW);  
  bar(x+5+30*i,y+5,x+25+30*i,y+35);  
  outtextxy(x+8+i*30,y,insum[i]);  
  i+=1;  
  }  
  if(key==’,’)        /* 判断按键如果是","则光标左移一格  */ 
  {  
  rectangle(x+i*30+5,y+35,x+(i+1)*30-5,y+33);  
  i-=1;  
  }  
  if(key==’.’)        /* 判断按键如果是"."则光标右移一格  */ 
  {  
  rectangle(x+i*30+5,y+35,x+(i+1)*30-5,y+33);  
  i+=1;  
  }  
if(i<0) i=0;          /* 使光标始终在方格内  */ 
if(i>3) i=3;  
}while(key!=’\r’);    /* 判断按键如果是回车键则结束输入数字,去执行判断函数  */ 
rectangle(x+i*30+5,y+35,x+(i+1)*30-5,y+33);  
}  
void shuijisum(void)  
{int i,j,t;  
randomize();  
for(i=0;i<4;i++)  
  {jk:  
  t=random(10)+48;  
  for(j=0;j