?? 3-9.c
字號:
#include"stdlib.h"
#include"graphics.h"
#include"conio.h"
#include"dos.h"
#define BK_COLOR BLACK
#define C_COLOR WHITE
#define UpKey 72
#define DownKey 80
#define ESC 27
#define Enter 13
#define MenuX 200
#define MenuY 110
#define MenuWidth 200
#define MenuSinH 40
#define ChoiceX MenuX+15
#define ChoiceY MenuY+10
#define ChoiceWidth 170
#define ChoiceH 25
int speed=6000;
void Interface()
{
int i,j;
setcolor(CYAN);
for(i=0;i<60;i++)
{
line(i,0,i,500);
line((getmaxx()-i),0,(getmaxx()-i),500);
}
setcolor(YELLOW);
for(i=60,j=0;i<85;i++,j++)
{
line(i,j,i,500);
line((getmaxx()-i),j,(getmaxx()-i),500);
}
setcolor(WHITE);
rectangle(MenuX,MenuY,MenuX+MenuWidth,MenuY+3*MenuSinH);
line(MenuX,MenuY+MenuSinH,MenuX+MenuWidth,MenuY+MenuSinH);
line(MenuX,MenuY+2*MenuSinH,MenuX+MenuWidth,MenuY+2*MenuSinH);
}
void Main_Menu()
{
settextstyle(0,0,2);
outtextxy(MenuX+20,MenuY+15,"START GAME");
outtextxy(MenuX+20,MenuY+MenuSinH+15,"GAME SETUP");
outtextxy(MenuX+20,MenuY+2*MenuSinH+15,"EXIT");
}
void Option_Menu()
{
settextstyle(0,0,2);
outtextxy(MenuX+20,MenuY+15,"beginner");
outtextxy(MenuX+20,MenuY+MenuSinH+15,"advancer");
outtextxy(MenuX+20,MenuY+2*MenuSinH+15,"senior");
}
void Choice(int c_x,int c_y,int color)
{
setfillstyle(1,color);
bar(c_x,c_y,c_x+ChoiceWidth,c_y+ChoiceH);
}
int ChooseMenu(int flag)
{
int x,y;
char C_Key;
x=ChoiceX;
y=ChoiceY;
do
{
kbhit();
C_Key=getch();
if(C_Key==ESC)
return ESC;
else
if(C_Key==Enter)
return y;
else
switch(C_Key)
{
case UpKey:
if(y==ChoiceY)
break;
else
{
Choice(x,y,BLACK);
y-=MenuSinH;
Choice(x,y,BLUE);
}
break;
case DownKey:
if(y==(ChoiceY+2*MenuSinH))
break;
else
{
Choice(x,y,BLACK);
y+=MenuSinH;
Choice(x,y,BLUE);
}
break;
default:
break;
}
if(flag==0)
Main_Menu();
else
if(flag==1)
Option_Menu();
}while(C_Key!=ESC);
}
void SetResult()
{
int result;
result=ChooseMenu(1);
switch(result)
{
case ESC:
return 0;
break;
case ChoiceY:
speed=6000;
break;
case ChoiceY+MenuSinH:
speed=3000;
break;
case ChoiceY+2*MenuSinH:
speed=1000;
break;
default:
break;
}
}
void DrawChar(int i,int j,char c)
{
char ch[1];
ch[0]=c;
ch[1]='\0';
moveto(i,j);
settextstyle(0,0,2);
outtext(ch);
}
void AutoDraw_Down(int x,int y,char c,int n)
{
setcolor(BK_COLOR);
DrawChar(x,y,c);
setcolor(C_COLOR);
DrawChar(x,y+1,c);
delay(n);
}
void AutoDraw_Up(int x,int y,char c,int n)
{
setcolor(BK_COLOR);
DrawChar(x,y,c);
setcolor(C_COLOR);
DrawChar(x,y-1,c);
delay(n);
}
char GenerateChar()
{
int flag;
char c;
flag=random(3);
switch(flag)
{
case 0:
c='a'+random(26);
break;
case 1:
c='A'+random(26);
break;
case 2:
c='0'+random(10);
break;
default:
break;
}
return c;
}
void Play()
{
int x,y,x1,y1,i,j;
int e=20,PreKey_Count=0,Hit_Count=0;
char c,key;
setbkcolor(BK_COLOR);
while(key!=ESC)
{
randomize();
x=50+random(500);
c=GenerateChar();
for(y=10;y<400;y++)
{
AutoDraw_Down(x,y,c,speed);
if(kbhit())
{
key=getch();
if(key==ESC)
break;
else
{
if(key==c)
{
x1=x;
for(y1=400;y1>=y;y1--)
AutoDraw_Up(x1,y1,key,100);
Hit_Count++;
setcolor(RED);
for(i=10;i<=30;i++)
{
circle(x1,y1,i);
delay(1000);
}
}
else
{
x1=x+e;
for(y1=400;y1>=10;y1--)
AutoDraw_Up(x1,y1,key,100);
}
PreKey_Count++;
}
break;
}
}
cleardevice();
}
closegraph();
printf(" PreKey: %d, Hit: %d\n",PreKey_Count,Hit_Count);
getch();
}
main()
{
int gd=DETECT,gm;
int c_x,c_y,result;
char C_Key;
c_x=ChoiceX;
c_y=ChoiceY;
Begin:
initgraph(&gd,&gm,"c:\tc\tc");
/*因為在Play()函數的最后調用了closegraph()函數關閉了圖形系統,所以在這里要把initgraph()函數放在Begin標識的后面,以確保每次游戲結束后重新回到初始界面時圖形系統已經初始化。*/
cleardevice();
Interface();
Choice(c_x,c_y,BLUE);
Main_Menu();
result=ChooseMenu(0);
switch(result)
{
case ESC:
exit(0);
break;
case ChoiceY:
cleardevice();
sleep(1); /*延時一秒*/
Play(); /*清屏后調用游戲函數進入屏幕打飛字游戲*/
goto Begin; /*游戲結束后,回到初始界面*/
break;
case ChoiceY+MenuSinH:
cleardevice();
Interface();
Choice(c_x,c_y,BLUE);
Option_Menu();
SetResult();
goto Begin;
break;
case ChoiceY+2*MenuSinH:
exit(0);
break;
default:
break;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -