CSP 俄罗斯方块

原题链接

俄罗斯方块

思路

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;
}

Add a Comment

邮箱地址不会被公开。