原理思想
(1)对象池(提前准备对象进行显示隐藏操作来完成逻辑)
(2)矩阵思想(方方正正的地图游戏)、笛卡尔坐标系思想(利用笛卡尔坐标系计算逻辑数据)
(3)转换思想 数据转换为对象状态来进行游戏状态切换 数据为0(可移动区域) 1(落地的方块) 2(地图边界) 3(可移动方块)
(4)策略思想 大局观 细节剖析 整合逻辑 进行策略
细节总结
- (1)产生地图 => 0(可移动区域) 1(落地的方块) 2(地图边界) 3(可移动方块)
- (2)随机方块 => 一个存放方块的索引值->随机索引->方块的局部坐标偏移值和基础点进行数学运算显示
- (3)方块移动 => 左、右、下->先判断移动后的数据如果是可以移动进行方块移动(交换数据刷新地图)
- (4)方块旋转 => 先旋转后的数据 可以旋转 交换数据刷新地图 注意:此功能存在相对多的细节问题
- (5)方块消除 => 遍历矩阵判断每一行是否填满1 如果是进行消除操作注意多行消除判断
原理图
矩阵原理图
坐标关系原理图
方块局部坐标原理图
旋转原理图
C#代码
// An highlighted block
#region 数据模块(结构体枚举等放在最上头)
//列举出方块的移动方向
public enum MoveDir
{
left = -1, //左移
right = 1, //右移
up, //旋转
down, //加速和正常向下移动
}
public MoveDir MyMoveDir;
//生成方块:I L J Z S O T 七种 每种类型都有属于自己的 平面坐标系 零点为方块的中心点(0,0)
//方块基础点 x=20/2 y=30-4 (10,26)
//----方块局部坐标---- 对应七个方块图形每个图形对应四个局部位置
struct CubeLocalPos
{
public CubeLocalPos(int _X, int _Y)
{
X = _X;
Y = _Y;
}
//X偏移值
public int X;
//Y偏移值
public int Y;
}
//七种图形 每种图形对应四个局部坐标 将来我们会拿局部坐标跟全局坐标进行转换
CubeLocalPos[,] MyCubeLocalPos = new CubeLocalPos[7, 4]
{
{
new CubeLocalPos(0,0),new CubeLocalPos(0,1),new CubeLocalPos(0,2),new CubeLocalPos(1,0)}, //L
{
new CubeLocalPos(0,0),new CubeLocalPos(0,1),new CubeLocalPos(0,2),new CubeLocalPos(-1,0)}, //J
{
new CubeLocalPos(0,0),new CubeLocalPos(0,1),new CubeLocalPos(-1,1),new CubeLocalPos(1,0)}, //Z
{
new CubeLocalPos(0,0),new CubeLocalPos(0,1),new CubeLocalPos(1,1),new CubeLocalPos(-1,0)}, //S
{
new CubeLocalPos(0,0),new CubeLocalPos(0,1),new CubeLocalPos(-1,0),new CubeLocalPos(1,0)}, //T
{
new CubeLocalPos(0,0),new CubeLocalPos(0,1),new CubeLocalPos(0,2),new CubeLocalPos(0,-1)}, //I
{
new CubeLocalPos(0,0),new CubeLocalPos(0,1),new CubeLocalPos(1,1),new CubeLocalPos(1,0)}, //O
};
//地图
GameObject[,] MyCubes = new GameObject[Height, Width];
//地图数据
int[,] MyCubeValue = new int[Height, Width];
CubeLocalPos[] T_BeforePos = new CubeLocalPos[4];
//高
const int Height =