定义如下结构体
struct point
{
int x,y;
}pit[4];//用于存储板块图案中数值为1的方块
一定要分清x表示的是横坐标,对应二维数组的第二维;y表示的是纵坐标,对应二维数组的第一维。为了便于理解请看下图:
代码
#include <iostream>
using namespace std;
struct point
{
int x,y;
}pit[4];//用于存储板块图案中数值为1的方块
int board[20][15];//用于表示15*10的方格图
int main()
{
for(int i=0;i<15;i++)//初始化方格图
for(int j=0;j<10;j++)
cin>>board[i][j];
int a;
int b=0;
for(int i=0;i<4;i++)//找到板块图案中值为1的方块,并存储于pit[]中
for(int j=0;j<4;j++)
{
cin>>a;
if(a==1)
{
pit[b].y=i;
pit[b++].x=j;
}
}
int lis;//板块图案最左边在方格图中的列号
cin>>lis;
for(int i=0;i<4;i++)
pit[i].x+=(lis-1);//计算板块图中值为1的方块在方格图中的列号
while(true)
{
//当方块图中任意一个值为1的方块到达底端时方块图停止下降
if(pit[0].y==14 || pit[1].y==14 || pit[2].y==14 || pit[3].y==14)
{
for(int i=0;i<4;i++)
board[pit[i].y][pit[i].x]=1;//把方格图中与方块图中值为1的方块的坐标相同的方块的值变为1
break;
}
//当方块图中任意一个值为1的方块的正下方为1时停止下降
if(board[pit[0].y+1][pit[0].x]==1 || board[pit[1].y+1][pit[1].x]==1 || board[pit[2].y+1][pit[2].x]==1 || board[pit[3].y+1][pit[3].x]==1)
{
for(int i=0;i<4;i++)
board[pit[i].y][pit[i].x]=1;//把方格图中与方块图中值为1的方块的坐标相同的方块的值变为1
break;
}
else
{
for(int i=0;i<4;i++)
pit[i].y++;//下降一行
}
}
for(int i=0;i<15;i++)
{
for(int j=0;j<10;j++)
cout<<board[i][j]<<" ";
cout<<endl;
}
return 0;
}