思路:输入依旧采用二元数组
解题:我思考的是,模拟俄罗斯方块的下落过程,将下落方块从下到上遍历,每次遍历到值为1(既有方块的时候)根据此时的i,j修改方格图中的坐标,首先需要判断方格图中的条件,如果是0,则改为1,如果是1(已经有方块了)则方格图再往上一行继续遍历,完成后输出就可以。
缺陷:提交代码测评只有10分,我感觉应该是程序中下落的俄罗斯方块没有连成一个整体,反而像是填沙子那种有空隙就可以往下落,在考虑可不可以加结构体,目前先记录到这。
代码如下:
#include<bits/stdc++.h>
using namespace std;
int n;//保存初始下落列数
int arr1[16][11];//保存方格
int arr2[5][5];//保存下落图形
int main(){
for(int i=0;i<15;i++){
for(int j=0;j<10;j++){
cin>>arr1[i][j];
}
}
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
cin>>arr2[i][j];
}
}
cin>>n;
//从下往上遍历落下的方块,将方块放置到方块图中合适的位置
for(int i=3;i>=0;i--){
for(int j=3;j>=0;j--){
if(arr2[i][j]==1){
bool ok=false;
for(int k=i+12;k--;k>=0){
if(arr1[k][j+n-1]==0&&ok==false){
arr1[k][j+n-1]=1;
ok=true;
}
}
}
}
}
//输出方格图
for(int i=0;i<15;i++){
for(int j=0;j<10;j++){
cout<<arr1[i][j]<<" ";
}
cout<<endl;
}
}