正文

TC++俄罗斯方块2007-11-10 12:09:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/19880128/30846.html

分享到:

程序有点繁琐,功能尚未完全实现,但因为要期中考试,没时间写了 4,6,8,2控制方向 // Note:Your choice is C++ IDE#include "iostream.h"#include "graphics.h"#include "stdlib.h"#include "math.h"#include "bios.h"#include "dos.h"#include "stdio.h"int score;struct xline{ int s[10];}xline[20];//class类class fangkuai{ public: void begain(); void show(); void keycon(char k1); void position(); int check(); void start(); void fall(); void score(); int checkscore(int k1); void scoreget(int k1); void kinds(int kin1); private: int a[4][2],a1[4][2],kin,move,sta;};voidfangkuai::begain() //初始化{ int i,j; for(i=0;i<20;i++) for(j=0;j<10;j++) xline[i].s[j]=0; sta=0; kin=rand()%7; kinds(kin);}voidfangkuai::start(){ int i; sta=0; kin=rand()%7; kinds(kin); }voidfangkuai::kinds(int kin1)            //为下落块赋初值{ int i; if(kin1==0) for(i=0;i<4;i++) {  a[i][0]=3+i;  a[i][1]=0; } if(kin1==1) {  a[0][0]=4;a[0][1]=0;a[1][0]=5;a[1][1]=0;  a[2][0]=4;a[2][1]=1;a[3][0]=5;a[3][1]=1; } if(kin1==2) {  a[0][0]=4;a[0][1]=0;  a[1][0]=3;a[1][1]=1;a[2][0]=4;a[2][1]=1;a[3][0]=5;a[3][1]=1;   } if(kin1==3) {  for(i=0;i<=2;i++)  {a[i][0]=3+i;a[i][1]=0;}  a[3][0]=3;a[3][1]=1; } if(kin1==4) {for(i=0;i<=2;i++)  {a[i][0]=3+i;a[i][1]=0;}  a[3][0]=5;a[3][1]=1; } if(kin1==5) {  a[0][0]=4;a[0][1]=0;a[1][0]=5;a[1][1]=0;  a[2][0]=3;a[2][1]=1;a[3][0]=4;a[3][1]=1; } if(kin1==6) {  a[0][0]=4;a[0][1]=0;a[1][0]=5;a[1][1]=0;  a[2][0]=5;a[2][1]=1;a[3][0]=6;a[3][1]=1; } }voidfangkuai::keycon(char k1)//键盘控制{ int i; move=0; if(k1=='4') {for(i=0;i<4;i++) {if(a[i][0]==0)  return; if(xline[a[i][1]].s[a[i][0]-1]==1)  return; } move=-1;} if(k1=='6')    {for(i=0;i<4;i++) {if(a[i][0]==9)  return;  if(xline[a[i][1]].s[a[i][0]+1]==1)  return;  } move=1;} if(k1=='8'&&kin!=1) {sta++;  move=0;  setfillstyle(1,0);  show();  position();  } if(k1=='2') fall(); if(move!=0) {setfillstyle(1,0);  show();  for(i=0;i<4;i++) a[i][0]+=move;} setfillstyle(1,2); show();}void fangkuai::show()//描绘方块{ int i; for(i=0;i<4;i++) bar(a[i][0]*20+1,a[i][1]*20+1,a[i][0]*20+18,a[i][1]*20+18);}void           /////////////////////////////////////实现翻转fangkuai::position(){ int i,j; if(kin==0) {for(i=-1;i<1;i++)  for(j=-1;j<1;j++)  if(xline[a[1][1]+i].s[a[1][0]+j]==1)  return;  for(i=0;i<3;i++)  for(j=0;j<3;j++)  if(xline[a[1][1]+i].s[a[1][0]+j]==1)  return; if(a[1][0]>0&&a[1][0]<8) if(a[1][1]>0&&a[1][0]<18)               //条形 {  sta%=2;  if(sta==0)  {   for(i=0;i<4;i++)   {a[i][0]=a[1][0]-1+i;    a[i][1]=a[1][1];}  }  if(sta==1)  {   for(i=0;i<4;i++)   {    a[i][0]=a[1][0];    a[i][1]=a[1][1]-1+i;    }   }   }}                     //条形       /////////////////////////// if(kin==2) {for(i=-1;i<=1;i++)  for(j=-1;j<=1;j++)  if(xline[a[2][1]+i].s[a[2][0]+j]==1)  return; if(a[2][0]>0&&a[2][0]<9) if(a[2][1]>0&&a[2][1]<19)                     { sta%=4; if(sta==0) {  a[0][0]=a[2][0];  a[0][1]=a[2][1]-1;  for(i=1;i<4;i++)  {a[i][0]=a[2][0]+i-2;   a[i][1]=a[2][1];} } if(sta==1) {  a[0][0]=a[2][0]-1;  a[0][1]=a[2][1];  for(i=1;i<4;i++)  {a[i][0]=a[2][0];   a[i][1]=a[2][1]+i-2;} } if(sta==2) {  a[0][0]=a[2][0];  a[0][1]=a[2][1]+1;  for(i=1;i<4;i++)  {a[i][0]=a[2][0]+i-2;   a[i][1]=a[2][1];} } if(sta==3) {  a[0][0]=a[2][0]+1;  a[0][1]=a[2][1];  for(i=1;i<4;i++)  {a[i][0]=a[2][0];   a[i][1]=a[2][1]+i-2;}  } }}                        ////////////////////////////// if(kin==3) {for(i=-1;i<=1;i++)  for(j=-1;j<=1;j++)  if(xline[a[1][1]+i].s[a[1][0]+j]==1)  return;                                          /// if(a[1][0]>0&&a[1][0]<9) if(a[1][1]>0&&a[1][1]<19) {  sta%=4;                                if(sta==0)  {   a[3][0]=a[1][0]-1;   a[3][1]=a[1][1]+1;   for(i=0;i<3;i++)   {    a[i][0]=a[1][0]+i-1;    a[i][1]=a[1][1];    }  }  if(sta==1)  {   a[3][0]=a[1][0]-1;   a[3][1]=a[1][1]-1;   for(i=0;i<3;i++)   {    a[i][0]=a[1][0];    a[i][1]=a[1][1]+i-1;    }  }  if(sta==2)  {   a[3][0]=a[1][0]-1;   a[3][1]=a[1][1]-1;   for(i=0;i<3;i++)   {    a[i][0]=a[1][0]-i+1;    a[i][1]=a[1][1];    }  }   if(sta==3)  {   a[3][0]=a[1][0]+1;   a[3][1]=a[1][1]-1;   for(i=0;i<3;i++)   {    a[i][0]=a[1][0];    a[i][1]=a[1][1]-i+1;    }  } }}                         /////////////////////////////////// if(kin==4) {for(i=-1;i<=1;i++)  for(j=-1;j<=1;j++)  if(xline[a[1][1]+i].s[a[1][0]+j]==1)  return; if(a[1][0]>0&&a[1][0]<9) if(a[1][1]>0&&a[1][1]<19) {  sta%=4;  if(sta==0)  {   a[3][0]=a[1][0]+1;   a[3][1]=a[1][1]+1;   for(i=0;i<3;i++)   {    a[i][0]=a[1][0]-1+i;    a[i][1]=a[1][1];    }  }  if(sta==1)  {   a[3][0]=a[1][0]-1;   a[3][1]=a[1][1]+1;   for(i=0;i<3;i++)   {    a[i][0]=a[1][0];    a[i][1]=a[1][1]-1+i;    }  }  if(sta==2)  {   a[3][0]=a[1][0]-1;   a[3][1]=a[1][1]-1;   for(i=0;i<3;i++)   {    a[i][0]=a[1][0]+1-i;    a[i][1]=a[1][1];    }  }  if(sta==3)  {   a[3][0]=a[1][0]+1;   a[3][1]=a[1][1]-1;   for(i=0;i<3;i++)   {    a[i][0]=a[1][0];    a[i][1]=a[1][1]+1-i;    }   } } }               /////////////////////////////////////// if(kin==5) {for(i=-1;i<=1;i++)  for(j=-1;j<=1;j++)  if(xline[a[0][1]+i].s[a[0][0]+j]==1)  return; if(a[0][0]>0&&a[0][0]<9) if(a[0][1]>0&&a[0][1]<19) {  sta%=2;  if(sta==0)  {  a[1][0]=a[0][0]+1;  a[1][1]=a[0][1];  a[2][0]=a[0][0]-1;  a[2][1]=a[0][1]+1;  a[3][0]=a[0][0];  a[3][1]=a[0][1]+1;  }  if(sta==1)  {   a[1][0]=a[0][0];   a[1][1]=a[0][1]+1;   a[2][0]=a[0][0]-1;   a[2][1]=a[0][1]-1;   a[3][0]=a[0][0]-1;   a[3][1]=a[0][1]; }}} //////////////////////////////// if(kin==6) {for(i=-1;i<=1;i++)  for(j=-1;j<=1;j++)  if(xline[a[1][1]+i].s[a[1][0]+j]==1)  return; if(a[1][0]>0&&a[1][0]<9) if(a[1][1]>0&&a[1][1]<19) {  sta%=2;  if(sta==0)  {   a[0][0]=a[1][0]-1;   a[0][1]=a[1][1];   a[2][0]=a[1][0];   a[2][1]=a[1][1]+1;   a[3][0]=a[1][0]+1;   a[3][1]=a[1][1]+1;  }  if(sta==1)  {   a[0][0]=a[1][0];   a[0][1]=a[1][1]-1;   a[2][0]=a[1][0]-1;   a[2][1]=a[1][1];   a[3][0]=a[1][0]-1;   a[3][1]=a[1][1]+1;   }  }}}void                         ////////////////fangkuai::fall(){ int i; setfillstyle(1,0); show(); for(i=0;i<4;i++) a[i][1]+=1; setfillstyle(1,2);}int                   /////////////////////////fangkuai::check(){ int i,t; for(i=0;i<4;i++) {     if(a[i][1]==19)     {for(i=0;i<4;i++)     xline[a[i][1]].s[a[i][0]]=1;     score();     return 0;}     if(xline[a[i][1]+1].s[a[i][0]]==1)     {for(i=0;i<4;i++)     xline[a[i][1]].s[a[i][0]]=1;     score();     return 0;} } return 1;}                      /////////////////////////////void fangkuai::score()           //得分过程{ int i,ju,sc1=0,i1,j1; for(i=19;i>=0;i--) {ju=checkscore(i);  if(ju==2) continue; if(ju==0) return;  if(ju==1) {  sc1++;  scoreget(i);  } }}                  /////////////////intfangkuai::checkscore(int k1){ int i,ju1=0; for(i=0;i<10;i++) {  if(xline[k1].s[i]==1)  ju1++; } if(ju1==0) return 0; if(ju1==10) return 1; return 2;}void fangkuai::scoreget(int k1){ int i,j; for(i=k1;i>0;i--) for(j=0;j<10;j++) xline[i].s[j]=xline[i-1].s[j]; for(i=0;i<20;i++) for(j=0;j<10;j++) {if(xline[i].s[j]==1) {setfillstyle(1,2); bar(j*20+1,i*20+1,j*20+18,i*20+18);} if(xline[i].s[j]==0) {setfillstyle(1,0); bar(j*20+1,i*20+1,j*20+18,i*20+18);}} }//////////////////////////////////////////////////////class类//主函数void main(){ int body(fangkuai ran); fangkuai ran; score=-1;    int gd=DETECT,gm;    initgraph(&gd,&gm,"");    cleardevice();    setviewport(120,40,520,440,0);        rectangle(-1,-1,201,401);       setcolor(8);    rectangle(-3,-3,403,403);               //界面及图形模式    ran.begain();    body(ran);}//循环体int body(fangkuai ran){    int j=0,ch;    char con1,con2; for(;;) {  j++;  j%=1000;  if(j==0)  ran.fall();  ran.show();  con1=bioskey(1);  if(con1)  {  con2=bioskey(0);  ran.keycon(con2);  }  ch=ran.check();  if(ch==0)  ran.start(); }}

阅读(2026) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册