100#include "rand.h" 110#include "inkey.h" 120#define m 65535 130#define wx (30) 140#define wy 48 150#define bmx 5 160#define bp bps[n] 170#define bly 8 180struct {int x,y,ox,oy,px,py,f;}bps[bmx];int bs=3,bx,bc=1,ix,iy,fi=0,sc=0; 190wait(int w){for(;w>=0;w--);} 200int ball(int n){ 210int i,j=0,k=0,x,y;if(n<0||n>=bmx||!bp.f)return 0; 220bp.ox=bp.x;bp.oy=bp.y;bp.x+=bp.px;bp.y+=bp.py;x=bp.x-1;y=bp.y-1;for(i=1;i<8;i+=2)k=point(x+i%3,y+i/3),j|=(k!=0)<<(i>>1)|(k<0||(i==5&&x+2>wx-1))<<((i>>1)+4); 230if((j&1)!=0||(j&8)!=0)bp.py*=-1;if((j&2)!=0||(j&4)!=0)bp.px*=-1;preset(bp.ox,bp.oy);pset(bp.x,bp.y,0);return j;} 240int block(int x,int y){ 250if(!point(x,y)&&!point(x+1,y))return 0;line(x,y,x+2,y,1,m,0);if(!fi)ix=x+1,iy=y+5;return 1;} 260int cb(int y1,int y2){int i,j=0,x,y,dx=wx/3; 270for(i=y1*dx;i1);}return j;} 280item(){ 290char *is[5]={"<<->>",">>-<<"," \xed UP","SCORE+"};int n,r; 300r=rnd%4;gotoxy(10,3);printf("%s ",is[r]); 310switch(r){case 0:bs++;if(bx-bs<0)bx++;if(bx+bs>=wx)bx--;break;case 1:if(bs>1)bs--;line(0,wy-5,wx-1,wy-5,1,m,0);break;case 3:sc+=bc*50;gotoxy(15,2);printf("%5i",sc);break;case 2: 320for(n=0;n=bmx)gotoxy(10,3),puts(" ");break; 330}} 340main(){int n,i,j,c,bl=0;char *cp="BLOCK BREAK "; 350line(-1,-1,wx,wy,0,m,1);line(0,5,wx-1,4+bly,0,m,2); 360for(i=0;i<12;i++){if(inkey()==32){srand(i+1);break;}gotoxy(9+i,0);printf("\10 %c%c",cp[i],cp[i+1]);wait(300);}gotoxy(9,0);puts(cp);puts("\n\t\t SCORE: 0"); 370for(n=0;nwx-1)bx=wx-bs-1;line(bx-bs,wy-5,bx+bs,wy-5,0,m,0); 400if(tolower(c)=='p'){gotoxy(10,4);puts(">PAUSED<");while(inkey()!=8);gotoxy(10,4);puts(" ");} 410for(n=0;n>4)^(i&15);if(bp.f&&bp.y>=wy-5)bp.f=0,bc--,preset(bp.x,bp.y); 420if(i&&bp.f&&bp.y0&&rnd%05==0&&!fi)fi=1;}} 430if(fi&&iy=bx-bs&&ix<=bx+bs)item(),fi=0;} 440if(bl>=wx/3*bly){bl=cb(5,5+bly);if(bl>=wx/3*bly){gotoxy(15,2);printf("%5i\n\n\n",sc+bl*100);break;}}if(bc<=0){gotoxy(10,4);puts("GAME OVER!");break;} 450}}