#include <stdio.h>
#include <stdlib.h>
#include <graphics.h>
#include <alloc.h>
#include <conio.h>
#include <dos.h>
#include <bios.h>
#include <time.h>
#define up 0x4800
#define down 0x5000
#define left 0x4b00
#define right 0x4d00
#define space 0x3920
#define esc 0x011b
#define HARD 0.05;
#define NORMAL 0.1;
void chushi(); /*初始化游戏界面*/
void shang(); /*向上方向键*/
void xia(); /*向下方向键*/
void zuo(); /*向左方向键*/
void you(); /*向右方向键*/
void shuiji(); /*绘制出随机产生的方向键*/
void drawbar(); /*绘制时间条*/
void clearbar(); /*复位时间条*/
void cleartoward(); /*清除方向键*/
void toward(); /*随机产生方向键的朝向*/
void choose(); /*选择难度*/
void information(); /*个人信息*/
int score(float b); /*根据按下的时间判定得分*/
void outscore(int x,int y,int num); /*把得分显示出来*/
int tempzuobiao=0,xiabiao=210,ke[4],i,a[10],n=1,z=1,scores=0,p,statr,sudu;
float b,temp1,temp,gamespeed,speed,speed1;
void wait( float seconds )
{
clock_t begin;
begin = clock(); /* CLK_TCK */
while ((clock()-begin)/18.2<seconds) {};
}
main()
{
int gdrive,gmode,key;
detectgraph(&gdrive,&gmode);
initgraph(&gdrive,&gmode,"");
chushi();
if(statr==1)
{
choose();
cleardevice();
setcolor(RED);
information();
rectangle(20,40,480,440);
setcolor(WHITE);
toward();
shuiji();
clearbar();
while(1)
{
outscore(420,100,scores);
drawbar();
wait(temp1);
if(bioskey(1)!=0) /*获取键盘动作*/
{ key=bioskey(0);
switch(key)
{
case left:ke[i]=3;if(a[i]==ke[i])
{setcolor(RED);
zuo();
tempzuobiao+=50;
i++;break;
}
else
{
setcolor(WHITE);
tempzuobiao=0;
shuiji();
break;
}
case right:ke[i]=4;if(a[i]==ke[i])
{setcolor(RED);
you();
tempzuobiao+=50;
i++;break;
}
else
{
setcolor(WHITE);
tempzuobiao=0;
shuiji();
break;
}
case up: ke[i]=1;if(a[i]==ke[i])
{setcolor(RED);
shang();
tempzuobiao+=50;
i++;break;
}
else
{
setcolor(WHITE);
tempzuobiao=0;
shuiji();
break;
}
case down:ke[i]=2;if(a[i]==ke[i])
{setcolor(RED);
xia();
tempzuobiao+=50;
i++;break;
}
else
{
setcolor(WHITE);
tempzuobiao=0;
shuiji();
break;
}
case esc:exit(0);
//case esc:goto chesi;
case space: p=n;score(b);wait(0.5);clearbar();n++;if(n==10)n=9;cleartoward();toward();setcolor(WHITE);shuiji();
b=0;
break;
default :break;
}
}
}
}
/* chesi: { closegraph();
printf("temp1=%f;temp=%f;gamespeed=%f;speed=%f;speed1=%f",temp1,temp,gamespeed,speed,speed1);
getch();} */
closegraph();
return(0);
}
void shang(void)
{
circle(50+tempzuobiao,100+xiabiao,20);
line(50+tempzuobiao,90+xiabiao,50+tempzuobiao,110+xiabiao);
line(50+tempzuobiao,90+xiabiao,45+tempzuobiao,100+xiabiao);
line(50+tempzuobiao,90+xiabiao,55+tempzuobiao,100+xiabiao);
}
void xia(void)
{
circle(50+tempzuobiao,100+xiabiao,20);
line(50+tempzuobiao,90+xiabiao,50+tempzuobiao,110+xiabiao);
line(50+tempzuobiao,110+xiabiao,45+tempzuobiao,100+xiabiao);
line(50+tempzuobiao,110+xiabiao,55+tempzuobiao,100+xiabiao);
}
void zuo(void)
{
circle(50+tempzuobiao,100+xiabiao,20);
line(40+tempzuobiao,100+xiabiao,60+tempzuobiao,100+xiabiao);
line(40+tempzuobiao,100+xiabiao,50+tempzuobiao,95+xiabiao);
line(40+tempzuobiao,100+xiabiao,50+tempzuobiao,105+xiabiao);
}
void you(void)
{
circle(50+tempzuobiao,100+xiabiao,20);
line(40+tempzuobiao,100+xiabiao,60+tempzuobiao,100+xiabiao);
line(60+tempzuobiao,100+xiabiao,50+tempzuobiao,95+xiabiao);
line(60+tempzuobiao,100+xiabiao,50+tempzuobiao,105+xiabiao);
}
void drawbar(void)
{
setfillstyle(1,15);
bar(300,260,300+b,280);
b=b+sudu;
if(b>=90&&z==1)
{outtextxy(350,240,"miss!");;n++;if(n==10)n=9;cleartoward();toward();setcolor(WHITE);shuiji();z=0;}
if(b>=100)
{
clearbar();
b=0;
}
}
void clearbar(void)
{
setfillstyle(1,2);
bar(301,261,399,279);
bar(340,230,460,250);
bar(420,90,460,110);
setcolor(WHITE);
rectangle(300,260,400,280);
setfillstyle(1,4);
bar(375,260,385,280);
z=1;
}
void cleartoward(void)
{
setcolor(GREEN);
tempzuobiao=0;
shuiji();
}
void shuiji(void)
{
for(i=0;i<n;i++)
{
if(a[i]==1)
{shang();
tempzuobiao+=50;}
if(a[i]==2)
{xia();
tempzuobiao+=50;}
if(a[i]==3)
{zuo();
tempzuobiao+=50;}
if(a[i]==4)
{you();
tempzuobiao+=50;}
}
i=0;
tempzuobiao=0;
}
void toward(void)
{
srand((unsigned)time(NULL));
for(i=0;i<n;i++)
a[i]=rand()%4+1;
}
int score(float b)
{
if(i==p)
{
if(b<70)
{
outtextxy(350,240,"miss!");
}
if(b>=70&&b<77)
{
outtextxy(350,240,"very good!");
scores=scores+1000;
}
if(b>=77&&b<83)
{
outtextxy(350,240,"perfict!");
scores=scores+1500;
}
if(b>=83&&b<90)
{
outtextxy(350,240,"very good!");
scores=scores+1000;
}
if(b>90)
{
outtextxy(350,240,"miss!");
}
}
else
outtextxy(350,240,"miss!");
}
void outscore(int x,int y,int num)
{
char string[8];
itoa(num,string,10); /*把一整数转换为字符串*/
setcolor(RED);
outtextxy(x,y,string);
}
void chushi(void)
{
char c;
setbkcolor(GREEN);
setcolor(RED);
rectangle(20,40,480,440);
setfillstyle(1,6);
bar(201,150,480,300);
outtextxy(210,180,"This is a copy of the Au's game.");
outtextxy(230,190,"DO you want play the game?");
outtextxy(240,200," enter y to start game!");
outtextxy(240,210," enter n to exit game!");
c=getche();
if(c=='y'||c=='Y')statr=1;
else if(c=='n'||c=='N') statr=0;
}
void choose(void)
{
char c;
int d;
cleardevice();
setbkcolor(GREEN);
setcolor(RED);
rectangle(20,40,480,440);
setfillstyle(1,6);
bar(201,150,480,300);
outtextxy(210,180,"Please select the game difficulty");
outtextxy(210,200,"1.NORMAL");
outtextxy(210,230,"2.HARD");
outtextxy(210,260,"3.CRAZY (Oh! My God!)");
do{
c=getche();
d=1;
if(c==49) {temp1=NORMAL;temp=NORMAL;gamespeed=NORMAL;speed=NORMAL;speed1=NORMAL;sudu=2;}
else if(c==50) {temp1=HARD;temp=HARD;gamespeed=HARD;speed=HARD;speed1=HARD;sudu=2;}
else if(c==51) {temp1=HARD;sudu=4;}
else if(c==13) exit(0);
else {outtextxy(120,130,"YOU WRONG,PLEASE SELECT AGAIN !!!");d=0;}
}while(d==0);
}
void information(void)
{
outtextxy(120,150,"write by:late winter's sunshine");
outtextxy(120,180,"QQ:251036057");
outtextxy(120,210,"presented to:late summey's moonlight");
}