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