?? cai.c
字號:
/*輸入四個不重復(fù)的數(shù)字,按回車鍵后結(jié)果顯示在右邊方框,其形式為"?A?B".四位數(shù)字中,
位置和數(shù)字都正確為A,數(shù)字相同而位置不同為B,當(dāng)4A時為猜對."<",">"控制光標(biāo).*/
#include <stdio.h>
#include <stdlib.h>
#include <float.h>
#include <graphics.h>
#include <math.h>
#include <conio.h>
#include <dos.h>
#define x 150 /* 本程序的所有坐標(biāo)都是相對x,y來畫的 */
#define y 150
char ransum[4]; /* 裝入隨機(jī)產(chǎn)生的數(shù) */
static char insum[4][2]={{’’,’\0’},{’’,’\0’},{’’,’\0’},{’’,’\0’}};/* 裝入輸入的數(shù) */
void main(void)
{
void shuijisum(void);/* 產(chǎn)生不相同的四個隨機(jī)數(shù) */
void huatu(void); /* 初始化基本的屏幕 */
void input(void); /* 輸入猜的四個數(shù)字,并在方格內(nèi)顯示 */
int bijiao(int); /* 比較輸入的數(shù)和隨機(jī)產(chǎn)生的數(shù),得出?A?B的結(jié)果 */
void ok(void); /* 猜對數(shù)在方格下顯示"YOU ARE GOOD" */
void no(void); /* 猜錯數(shù)在方格下顯示"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(); /* 猜對數(shù)顯示"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++) /* 判斷輸入的數(shù)字有沒有重復(fù)的,如果有則消除原先的,在當(dāng)前 */
{if(j==i) /* 的位置裝入剛輸入的數(shù)字 */
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==’,’) /* 判斷按鍵如果是","則光標(biāo)左移一格 */
{
rectangle(x+i*30+5,y+35,x+(i+1)*30-5,y+33);
i-=1;
}
if(key==’.’) /* 判斷按鍵如果是"."則光標(biāo)右移一格 */
{
rectangle(x+i*30+5,y+35,x+(i+1)*30-5,y+33);
i+=1;
}
if(i<0) i=0; /* 使光標(biāo)始終在方格內(nèi) */
if(i>3) i=3;
}while(key!=’\r’); /* 判斷按鍵如果是回車鍵則結(jié)束輸入數(shù)字,去執(zhí)行判斷函數(shù) */
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<i;j++)
if(t==ransum[j])
goto jk;
ransum[i]=t;
}
}
int bijiao(int c)
{
int i,j,a=0,b=0;
char ab[6]; /* 一位一位的比較,如果有位置和數(shù)字都相同的則 */
for(i=0;i<4;i++) /* a=a+1;如果是位置不同但數(shù)字相同則b=b+1 */
for(j=0;j<4;j++)
if(insum[i][0]==ransum[j])
if(i==j)
{
a+=1;
break;
}
else
{
b+=1;
break;
}
setcolor(YELLOW);
settextstyle(1,0,1);
sprintf(ab,"--%dA%dB",a,b);
for(i=0;i<4;i++)
outtextxy(x+225+i*11,y+20*c,insum[i]);
outtextxy(x+270,y+20*c,ab);
return(a); /* 返回的a是用來判斷猜的數(shù)是 */
}
void ok(void)
{
bar(x-40,y+75,x+190,y+100);
settextstyle(1,0,4);
outtextxy(x-40,y+70,"YOU ARE GOOD");
}
void no(void)
{
bar(x-40,y+75,x+190,y+100);
settextstyle(1,0,4);
outtextxy(x-40,y+70,"YOU ARE PIG");
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -