//判断并执行下移,返回1为下移成功,返回0为到底了 bool Shape::Down(Table& table)//向下移动,一个周期自动运行一次 { for(int i=0;i<4;i++) { position[i].row+=1; } for(int i=0;i<4;i++) { if(table.Check(position[i])) { for(int j=0;j<4;j++) { position[j].row-=1; } return 0; } } /*重新打印*/ HANDLE out=GetStdHandle(STD_OUTPUT_HANDLE); COORD pos; DWORD len; for(int i=0;i<4;i++) { if(position[i].row>4) { pos.X=2*(position[i].column); pos.Y=position[i].row-4; FillConsoleOutputCharacter(out,L' ',2,pos,&len); } } for(int i=0;i<4;i++) { if(position[i].row>3) { pos.X=2*(position[i].column); pos.Y=position[i].row-3; SetConsoleCursorPosition(out,pos); cout<<"■"; } } pos.X=0; pos.Y=HEIGHT-3; SetConsoleCursorPosition(out,pos); return 1; }
//判断并执行右移 void Shape::Right(Table& table)//向右移动 { for(int i=0;i<4;i++) { position[i].column+=1; } for(int i=0;i<4;i++) { if(table.Check(position[i])) { for(int j=0;j<4;j++) { position[j].column-=1; } return; } } HANDLE out=GetStdHandle(STD_OUTPUT_HANDLE); COORD pos; DWORD len; for(int i=0;i<4;i++) { if(position[i].row-3>0) { pos.X=2*(position[i].column-1); pos.Y=position[i].row-3; FillConsoleOutputCharacter(out,L' ',2,pos,&len); } } for(int i=0;i<4;i++) { if(position[i].row-3>0) { pos.X=2*(position[i].column); pos.Y=position[i].row-3; SetConsoleCursorPosition(out,pos); cout<<"■"; } pos.X=0; pos.Y=HEIGHT-3; SetConsoleCursorPosition(out,pos); } }
//打印旋转后的范围 void Shape::PrintNearby(int n,Table& table) { Position check; HANDLE out=GetStdHandle(STD_OUTPUT_HANDLE); COORD pos; for(int i=-n;i<=n;i++) { for(int j=-n;j<=n;j++) { check.column=position[2].column+j; check.row=position[2].row+i; if(check.column>0&&check.column<WIDTH-1&&check.row<HEIGHT-1&&check.row>3) { pos.X=2*(check.column); pos.Y=check.row-3; SetConsoleCursorPosition(out,pos); cout<<" "; if(table.Check(check)) { SetConsoleCursorPosition(out,pos); cout<<"■"; } for(int k=0;k<4;k++) { if((position[k].row==check.row)&&(position[k].column==check.column)) { SetConsoleCursorPosition(out,pos); cout<<"■"; } } } } } pos.X=0; pos.Y=HEIGHT-3; SetConsoleCursorPosition(out,pos); }