c语言图形程序设计俄罗斯方块,c语言图形小游戏(俄罗斯方块)

#include

#include

#include

int Mark[32][13];

int flag=0;

void InitMark() /*init the cap */

{int i,j;

for(i=1;i<31;i++)

for(j=1;j<11;j++)

Mark[i][j]=0;

for(j=0;j<13;j++)

{Mark[0][j]=1;

Mark[31][j]=1;

}

for(i=1;i<31;i++)

{Mark[i][0]=1;

Mark[i][11]=1;

Mark[i][12]=0;

}

}

void Draw1(int x,int y)      /*draw the long bock*/

{setfillstyle(1,2);

bar(x-9,y+1,x-1,y+9);Mark[(y-90)/10][(x-100)/10]=1;Mark[(y-90)/10][12]++;

bar(x+1,y+1,x+9,y+9);Mark[(y-90)/10][(x-90)/10]=1; Mark[(y-90)/10][12]++;

bar(x+11,y+1,x+19,y+9);Mark[(y-90)/10][(x-80)/10]=1;Mark[(y-90)/10][12]++;

bar(x+21,y+1,x+29,y+9);Mark[(y-90)/10][(x-70)/10]=1;Mark[(y-90)/10][12]++;

}

void Draw1_1(int x,int y)/*覆盖上一个长形方块*/

{setfillstyle(1,BLACK);

bar(x-9,y+1,x+29,y+10);

Mark[(y-90)/10][(x-100)/10]=0;Mark[(y-90)/10][12]--;

Mark[(y-90)/10][(x-90)/10]=0;Mark[(y-90)/10][12]--;

Mark[(y-90)/10][(x-80)/10]=0;Mark[(y-90)/10][12]--;

Mark[(y-90)/10][(x-70)/10]=0;Mark[(y-90)/10][12]--;

}

void Draw1_2(int x,int y)/*The up long Block*/

{setfillstyle(1,2);

bar(x+1,y-9,x+9,y-1);Mark[(y-100)/10][(x-90)/10]=1;Mark[(y-100)/10][12]++;

bar(x+1,y+1,x+9,y+9);Mark[(y-90)/10][(x-90)/10]=1;Mark[(y-90)/10][12]++;

bar(x+1,y+11,x+9,y+19);Mark[(y-80)/10][(x-90)/10]=1;Mark[(y-80)/10][12]++;

bar(x+1,y+21,x+9,y+29);Mark[(y-70)/10][(x-90)/10]=1;Mark[(y-70)/10][12]++;

}

void Draw1_3(int x,int y) /*cover the Long Block*/

{setfillstyle(1,BLACK);

bar(x+1,y-9,x+9,y+29);

Mark[(y-100)/10][(x-90)/10]=0;Mark[(y-100)/10][12]--;

Mark[(y-90)/10][(x-90)/10]=0;Mark[(y-90)/10][12]--;

Mark[(y-80)/10][(x-90)/10]=0;Mark[(y-80)/10][12]--;

Mark[(y-70)/10][(x-90)/10]=0;Mark[(y-70)/10][12]--;

}

void Draw2(int x,int y)      /*draw the Tian bock*/

{setfillstyle(1,3);

bar(x-9,y+1,x-1,y+9);Mark[(y-90)/10][(x-100)/10]=1;Mark[(y-90)/10][12]++;

bar(x+1,y+1,x+9,y+9);Mark[(y-90)/10][(x-90)/10]=1; Mark[(y-90)/10][12]++;

bar(x-9,y+11,x-1,y+19);Mark[(y-80)/10][(x-100)/10]=1;Mark[(y-80)/10][12]++;

bar(x+1,y+11,x+9,y+19);Mark[(y-80)/10][(x-90)/10]=1;Mark[(y-80)/10][12]++;

}

void Draw2_1(int x,int y)   /*cover the Tian bock*/

{setfillstyle(1,BLACK);

bar(x-9,y+1,x+9,y+19);

Mark[(y-90)/10][(x-100)/10]=0;Mark[(y-90)/10][12]--;

Mark[(y-90)/10][(x-90)/10]=0; Mark[(y-90)/10][12]--;

Mark[(y-80)/10][(x-100)/10]=0;Mark[(y-80)/10][12]--;

Mark[(y-80)/10][(x-90)/10]=0;Mark[(y-80)/10][12]--;

}

void Draw3(int x,int y)

{setfillstyle(1,4);

bar(x-9,y+1,x-1,y+9);Mark[(y-90)/10][(x-100)/10]=1;Mark[(y-90)/10][12]++;

bar(x+1,y+1,x+9,y+9);Mark[(y-90)/10][(x-90)/10]=1; Mark[(y-90)/10][12]++;

bar(x+1,y+11,x+9,y+9);Mark[(y-80)/10][(x-90)/10]=1;Mark[(y-80)/10][12]++;

bar(x+11,y+11,x+19,y+19);Mark[(y-80)/10][(x-80)/10]=1;Mark[(y-90)/10][12]++;

}

