俄罗斯方块

本文详细介绍了俄罗斯方块的实现原理,包括对象池、矩阵思想、数据转换和策略思想,并提供了C#代码实现。此外,还探讨了游戏的优化方向,如添加材质、UI得分展示和代码优化。
摘要由CSDN通过智能技术生成

原理思想

(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 = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值