Mega Code Archive

 
Categories / C / Games Graphic
 

Tetris Game in C

#include <graphics.h> #include <stdlib.h> #include <stdio.h> #include <dos.h> #include <conio.h> void swap(int a,int b);void bar1();void bar2(); void bar3(); void bar4(); check0(); check1(); check2(); void del(); void rod1(); void rod2(); void box1();void box2();void tee1();voidtee2(); void tee3();void tee4();check3();void insert(); void again();void print();void remove();void frame(); int score=0,spd,q,t,a=0,i,j,l[6]={300,90,315,105,301,91},p,turn,m,n; char play='y'; static int arr[26][13]; void main(void) { char ch,y; int gd= DETECT,gm,area,maxx,maxy,move,lmove,rmove; void *buff; initgraph(&gd,&gm,"d:\tc\bgi"); do{ turn=1; score=0; do{ clrscr(); cleardevice(); printf(" Enter Your Choice "); printf(" Basic Level.......... 1 "); printf(" Middle Level......... 2 "); printf(" Advanced Level....... 3 "); printf(" Experts Level........ 4 "); printf(" Professional Level... 5 "); y=getch(); clrscr(); cleardevice(); if(y=='1') {spd=200; settextstyle(2,0,6);outtextxy(2,150," Basic Level ");break;} if(y=='2') {spd=150; settextstyle(2,0,6);outtextxy(2,150," Middle Level ");break;} if(y=='3') {spd=100; settextstyle(2,0,6);outtextxy(2,150," Advanced Level ");break;} if(y=='4') {spd=75; settextstyle(2,0,6);outtextxy(2,150," Experts Level ");break;} if(y=='5') {spd=50; settextstyle(2,0,6);outtextxy(2,150,"Professional Level ");break;} }while(1); frame(); getch(); int k,ar[2],pr[2],t[6]; randomize(); ar[0]=random(2); pr[0]=random(6); ar[1]=random(2); pr[1]=random(6); while(1) { printf(" score= %d ",score); a=ar[0]; p=pr[0]; l[0]=450;l[1]=250;l[2]=465;l[3]=265;l[4]=451;l[5]=251; if(y=='1') spd=100; if(y=='2') spd=75; if(y=='3') spd=50; if(y=='4') spd=30; if(y=='5') spd=20; print(); delay(500); a=ar[1]; p=pr[1]; t[0]=l[0]; t[1]=l[1]; t[2]=l[2]; t[3]=l[3]; t[4]=l[4]; t[5]=l[5]; a=ar[1]; p=pr[1]; l[0]=270;l[1]=90;l[2]=285;l[3]=105;l[4]=271;l[5]=91; do{ k=0; if(kbhit()){ ch=getch(); if(ch==0) ch=getch(); if(ch==77) {move=check1(); if(move==0) {l[0]+=15;l[2]+=15;l[4]+=15; k=1;}} if(ch==75) {move=check2(); if(move==0) {l[0]-=15;l[2]-=15;l[4]-=15; k=1;}} if(ch==80) spd=10; if(ch==27) exit(0); if(ch==32){ k=1; if(p==4||p==5) switch(p) { case 4: if(a==0) a++; else p++; break; case 5: if(a==1) a--; else p--; } if(p==1||p==2) switch(p) { case 1: if(a==0) a++; else p++; l[0]=270;l[2]=285;l[4]=271;break; case 2: if(a==1) a--; else p--; l[0]=270;l[2]=285;l[4]=271; } if(p==3) { if(a==0) a++; else a=0; l[0]=270;l[2]=285;l[4]=271; } } if(a==1) {swap(l[0],l[1]);swap(l[2],l[3]);swap(l[4],l[5]);} } move=check0(); if(move==1) break; print(); if(k==1) delay(0); else delay(spd); remove(); if(k==0) {l[1]+=15; l[3]+=15; l[5]+=15;} }while(1); print(); fflush(stdin); insert(); check3(); a=ar[0]; p=pr[0]; l[0]=t[0];l[1]=t[1];l[2]=t[2];l[3]=t[3]; l[4]=t[4];l[5]=t[5]; remove(); ar[1]=ar[0]; pr[1]=pr[0]; ar[0]=random(2); pr[0]=random(6); if(pr[0]==2) pr[0]=3; if(turn==0) break; } }while(play=='y'); } void swap(int a,int b) { a=a+b; b=a-b; a=a-b; } void bar1() { if(a==0&&i<1) {l[0]+=15;l[2]+=15;l[4]+=15; } if(a==0&&i>=1){l[1]+=15;l[3]+=15;l[5]+=15; } // if(a==1&&i==1) {l[0]-=15;l[2]-=15;l[4]-=15;l[1]-=15;l[3]-=15;l[5]-=15; } if(a==1&&i==0) {l[1]+=15;l[3]+=15;l[5]+=15; } if(a==1&&i>0) {l[0]-=15;l[2]-=15;l[4]-=15; } if(a==2&&i>=2) {l[0]-=15;l[2]-=15;l[4]-=15; } if(a==2&&i<2) {l[1]+=15;l[3]+=15;l[5]+=15; } } void bar2() { if(a==0&&i>=3){l[0]-=15;l[2]-=15;l[4]-=15; } if(a==0&&i<3) {l[1]-=15;l[3]-=15;l[5]-=15; } if(a==1&&i<3) {l[0]+=15;l[2]+=15;l[4]+=15; } if(a==1&&i==3){l[1]-=15;l[3]-=15;l[5]-=15; } if(a==2&&i<2) {l[0]+=15;l[2]+=15;l[4]+=15;} if(a==2&&i>=2){l[1]-=15;l[3]-=15;l[5]-=15; } } void bar3() {if(a==0&&i>=3){l[0]+=15;l[2]+=15;l[4]+=15; } if(a==0&&i<3){l[1]+=15;l[3]+=15;l[5]+=15; } if(a==2&&i<2) {l[0]-=15;l[2]-=15;l[4]-=15; } if(a==2&&i>=2) {l[1]+=15;l[3]+=15;l[5]+=15; } if(a==1&&i>=1) {l[0]+=15;l[2]+=15;l[4]+=15; } if(a==1&&i<1) {l[1]+=15;l[3]+=15;l[5]+=15; } } void bar4() {if(a==0&&i<1){l[0]-=15;l[2]-=15;l[4]-=15; } if(a==0&&i>=1) {l[1]-=15;l[3]-=15;l[5]-=15; } if(a==2&&i>=2) {l[0]+=15;l[2]+=15;l[4]+=15; } if(a==2&&i<2){l[1]-=15;l[3]-=15;l[5]-=15; } if(a==1&&i<3) {l[0]-=15;l[2]-=15;l[4]-=15; } if(a==1&&i==3) {l[1]-=15;l[3]-=15;l[5]-=15; } } void rod1() { if(a==0) {l[0]+=15;l[2]+=15;l[4]+=15; } else {l[1]+=15;l[3]+=15;l[5]+=15; } } void rod2() { if(a==0) {l[0]-=15;l[2]-=15;l[4]-=15; } else {l[1]-=15;l[3]-=15;l[5]-=15; } } void box1() {if(i<1) {l[0]-=15;l[2]-=15;l[4]-=15; } if(i==1) {l[1]+=15;l[3]+=15;l[5]+=15; } if(i==2) {l[0]+=15;l[2]+=15;l[4]+=15; } } void box2() {if(i<1) {l[0]-=15;l[2]-=15;l[4]-=15; } if(i==1) {l[1]-=15;l[3]-=15;l[5]-=15; } if(i==2) {l[0]+=15;l[2]+=15;l[4]+=15; } } void tee1() { if(a==0&&i==1) {l[0]-=15;l[2]-=15;l[4]-=15; } if(a==0&&i<1) {l[1]+=15;l[3]+=15;l[5]+=15; } if(a==0&&(i==2||i==3)) {l[0]+=15;l[2]+=15;l[4]+=15; } if(a>0&&i==2) {l[0]-=15;l[2]-=15;l[4]-=15;l[1]+=15;l[3]+=15;l[5]+=15; } if(a>0&&i==0) {l[1]+=15;l[3]+=15;l[5]+=15; } if(a>0&&(i==1)) {l[0]+=15;l[2]+=15;l[4]+=15; } } void tee2() { if(a==0&&i==0) {l[0]-=15;l[2]-=15;l[4]-=15; } if(a==0&&i==1) {l[0]-=15;l[2]-=15;l[4]-=15; } if(a==0&&i==2) {l[0]+=15;l[2]+=15;l[4]+=15;l[1]-=15;l[3]-=15;l[5]-=15; } if(a>0&&i==2) {l[0]-=15;l[2]-=15;l[4]-=15;l[1]-=15;l[3]-=15;l[5]-=15; } if(a>0&&i==1) {l[0]+=15;l[2]+=15;l[4]+=15; } if(a>0&&i==0) {l[1]-=15;l[3]-=15;l[5]-=15; } } void tee3() { if(a==0&&i==0) {l[0]-=15;l[2]-=15;l[4]-=15; } if(a==0&&i==2) {l[0]-=15;l[2]-=15;l[4]-=15;l[1]-=15;l[3]-=15;l[5]-=15; } if(a==0&&i==1) {l[1]+=15;l[3]+=15;l[5]+=15;} if(a>0&&i==2) {l[0]+=15;l[2]+=15;l[4]+=15;l[1]+=15;l[3]+=15;l[5]+=15; } if(a>0&&i==0) {l[1]+=15;l[3]+=15;l[5]+=15; } if(a>0&&(i==1)) {l[0]-=15;l[2]-=15;l[4]-=15; } } void tee4() { if(a==0&&i==1) {l[1]+=15;l[3]+=15;l[5]+=15; } if(a==0&&i==0) {l[0]+=15;l[2]+=15;l[4]+=15; } if(a==0&&i==2) {l[1]-=15;l[3]-=15;l[5]-=15;l[0]+=15;l[2]+=15;l[4]+=15; } if(a>0&&i==2) {l[0]+=15;l[2]+=15;l[4]+=15;l[1]-=15;l[3]-=15;l[5]-=15; } if(a>0&&i==0) {l[1]-=15;l[3]-=15;l[5]-=15; } if(a>0&&i==1) {l[0]-=15;l[2]-=15;l[4]-=15; } } check0() { int x,y,s,d=5; x=(l[0]-180)/15; y=(l[1]-90)/15; if(a==0){ switch (p) { case 0: y+=2;d=2; if(arr[y][x-1]==1) return(1); else break; case 1: y+=4;x++;d=1;if(arr[y-3][x-1]==1) return(1); else break; case 2: y=y+4;d=2;x+=1;break; case 3: y=y+1;d=5;x+=4;break; case 4: y+=2;d=3;x++;break; case 5: y+=1;d=3;if(arr[y+1][x-1]==1) return(1); else break; } for(s=1;s<d;s++,x--) if(arr[y][x]==1) return(1); if((arr[y][x])==0) return(0); else return(1); } if(a==1){ switch (p) { case 0: y+=2;d=2; if(arr[y][x-1]==1) return(1); else break; case 1: y=y+2;d=4;if(arr[y][x]==1) return(1); else break; case 2: y=y+2;d=4;x+=3;if(arr[y][x-3]==1) return(1); else break; case 3: y=y+5;d=0;break; case 4: y+=3;d=0;if(arr[y-1][x+1]==1) return(1); else break; case 5: y+=3;d=0;if(arr[y-1][x-1]==1) return(1); else break; } for(s=1;s<d;s++,x--) if(arr[y][x]==1) break; if((arr[y][x])==0) return(0); else return(1); } return(0); } check1() { int x,y,s,d=5; x=(l[0]-150)/15; y=(l[1]-90)/15; if(a==0){ switch (p) { case 0: x=x-1;y++;d=2;break; case 1: x=x;d=3; y=y+3; break; case 2: x=x;d=4;y+=3; break; case 3: x=x+3;d=0;break; case 4: x=x;break; case 5: x=x-1;d=0; } for(s=0;s<d;s++,y--) if(arr[y][x]==1) break; if((arr[y][x])==0) return(0); else return(2); } if(a==1) { switch(p) { case 0: x=x; break; case 1: x=x;d=1;break; case 2: x=x+3; break; case 3: x=x;y+=5;d=4;break; case 4: x=x+1;break; case 5: x=x;y+=2;d=2; } for(s=0;s<d;s++,y--) if(arr[y][x-1]==1) break; if((arr[y][x-1])==0) return(0); else return(2); } return(0); } check2() { int x,y,s,d=5; x=(l[0]-150)/15; y=(l[1]-90)/15; if(a==0){ switch (p) { case 0: x=x-1;d=1;break; case 1: x=x;d=3;break; case 2: x=x;d=3;break; case 3: x=x;d=0;break; case 4: x=x-1;d=1;break; case 5: x=x-2;d=0; } for(s=0;s<d;s++,y++) if(arr[y][x-3]==1) break; if((arr[y][x-3])==0) return(0); else return(2); } if(a==1){ switch (p) { case 0: x=x-4;d=2;break; case 1: x=x-6;d=0;break; case 2: x=x-3;d=2;y-=1;break; case 3: x=x-3;d=5;break; case 4: x-=3; d=3;break; case 5: x-=4; d=4; } for(s=1;s<d;s++,y++) if(arr[y][x]==1) break; if((arr[y][x])==0) return(0); else return(2); } return(0); } check3() { for(t=1;t<25;t++) for(q=1;q<12;) if(arr[t][q]==1) { q++; if(q==12) {score+=100;del();}} else break; return(0); } void insert() { int x,y; for(i=0;i<5;i++){ x=(l[0]-180)/15; y=(l[1]-90)/15; arr[y][x]=1; switch(p) { case 0: box2();break; case 1: bar2();break; case 2: bar4();break; case 3: rod2();break; case 4: tee2();break; case 5: tee4(); } } if(arr[0][5]==1||arr[0][6]==1) { settextstyle(3,0,4); outtextxy(180,100," GAME OVER "); fflush(stdin); getch(); turn=0; again(); } } void print() { for(i=0;i<5;i++){ setcolor(WHITE); setfillstyle(SOLID_FILL,6); rectangle(l[0]+1,l[1]+1,l[2]-1,l[3]-1); floodfill(l[4]+1,l[5]+1,WHITE); if(i<4) switch (p) { case 0 : box1();break; case 1 : bar1();break; case 2 : bar3();break; case 3 : rod1();break; case 4 : tee1();break; case 5 : tee3(); } } } void remove() { for(i=0;i<5;i++){ setcolor(BLACK); setfillstyle(SOLID_FILL,BLACK); rectangle(l[0]+1,l[1]+1,l[2]-1,l[3]-1); floodfill(l[4]+1,l[5]+1,BLACK); if(i<4) switch (p) { case 0 : box2();break; case 1 : bar2();break; case 2 : bar4();break; case 3 : rod2();break; case 4 : tee2();break; case 5 : tee4(); } } } void del() { int m,n; for(;t>0;t--) for(q=1;q<12;q++) arr[t][q]=arr[t-1][q]; for(n=0;n<25;n++) //delay(50); for(m=1;m<12;m++){ if(arr[n][m]==1) { setcolor(WHITE); setfillstyle(SOLID_FILL,6); rectangle((m*15)+181,(n*15)+91,(m*15)+194,(n*15)+104); floodfill((m*15)+182,(n*15)+92,WHITE); } else { setcolor(BLACK); setfillstyle(SOLID_FILL,BLACK); rectangle((m*15)+181,(n*15)+91,(m*15)+194,(n*15)+104); floodfill((m*15)+182,(n*15)+92,BLACK); } } } void frame() { setcolor(WHITE); setfillstyle(SOLID_FILL,8); settextstyle(7,0,6); outtextxy(140,3," TETTRIS "); setcolor(WHITE); settextstyle(2,0,7); outtextxy(400,440,"Press 'Esc' To Exit"); settextstyle(2,0,5); outtextxy(5,285," PRESS "); outtextxy(5,300,"Space To Change Shape"); outtextxy(5,315,"Use Arrow Keys To Move"); rectangle(180,465,375,480); floodfill(181,466,WHITE); rectangle(180,90,194,480); floodfill(181,95,WHITE); rectangle(361,90,375,480); floodfill(362,95,WHITE); setcolor(WHITE); settextstyle(7,0,1); outtextxy(400,200," Next To Come "); setfillstyle(SOLID_FILL,0); rectangle(400,230,530,335); floodfill(401,231,WHITE); for(m=0;m<26;m++) for(n=0;n<13;n++) arr[m][n]=0; for(m=0,n=0;n<26;n++) arr[n][m]=1; for(n=12,m=0;m<26;m++) arr[m][n]=1; for(m=25,n=0;n<13;n++) arr[m][n]=1; } void again() { cleardevice(); setcolor(WHITE); setfillstyle(SOLID_FILL,BLACK); rectangle(150,175,530,335); floodfill(159,179,BLACK); setcolor(WHITE); settextstyle(7,0,1); outtextxy(175,200," Enter Your Choice "); outtextxy(175,220," Press 'Y' To Play Again "); outtextxy(175,240," Press Any Key To Exit "); play=getch(); if(play=='y') cleardevice(); else exit(0); }