{
TRACE("i = %d, j = %d\n", i, j);
Russian[p.x+i][p.y+j] = 0;
}
}
}
for (i=0; i<4; i++)
{
for (j=0; j<4; j++)
{
if (a[i][j] == 1)
{
TRACE("上下左右:i = %d, j = %d\n", i, j);
switch(direction)
{
//左移动
case 1:
if ((p.y+j-1)<0)
goto exit;
if (Russian[p.x+i][p.y+j-1] == 1)
goto exit;
break;
//右移动
case 2:
if ((p.y+j+1)>=m_col)
goto exit;
if (Russian[p.x+i][p.y+j+1] == 1)
goto exit;
break;
//下移
case 3:
if ((p.x+i+1)>=m_row)
goto exit;
if (Russian[p.x+i+1][p.y+j] == 1)
goto exit;
break;
//变换
case 4:
if (!Change(a, p, Russian))
goto exit;
for (i=0; i<4; i++)
{
for (j=0; j<4; j++)
{
GameSquare[i][j] = GameSquAfter[i][j];
a[i][j] = GameSquare[i][j];
}
}
return false;
break;
}
}
}
}
int x, y;
x = p.x;
y = p.y;
//移动位置,重新给数组赋值
switch(direction)
{
case 1:
y--;
break;
case 2:
y++;
break;
case 3:
x++;
break;
case 4:
break;
}
for (i=0; i<4; i++)
{
for (j=0; j<4; j++)
{
if (a[i][j] == 1)
{
Russian[x+i][y+j] = 1;
}
}
}
return false;
exit:
for (i=0; i<4; i++)
{
for (j=0; j<4; j++)
{
if (GameSquWill[i][j] == 1)
{
Russian[p.x+i][p.y+j] = 1;
TRACE("p.x+i = %d, p.y+j = %d\n", p.x+i, p.y+j);
}
}
}
return true;
}
bool CWndMain::Change(int a[][4], CPoint p, int b[][100])
{
int temp[4][4];
int i, j;
int k=4, l=4;
for (i=0; i<4; i++)
{
for (j=0; j<4; j++)
{
a[i][j] = GameSquWill[i][j];
}
}
//存放变换后的方块矩阵
for (i=0; i<4; i++)
{
for (j=0; j<4; j++)
{
temp[i][j] = a[j][3-i];
}
}
for (i=0; i<4; i++)
{
for (j=0; j<4; j++)
{
if (temp[i][j] == 1)
{
TRACE("111111:i = %d, j = %d\n", i, j);
TRACE("222222:k = %d, k = %d\n", k, l);
if (k>i) k=i;
if (l>j) l=j;
TRACE("333333:k = %d, k = %d\n", k, l);
}
}
}
for (i=0; i<4; i++)
{
for (j=0; j<4; j++)
{
GameSquWill[i][j] = 0;
}
//把变换后的矩阵移到左上角
for (i=k; i<4; i++)
{
for (j=l; j<4; j++)
{
GameSquWill[i-k][j-l] = temp[i][j];
TRACE("4444444:i= %d, j = %d\n", i, j);
TRACE("5555555:i-k= %d, j-l = %d\n", i-k, j-l);
}
}
//判断是否接触,是:返回失败
for (i=0; i<4; i++)
{
for (j=0; j<4; j++)
{
if (GameSquAfter[i][j] == 0) continue;
if (((p.x+i)>=m_row) || ((p.y+j)<0) ||((p.y+j)>m_col))
{
return false;
}
if (b[p.x+i][p.y+j] == 1)
{
return false;
}
}
}
return true;
}
void CWndMain::LineDelete()
{
int i,j, k, l;
//本次共消去的行数
int m=0;
bool flag = 0;
for (i=0; i
//检查要不要消行
flag = true;
for (j=0; j
if (Russian[i][j] == 0)
{
TRACE("检查要不要消行:i = %d, j = %d\n", i, j);
flag = false;
}
}
//如果要消行
if (flag == true)
{
m++;
TRACE("///////m = %d\n", m);
for (k=i; k>0; k--)
{
//上行给下行
for (l=0; l
TRACE("赋值前:k = %d, l = %d\n", k, l);
Russian[k][l] = Russian[k-1][l];
TRACE("赋值后:k = %d, l = %d\n", k, l);
}
}
//第一行为0
// for (l=0; l
// Russian[0][1] = 0;
// }
}
}
DrawWill();
//加分
switch(m)
{
case 1:
m_Score++;
break;
case 2:
m_Score += 3;
break;
case 3:
m_Score += 6;
break;
case 4:
m_Score += 10;
break;
default:
break;
}
//速度
m_Speed = m_Score/50;
//游戏结束
for (i=0; i<4; i++)
{
for (j=0; j<4; j++)
{
if (GameSquare[i][j] == 1)
{
TRACE("消行:i = %d, j = %d\n", i, j);
//到了顶点
if (Russian[i+NowPosition.x][j+NowPosition.y] == 1)
{
TRACE("i+NowPosition.x = %d, j+NowPosition.y = %d\n", i+NowPosition.x, j+NowPosition.y);
m_End = TRUE;
MessageBox("游戏结束");
return;
}
}
}
}
}
void CWndMain::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// switch(nChar)
// {
// case VK_LEFT:
// MessageBox("向左");
//
// // g_wndMain.MoveDir(1);
// break;
// case VK_RIGHT:
// // g_wndMain.MoveDir(2);
//
// MessageBox("向右");
// break;
// case VK_DOWN:
// // g_wndMain.MoveDir(3);
//
// MessageBox("向下");
// break;
// default:
// ASSERT(0);
// break;
// }
CWnd::OnKeyDown(nChar, nRepCnt, nFlags);
}
BOO