#define MAXCOUNT 100
#define FALLSTEP 5
#define SCREENW 60
#define SCREENH 19
#define USERNAME "hmz"
#include <stdio.h>
#include <stdlib.h>
#include <dos.h>
#define FULLBLOCK 219
int Alphabit[26][5][5]={0,0,1,0,0,
0,1,0,1,0,
1,1,1,1,1,
1,0,0,0,1,
1,0,0,0,1, /* A */
1,1,1,1,0,
1,0,0,0,1,
1,1,1,1,0,
1,0,0,0,1,
1,1,1,1,1, /* B */
0,1,1,1,0,
1,0,0,0,1,
1,0,0,0,0,
1,0,0,0,1,
0,1,1,1,0, /* C */
1,1,1,1,0,
1,0,0,0,1,
1,0,0,0,1,
1,0,0,0,1,
1,1,1,1,0, /* D */
1,1,1,1,1,
1,0,0,0,0,
1,1,1,1,0,
1,0,0,0,0,
1,1,1,1,1, /* E */
1,1,1,1,1,
1,0,0,0,0,
1,1,1,1,0,
1,0,0,0,0,
1,0,0,0,0, /* F */
0,1,1,1,0,
1,0,0,0,0,
1,0,1,1,0,
1,0,0,1,0,
0,1,1,1,0, /* G */
1,0,0,0,1,
1,0,0,0,1,
1,1,1,1,1,
1,0,0,0,1,
1,0,0,0,1, /* H */
0,1,1,1,0,
0,0,1,0,0,
0,0,1,0,0,
0,0,1,0,0,
0,1,1,1,0, /* I */
0,1,1,1,0,
0,0,1,0,0,
0,0,1,0,0,
1,0,1,0,0,
0,1,0,0,0, /* J */
1,0,0,1,0,
1,0,1,0,0,
1,1,0,0,0,
1,0,1,0,0,
1,0,0,1,0, /* K */
1,0,0,0,0,
1,0,0,0,0,
1,0,0,0,0,
1,0,0,0,0,
1,1,1,1,0, /* L */
0,1,0,1,0,
1,0,1,0,1,
1,0,1,0,1,
1,0,1,0,1,
1,0,1,0,1, /* M */
1,0,0,0,1,
1,1,0,0,1,
1,0,1,0,1,
1,0,0,1,1,
1,0,0,0,1, /* N */
0,1,1,1,0,
1,0,0,0,1,
1,0,0,0,1,
1,0,0,0,1,
0,1,1,1,0, /* O */
0,1,1,1,0,
1,0,0,0,1,
1,1,1,1,0,
1,0,0,0,0,
1,0,0,0,0, /* P */
0,1,1,1,0,
1,0,0,0,1,
1,0,0,0,1,
0,1,1,1,0,
0,0,0,0,1, /* Q */
0,1,1,1,0,
1,0,0,0,1,
1,1,1,1,0,
1,0,1,0,0,
1,0,0,1,0, /* R */
0,0,1,1,0,
0,1,0,0,1,
0,0,1,0,0,
0,1,0,1,0,
0,0,1,1,0, /* S */
1,1,1,1,1,
0,0,1,0,0,
0,0,1,0,0,
0,0,1,0,0,
0,0,1,0,0, /* T */
1,0,0,0,1,
1,0,0,0,1,
1,0,0,0,1,
1,0,0,0,1,
0,1,1,1,0, /* U */
1,0,0,0,1,
1,0,0,0,1,
1,0,0,0,1,
0,1,0,1,0,
0,0,1,0,0, /* V */
1,0,0,0,1,
1,0,0,0,1,
1,0,1,0,1,
0,1,0,1,1,
1,0,0,0,1, /* W */
1,0,0,0,1,
0,1,0,1,0,
0,0,1,0,0,
0,1,0,1,0,
1,0,0,0,1, /* X */
1,0,0,0,1,
0,1,0,1,0,
0,0,1,0,0,
0,0,1,0,0,
0,0,1,0,0, /* Y */
1,1,1,1,1,
0,0,0,1,0,
0,0,1,0,0,
0,1,0,0,0,
1,1,1,1,1, /* Z */};
void RecoverArea(int x,int y,int width,int height,int ScreenColor[80][24])
{
int i,j;
for(i=x;i<x+width;i++)
{
for(j=y;j<y+height;j++)
{
gotoxy(i,j);
textcolor(ScreenColor[i-1][j-1]);
putch(FULLBLOCK);
}
}
}
void PrintFrame(int x,int y,int width,int height,char username[12],int score,int miss)
{
int i;
textcolor(1);
gotoxy(x,y);
putch(201);
for(i=2;i<=width-1;i++)
{
putch(205);
}
putch(187);
for(i=2;i<=height-1;i++)
{
gotoxy(x+width-1,y+i-1);
putch(186);
gotoxy(x,y+i-1);
putch(186);
}
gotoxy(x,y+height-1);
putch(200);
for(i=2;i<=width-1;i++)
{
putch(205);
}
putch(188);
gotoxy(x+2,y+2);
cprintf("Player:");
gotoxy(x+2,y+3);
cprintf("%s",username);
gotoxy(x+2,y+5);
cprintf("Score:%d",score);
gotoxy(x+2,y+8);
cprintf("Miss:%d",miss);
}
void PrintValue(int x,int y,int score,int miss)
{
gotoxy(x+2,y+6);
printf("%3d",score);
gotoxy(x+2,y+9);
printf("%3d",miss);
}
void PrintLine(int x,int y,int width,int height)
{
int i;
gotoxy(x,y);
textcolor(11);
putch(201);
for(i=2;i<=width-1;i++)
putch(205);
putch(187);
for(i=2;i<=height-1;i++)
{
gotoxy(x+width-1,y+i-1);
putch(186);
gotoxy(x,y+i-1);
putch(186);
}
gotoxy(x,y+height-1);
putch(200);
for(i=2;i<=width-1;i++)
putch(205);
putch(188);
}
void AlphabitColor(int index,int x,int y)
{
int i,j,c;
if(index<0 index>25 x<1 x>76 y<1 y>20)
return;
for(c=1;c<16;c++)
{
textcolor(c);
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
if(Alphabit[index][j][i])
{
gotoxy(x+i,y+j);
putch(FULLBLOCK);
}
if(Alphabit[index][j][i])
{
gotoxy(x+i,y+j);
putch(32);
}
}
}
delay(8000);
}
}
void AlphabitRotate(int index,int x,int y)
{
int i,j,aa,bb,ScreenColor;
if(index<0 index>25 x<1 x>76 y<1 y>20)
return;
RecoverArea(x,y,5,5,ScreenColor);
for(i=0;i<5;i++)
for(j=0;j<5;j++)
{
if(Alphabit[index][i][j])
{
gotoxy(x+i,y+j);
putch(FULLBLOCK);
}
}
delay(6000);
RecoverArea(x,y,5,5,ScreenColor);
for(i=0;i<5;i++)
for(j=0;j<5;j++)
{
if(Alphabit[index][j][i])
{
gotoxy(x+i,y+j);
putch(FULLBLOCK);
}
}
delay(6000);
RecoverArea(x,y,5,5,ScreenColor);
for(i=0;i<5;i++)
for(j=0;j<5;j++)
{
if(Alphabit[index][4-i][4-j])
{
gotoxy(x+i,y+j);
putch(FULLBLOCK);
}
}
delay(6000);
RecoverArea(x,y,5,5,ScreenColor);
for(i=0;i<5;i++)
for(j=0;j<5;j++)
{
if(Alphabit[index][4-j][4-i])
{
gotoxy(x+i,y+j);
putch(FULLBLOCK);
}
}
delay(6000);
RecoverArea(x,y,5,5,ScreenColor);
}
void ShowFace(int x,int y,int a)
{
char s[3][9][15]={ " _______ ",
" / \ ",
" O O ",
" . ",
" \___/ ",
" \_______/ ",
" --------- ",
" GOOD! ",
" --------- ",
" _______ ",
" / \ ",
" o o ",
" ^ ",
" --- ",
" \_______/ ",
" --------- ",
" HURRY!! ",
" --------- ",
" _______ ",
" / \ ",
" _ _ ",
" . ",
" /\ ",
" \_______/ ",
" --------- ",
" Oh no! ",
" --------- ", };
int i,j;
if(a<0 a>=3)
return;
textcolor(13);
for(i=0;i<9;i++)
{
gotoxy(x,y+i);
for(j=0;j<15;j++)
putch(s[a][i][j]);
}
}
void RandomBackground(int number,int ScreenColor[80][24])
{
int i,j,k,c,x,y,g;
int pic[5][5][8]={0,0,1,0,0,0,0,0,
0,1,0,1,1,1,1,0,
1,0,0,0,0,0,0,1,
0,1,1,1,1,1,0,1,
0,0,0,0,0,0,1,0,
0,0,1,1,0,0,0,0,
0,1,0,0,1,1,1,0,
1,0,0,0,0,0,0,1,
0,1,1,1,1,1,1,0,
0,0,0,0,0,0,0,0, /* No 2:a small '+' */
0,0,0,0,0,0,0,0,
0,1,1,1,1,1,1,0,
1,0,0,0,0,0,0,1,
0,1,0,1,0,1,1,0,
0,0,1,0,1,0,0,0, /* No 3 */
0,0,0,1,1,0,0,0,
0,1,1,0,0,1,1,0,
1,0,0,0,0,0,1,0,
0,1,1,1,1,1,1,0,
0,0,0,0,0,0,0,0, /* No 4 */
0,0,0,0,0,1,0,0,
0,1,1,1,1,0,1,0,
1,0,0,0,0,0,0,1,
0,1,1,1,1,0,1,0,
0,0,0,0,0,1,0,0 /* No 5 */};
for(i=1;i<80;i++)
for(j=0;j<25;j++)
ScreenColor[i][j]=0;
for(i=0;i<number;i++)
{
x=rand()%55+1;
y=rand()%18+1;
c=rand()%15+1;
g=rand()%5;
textcolor(c);
for(j=0;j<5;j++)
for(k=0;k<8;k++)
if(pic[g][j][k]==1)
{
gotoxy(k+x,j+y);
ScreenColor[k+x-1][j+y-1]=c;
putch(FULLBLOCK);
}
}
}
void PrintAlphabitFade(int index,int x,int y)
{ /* index 0-6 means alphabit a-f */
int i,j,l;
char c[7]={FULLBLOCK,'','-','\','/','.',' '};
if(index<0 index>25 x<1 x>76 y<1 y>20)
return;
for(l=0;l<7;l++)
{
for(i=0;i<5;i++)
for(j=0;j<5;j++)
{
if(Alphabit[index][j][i])
{
gotoxy(x+i,y+j);
putch(c[l]);
}
}
delay(100000);
}
}
void PrintAlphabit(int index,int x,int y,int p)
{ /* index 0-6 means alphabit a-f */
int i,j;
if(index<0 index>25 x<1 x>76 y<1 y>20)
return;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
if(Alphabit[index][j][i])
{
textcolor(p);
gotoxy(x+i,y+j);
putch(FULLBLOCK);
}
}
void ShowLose(int x,int y,int q)
{
sound(622);
delay(3000);
nosound();
gotoxy(x,y);
putch(' ');
ShowFace(65,14,2);
AlphabitColor(q,x,y);
}
void ShowWin(int x,int y,int q)
{
sound(3000);
delay(2000);
nosound();
sound(2400);
delay(2000);
nosound();
gotoxy(x,y);
putch(' ');
PrintAlphabitFade(q,x,y);
ShowFace(65,14,0);
}
main()
{
int x[MAXCOUNT],y[MAXCOUNT],c[MAXCOUNT],p[MAXCOUNT];
char presskey;
int count=0;
int step=0,despeed=0;
int i,j,t,a,score=0,miss=0;
int ScreenColor[80][24];
clrscr();
RandomBackground(10,ScreenColor);
PrintLine(1,1,80,24);
randomize();
while(1)
{
step++;
PrintFrame(66,1,14,12,USERNAME,score,miss);
PrintValue(66,1,score,miss);
if(step==FALLSTEP)
{
step=0;
if(count<MAXCOUNT)
{
x[count]=rand()%SCREENW+1;
y[count]=2;
c[count]=rand()%26;
p[count]=rand()%15+1;
count++;
}
}
for(i=0;i<count;i++)
RecoverArea(x[i],y[i],5,5,ScreenColor);
for(i=0;i<count;i++)
{
y[i]++;
if(y[i]>SCREENH)
{
ShowLose(x[i],y[i],c[i]);
for(j=i+1;j<count;j++)
{
x[j-1]=x[j];
y[j-1]=y[j];
c[j-1]=c[j];
score-=5;
miss++;
}
count--;
i--;
}
}
for(i=0;i<count;i++)
PrintAlphabit (c[i],x[i],y[i],p[i]);
for(t=0;t<100;t++)
{
if(bioskey(1))
{
presskey=bioskey(0);
for(i=0;i<count;i++)
{
if(presskey=='a'+c[i] presskey=='A'+c[i])
{
ShowWin(x[i],y[i],c[i]);
for(j=i+1;j<count;j++)
{
x[j-1]=x[j];
y[j-1]=y[j];
c[j-1]=c[j];
}
score+=10;
count--;
break; /* exit i-loop */
}
else
{
&n