/**//// <summary>
/// 向下移动
/// </summary>
public void MoveToDown()
{
if (GameStatus != GameStatus.Play) return;
if (!IsBoundary(_currentPiece.Matrix, 0, 1))
{
RemovePiece();
AddPiece(0, 1);
}
else
{
// 如果触及底边了,则消除可消的行并且创建新的形状
RemoveRow();
CreatePiece();
// 每落下一个形状加 1 分
Score++;
}
}
/**//// <summary>
/// 变形
/// </summary>
public void Rotate()
{
if (GameStatus != GameStatus.Play) return;
if (!IsBoundary(_currentPiece.GetRotate(), 0, 0))
{
RemovePiece();
_currentPiece.Rotate();
AddPiece(0, 0);
}
}
/**//// <summary>
/// 清除俄罗斯方块容器
/// </summary>
public void Clear()
{
for (int x = 0; x < _columns; x++)
{
for (int y = 0; y < _rows; y++)
{
Container[y, x].Color = null;
}
}
}
/**//// <summary>
/// 边界判断(是否超过边界)
/// </summary>
/// <param name="matrix">当前操作的形状的4×4矩阵</param>
/// <param name="offsetX">矩阵 X 方向的偏移量</param>
/// <param name="offsetY">矩阵 Y 方向的偏移量</param>
/// <returns></returns>
private bool IsBoundary(int[,] matrix, int offsetX, int offsetY)
{
RemovePiece();
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
{
if (matrix[i, j] == 1)
{
if (j + _positionX + offsetX > _columns - 1 // 超过列的右边界
|| i + _positionY + offsetY > _rows - 1 // 超过行的下边界
|| j + _positionX + offsetX < 0 // 超过列的左边界
|| Container[i + _positionY + offsetY, j + _positionX + offsetX].Color != null) // matrix 所需偏移的地方已经有 Block 占着了
{
AddPiece(0, 0);
return true;
} }
}
}
AddPiece(0, 0);
return false;
}
上一页 [1] [2] [3] [4] [5] [6] [7] 下一页
责任编辑:小草