俄罗斯方块

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<vector> 
#include<string>
#include<queue>
#include<map>
using namespace std;
int mp[20][15];
int m[5][5];
int main()
{
    for(int i=0;i<15;i++)
        for(int j=0;j<10;j++)
            cin>>mp[i][j];
    int h = 0,flag=0;
    for(int i=0;i<4;i++)
    {
        for(int j=0;j<4;j++)
        {
            cin>>m[h][j];        //只记录有效行,即有1的行
            if(m[h][j] == 1)
                flag = 1;     
        }    
        if(flag == 1)    h++;    //该行有效 
        flag = 0;
    }
    int n;
    cin>>n;
    //一直往下试探一行,看还能不能继续往下移动,不能的时候回溯一行 
    int k,i,j; 
    for(k=0;k<15;k++)     
    {
        for(i=k;i<k+h;i++)
        {
            for(j=n-1;j<n+3;j++)
            {
                 if(mp[i][j] == 1 && m[i-k][j-n+1] == 1)        //冲突 
                     break;
                 if(m[i-k][j-n+1] == 1 && i == 14)        //到底
                    break;
                
            }
            if(mp[i][j] == 1 && m[i-k][j-n+1] == 1)
                 break;
            if(m[i-k][j-n+1] == 1 && i == 14)        //到底
                break;
            
        }
        if(mp[i][j] == 1 && m[i-k][j-n+1] == 1)
            break;
        if(m[i-k][j-n+1] == 1 && i == 14)        //到底
            break;
        
    }
    if(m[i-k][j-n+1] == 1 && i == 14)    k++;    //到底不需要回溯 
    for(i=k-1;i<k+h-1;i++)
        for(j=n-1;j<n+3;j++)
        {
            if(m[i][j]==0 && m[i-k+1][j-n+1] == 1)
            {
                mp[i][j]=m[i-k+1][j-n+1];
            }
        }
    
    
    for(int i=0;i<15;i++)
    {
        for(int j=0;j<10;j++)
            cout<<mp[i][j]<<" ";
        cout<<endl;
    }
    return 0;
}

 

posted @ 2019-03-07 11:19  萌新上路  阅读(140)  评论(0编辑  收藏  举报