void Draw3_1(int x,int y)

{setfillstyle(1,BLACK);

bar(x-10,y,x+10,y+10);

Mark[(y-90)/10][(x-100)/10]=0;Mark[(y-90)/10][12]--;

Mark[(y-90)/10][(x-90)/10]=0; Mark[(y-90)/10][12]--;

bar(x,y+10,x+20,y+20);

Mark[(y-80)/10][(x-90)/10]=0;Mark[(y-80)/10][12]--;

Mark[(y-80)/10][(x-80)/10]=0;Mark[(y-90)/10][12]--;

}

void Screen()

{

rectangle(100,100,200,400);

rectangle(250,150,300,200);

}

int Block()

{int i,j;

i=flag;

flag=random(3);

switch(flag)

{case 0:setfillstyle(1,BLACK);

bar(251,151,299,199);

setfillstyle(1,RED);

bar(256,171,264,179);

bar(266,171,274,179);

bar(276,171,284,179);

bar(286,171,294,179);

break;

case 1:setfillstyle(1,BLACK);

bar(251,151,299,199);

setfillstyle(1,RED);

bar(271,156,279,164);

bar(271,166,279,174);

bar(271,176,279,184);

bar(271,186,279,194);

break;

case 2:setfillstyle(1,BLACK);

bar(251,151,299,199);

setfillstyle(1,RED);

bar(266,156,274,164);

bar(276,156,284,164);

bar(266,166,274,174);

bar(276,166,284,174);

break;

}

return i;

}

int Control(int CH,int x,int y)

