原文链接
原题链接
思路
用4*4
的图案,从上到下,覆盖在15*10
的游戏区间。模拟方块下降的过程,当不能再往下时,更新游戏区间,然后输出。
为了解决新落下的方块最下面有空行的问题,在游戏区间的最下面补上几行均为1的值即可。
另外,一定一定不要从下往上找符合条件的位置!!!!
不要问为什么,问就和我一样蠢。改了快两个小时的bug,我没了~~~~~
代码
#include <iostream>
using namespace std;
int map[25][25];
int a[5][5];
int pos = 0;
bool judge(int r,int c){
for(int i=0;i<4;i++){
for(int j=0; j<4; j++){
if(a[i][j]==1 && map[i+r][j+c] == 1){
return false;//冲突了
}
}
}
return true;
}
int main(){
for(int i=0;i<15; i++){
for (int j=0; j<10; j++){
cin>>map[i][j];
}
}
for(int i=15;i<19;i++){
for(int j=0;j<10;j++){
map[i][j] = 1;
}
}
for(int i=0;i<4;i++){
for(int j=0; j<4; j++){
cin>>a[i][j];
}
}
cin>>pos;
pos = pos-1;
int mark;
int p;
//可以放的位置,从最上面开始找位置!!!不能从下往上找
for(int i = 0;i<=14;i++){
if(!judge(i,pos)) break;//找到符合条件的位置
mark = i;
}
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
if(a[i][j]==1){
map[i+mark][j+pos] = a[i][j];//更新游戏的图
}
}
}
for(int i=0;i<15; i++){
for (int j=0; j<10; j++){
cout<<map[i][j];
if(j!=9) cout<<' ';
}
cout<<endl;
}
return 0;
}