程序有点繁琐,功能尚未完全实现,但因为要期中考试,没时间写了 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(); }}

评论