{int key;

switch(CH)

{case 0:/*对平放长操作*/

Draw1(x,y);

while(Mark[(y-80)/10][(x-100)/10]==0&&Mark[(y-80)/10][(x-90)/10]==0&&Mark[(y-80)/10][(x-80)/10]==0&&Mark[(y-80)/10][(x-70)/10]==0)

{

if(kbhit())

{key=getch();

if(key==75&&Mark[(y-90)/10][(x-110)/10]==0) {Draw1_1(x,y);x-=10;Draw1(x,y);}

else if(key==77&&Mark[(y-90)/10][(x-60)/10]==0) {Draw1_1(x,y);x+=10;Draw1(x,y);}

else if(key==32&&Mark[(y-100)/10][(x-90)/10]==0&&Mark[(y-80)/10][(x-90)/10]==0&&Mark[(y-70)/10][(x-90)/10]==0)  {Draw1_1(x,y);Control(1,x,y);break;}

else if(key==80&&Mark[(y-80)/10][(x-100)/10]==0&&Mark[(y-80)/10][(x-90)/10]==0&&Mark[(y-80)/10][(x-80)/10]==0&&Mark[(y-80)/10][(x-70)/10]==0)

{Draw1_1(x,y);

while(Mark[(y-80)/10][(x-100)/10]==0&&Mark[(y-80)/10][(x-90)/10]==0&&Mark[(y-80)/10][(x-80)/10]==0&&Mark[(y-80)/10][(x-70)/10]==0)

{y+=10;

}

Draw1(x,y);

break;

}

else if(key==27){return 27;}

}

Draw1_1(x,y);

y+=10;

Draw1(x,y);

delay(10000000000);

}

break;

case 1: /*对竖放长操作*/

Draw1_2(x,y);

while(Mark[(y-60)/10][(x-90)/10]==0)

{

if(kbhit())

{key=getch();

if(key==75&&Mark[(y-100)/10][(x-100)/10]==0&&Mark[(y-90)/10][(x-100)/10]==0&&Mark[(y-80)/10][(x-100)]==0&&Mark[(y-70)/10][(x-100)/10]==0)

{Draw1_3(x,y);x-=10;Draw1_2(x,y);}

else if(key==77&&Mark[(y-100)/10][(x-80)/10]==0&&Mark[(y-90)/10][(x-80)/10]==0&&Mark[(y-80)/10][(x-80)/10]==0&&Mark[(y-70)/10][(x-80)/10]==0)

{Draw1_3(x,y);x+=10;Draw1_2(x,y);}

else if(key==32&&Mark[(y-90)/10][(x-100)/10]==0&&Mark[(y-90)/10][(x-80)/10]==0&&Mark[(y-70)/10][(x-70)/10]==0) {Draw1_3(x,y);Control(0,x,y);break;}

else if(key==80&&Mark[(y-60)/10][(x-90)/10]==0)

{Draw1_3(x,y);

while(Mark[(y-60)/10][(x-90)/10]==0)

{y+=10;

}

Draw1_2(x,y);

break;

}

else if(key==27) {return 27;}

}

Draw1_3(x,y);/*cover the before Up Block*/

y+=10;

Draw1_2(x,y);

delay(10000000000);

}

break;

case 2:Draw2(x,y);/*对田方处理*/

while(Mark[(y-70)/10][(x-90)/10]==0&&Mark[(y-70)/10][(x-100)/10]==0)

{

if(kbhit())

{key=getch();

if(key==75&&Mark[(y-90)/10][(x-110)/10]==0&&Mark[(y-80)/10][(x-110)/10]==0) {Draw2_1(x,y);x-=10;Draw2(x,y);}

else if(key==77&&Mark[(y-90)/10][(x-80)/10]==0&&Mark[(y-80)/10][(x-80)/10]==0) {Draw2_1(x,y);x+=10;Draw2(x,y);}

else if(key==80&&Mark[(y-70)/10][(x-100)/10]==0&&Mark[(y-70)/10][(x-90)/10]==0)

{Draw2_1(x,y);

while(Mark[(y-70)/10][(x-90)/10]==0&&Mark[(y-70)/10][(x-100)/10]==0)

{y+=10;

}

Draw2(x,y);

break;

}

else if(key==27){return 27;}

}

Draw2_1(x,y);

y+=10;

Draw2(x,y);

delay(10000000000);

}

break;

case 3:Draw3(x,y);  /*left Tian design*/

while(Mark[(y-70)/10][(x-90)/10]==0&&Mark[(y-70)/10][(x-80)/10]==0&&Mark[(y-80)/10][(x-100)/10]==0)

{

if(kbhit())

{key=getch();

if(key==75&&Mark[(y-90)/10][(x-110)/10]==0&&Mark[(y-80)/10][(x-100)/10]==0) {Draw3_1(x,y);x-=10;Draw3(x,y);}

else if(key==77&&Mark[(y-90)/10][(x-80)/10]==0&&Mark[(y-80)/10][(x-70)/10]==0) {Draw3_1(x,y);x+=10;Draw3(x,y);}

else if(key==32&&Mark[(y-90)/10][(x-110)/10]==0&&Mark[(y-80)/10][(x-90)/10]==0&&Mark[(y-70)/10][(x-90)/10]==0)  {Draw3_1(x,y);Control(4,x,y);break;}

else if(key==80&&Mark[(y-80)/10][(x-100)/10]==0&&Mark[(y-80)/10][(x-90)/10]==0&&Mark[(y-80)/10][(x-80)/10]==0&&Mark[(y-80)/10][(x-70)/10]==0)

{Draw1_1(x,y);

while(Mark[(y-80)/10][(x-100)/10]==0&&Mark[(y-80)/10][(x-90)/10]==0&&Mark[(y-80)/10][(x-80)/10]==0&&Mark[(y-80)/10][(x-70)/10]==0)

{y+=10;

}

Draw1(x,y);

break;

}

else if(key==27){return 27;}

}

Draw1_1(x,y);

y+=10;

Draw1(x,y);

delay(10000000000);

}

break;

case 4:break;

case 5:break;

case 6:break;

}

}

void Delete()

{int y,y1,x;

for(y=1;y<=30;y++)

{if(Mark[y][12]==10)

{for(y1=y;y1>1;y1--)

Mark[y1][12]=Mark[y1-1][12];

Mark[1][12]=0;

for(y1=y;y1>1;y1--)

for(x=1;x<=10;x++)

Mark[y1][x]=Mark[y1-1][x];

for(x=1;x<=10;x++)

Mark[1][x]=0;

setfillstyle(1,BLACK);

bar(101,101,199,399);

for(y1=1;y1<=30;y1++)

for(x=1;x<=10;x++)

if(Mark[y1][x]==1)

{setfillstyle(1,2);

bar(x*10+91,y1*10+91,x*10+99,y1*10+99);

}

}

}

}

int Gameover()

{if(Mark[1][12]>=1&&Mark[2][12]>=1&&Mark[3][12]>=1&&Mark[4][12]>=1&&Mark[5][12]>=1) return 1;

else return 0;

}

void main()

{  int gd,gm,CH,NC,OFF=0;

gd=DETECT;

initgraph(&gd,&gm,"");

randomize();

InitMark();

NC=0;

Screen();  /*屏幕设置*/

flag=random(3);

while(1)

{

CH=Block();

NC=Control(CH,140,110);  /*控制图形函数*/

if(NC==27) break;   Delete();   OFF=Gameover();   if(OFF) break;   }   getch();   cleardevice();   closegraph();}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值