6.搬砖工人类随机创建砖块

  1. 6.搬砖工人类随机创建砖块
    1. 6.1 知识点
      1. 要实现的代码
      2. 主要操作
    2. 6.2 知识点代码
      1. BlockWorker

6.搬砖工人类随机创建砖块


6.1 知识点

要实现的代码

主要操作

  1. 俄罗斯方块可以理解为有一个看不见的工人慢慢的把方块往下推,碰到墙壁后就把方块和墙壁融为一体,再搬下一个方块。

  2. 创建搬砖工人类。

  3. 创建工人手里的方块对象类 list,可以理解为当前工人手里拿着的方块。

  4. 搬砖工人心中要默默的知道各个形状的方块信息是什么,选择一个容器来记录各个方块的形态信息。我们选择 Dictionary 创建方块信息字典,主要目的是好找,并且起到练习的作用。Key 用方块类型枚举,值是方块信息类。

  5. 在板砖工人构造函数中初始化创建方块信息字典,把七种方块的枚举和信息放到字典中。

  6. 创建随机创建一个方块方法,随机一个方块类型赋值给工人手里的方块对象类 list,注意不要随机到墙类型。

  7. 初始化方块的原点方块位置,其他非原点方块位置根据方块信息字典里的信息获得。

  8. 再创建一个方块信息类的当前方块信息变量,用来记录当前方块的方块信息。

  9. 给当前方块信息变量赋值,并给当前方块随机出一种方块形态。取出其中一种形态的坐标信息,就可以算出工人手里的方块对象类 list 中非原点方块的坐标。

  10. 最后再构造函数中调用随机创建一个方块方法。

  11. 实现当前搬砖的绘制方法,就是遍历让工人手里拿着的方块绘制。

  12. 在游戏场景类中创建搬砖工人变量,构造函数初始化的时候 new 一个搬砖工人出来。

  13. 在游戏场景类的 Update 方法里让搬砖工绘制。


6.2 知识点代码

BlockWorker

using System;
using System.Collections.Generic;
using System.Text;

namespace CSharp实践教学
{
    class BlockWorker : IDraw
    {
        //方块们
        private List<DrawObject> blocks;
        //心中要默默的知道 各个形状的方块信息是什么
        //选择一个容器来纪录各个方块的形态信息
        //用list和Dictionary都可以用来存储方块的几种信息
        //我们选择Dictionary的主要目的是好找 并且起到练习的作用
        private Dictionary<E_DrawType, BlockInfo> blockInfoDic;
        //记录随机创建出来的方块的 具体形态信息
        private BlockInfo nowBlockInfo;

        public BlockWorker()
        {
            //初始化 装块信息 
            blockInfoDic = new Dictionary<E_DrawType, BlockInfo>()
            {
                { E_DrawType.Cube, new BlockInfo(E_DrawType.Cube) },
                { E_DrawType.Line, new BlockInfo(E_DrawType.Line) },
                { E_DrawType.Tank, new BlockInfo(E_DrawType.Tank) },
                { E_DrawType.Left_Ladder, new BlockInfo(E_DrawType.Left_Ladder) },
                { E_DrawType.Right_Ladder, new BlockInfo(E_DrawType.Right_Ladder) },
                { E_DrawType.Left_Long_Ladder, new BlockInfo(E_DrawType.Left_Long_Ladder) },
                { E_DrawType.Right_Long_Ladder, new BlockInfo(E_DrawType.Right_Long_Ladder) },
            };

            //随机方块
            RandomCreateBlock();
        }

        public void Draw()
        {
            for (int i = 0; i < blocks.Count; i++)
            {
                blocks[i].Draw();
            }
        }

        /// <summary>
        /// 随机创建一个方块
        /// </summary>
        public void RandomCreateBlock()
        {
            //随机方块类型
            Random r = new Random();
            E_DrawType type = (E_DrawType)r.Next(1, 8);
            //每次新建一个 砖块 其实就是创建4个小方形
            blocks = new List<DrawObject>()
            {
                new DrawObject(type),
                new DrawObject(type),
                new DrawObject(type),
                new DrawObject(type),
            };
            //需要初始化方块位置
            //原点位置 我们随机 自己定义 方块List中第0个就是我们的原点方块
            blocks[0].pos = new Position(24, 5);
            //其它三个方块的位置
            //取出方块的形态信息 来进行具体的随机
            //应该把取出来的 方块具体的形态信息 存起来 用于之后变形
            nowBlockInfo = blockInfoDic[type];
            //随机几种形态中的一种来设置方块的信息吧
            int index = r.Next(0, nowBlockInfo.Count);
            //取出其中一种形态的坐标信息
            Position[] pos = nowBlockInfo[index];
            for (int i = 0; i < pos.Length; i++)
            {
                //取出来的pos是相对原点方块的坐标 所以需要进行计算
                blocks[i + 1].pos = blocks[0].pos + pos[i];
            }
        }
    }
}


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