检测能否旋转,就是判断方块旋转之后会不会与已经固定的点重合,或者,旋转之后,是否有点跑到屏幕外了。在上一节的旋转方块中,已经记录了旋转之后的点,所以旋转碰撞的代码直接添加到旋转方块的方法中即可,下面是修改后的旋转方块方法:
// 旋转方块
void RotateBlock()
{
// 记录旋转后的方块数据
List<MyPoint> rotatedBlockData = new List<MyPoint>();
// 记录世界坐标下的方块数据
List<MyPoint> rotatedBlockDataInWorld = new List<MyPoint>();
// 获取方块宽
int blockWidth = _blockLayer.Size._width;
// 开始旋转
foreach (var item in _blockLayer.ViewData)
{
MyPoint rotated = new MyPoint();
rotated._list = item._line;
rotated._line = blockWidth - item._list - 1;
// 存入旋转后的方块数据
rotatedBlockData.Add(rotated);
}
// 转换坐标
ConvertPointInWorld(rotatedBlockData, rotatedBlock-DataInWorld);
// 判断碰撞
foreach (var point in rotatedBlockDataInWorld)
{
// 只要发现有点跑到屏幕外 或者 与固定方块层的点重合了
if (point._list > 9 || _defaultLayer.IsCanSee(point))
return;
}
// 替换成旋转后的方块数据
_blockLayer.ViewData = rotatedBlockData;
_screenMain.RefreshScreen();
}
好了,那么方向键到这里就告一段落了,下面,我们要让游戏继续下去,不能总是只有一个方块。
代码链接:https://pan.baidu.com/s/1YWflEaT5oJ-0Hb0a6obVVA
提取码:1jqr
网友评论