格子游戏类型实践—1

      实在无聊,闲暇之余写个这类游戏的框架。其实算不上框架,本来就很简单 还吹尼玛框架,哈哈。

     大家都知道,其实这类游戏的模式都是在维护一个二维数组。所以我们要做一类这种游戏。所以存在一些公共的数据,这里我们新建一个类命名为MainData,这个类存这类游戏所有数据,

     具体代码如下:

      public int[,] AllInts;//为0时表示当前位置没有,为1表示已经存在数据。
      public GameObject[,] AllTetrisObjects;//为空 表示没有游戏物体,不为空 表示当前位置存在数据
      public ColorType[,] CurColorTypes;
      public List<OneTetrisData> CurTetrisDatas;

      后面的意义都一样,我都不仔细列举。我个人觉得这个类应该只提供一些简单的方法,例如往数组中添加一些数据,然后删除一些数据,还有一个重置和初始化。

所以为了后面重构,个人觉得这些字段都应该把它设置成private的类型,而不是public类型。这里留给你你们想想,因为游戏不是你一个人写嘛,如果改成public的,现在有3个程序员写整个游戏,如果有一个不小心直接MainData.AllInts[i,j]=1,然后另外一个程序员也这样改,现在出错了你知道错误出在哪儿么,如果我们把改变数组的值写出方法的话。出来问题的话我们直接查找引用就能轻松的搞定错误,这里重构的思想就是字段尽量保持私有,属性尽量公有。说了一点没用的。接着说。这个类应该只有一些最基本的方法,这也满足类的功能单一化的原则。所以方法如下:

   public void IntilizedData(List<GameObject> curlevelOriginObjes)

   public bool AddToGrid(Transform parentTransform, int[,] onetypetetris, GameObject[,] objetetris, int startRow, int startCloum)

   public void RemoveFromGrid(Point pos)

  代码我就直接贴出来吧:

 public class MainData 
{
    public int[,] AllInts;
    public GameObject[,] AllTetrisObjects;
    public ColorType[,] CurColorTypes;
    public List<OneTetrisData> CurTetrisDatas;


    public MainData(List<GameObject> curlevelOriginObjes)
    {
         IntilizedData(curlevelOriginObjes);
    }
   


    public void IntilizedData(List<GameObject> curlevelOriginObjes)
    {
        CurTetrisDatas = new List<OneTetrisData>();


        CurColorTypes = new ColorType[MathHelper.BoundRowIndex + 2, MathHelper.BoundLineIndex];
        AllInts = new int[MathHelper.BoundRowIndex + 2, MathHelper.BoundLineIndex];
        AllTetrisObjects = new GameObject[MathHelper.BoundRowIndex + 2, MathHelper.BoundLineIndex];


        for (int i = 0; i < MathHelper.BoundRowIndex + 2; i++)
        {
            for (int j = 0; j < MathHelper.BoundLineIndex; j++)
            {
                CurColorTypes[i, j] = ColorType.None;
            }
        }


        if (curlevelOriginObjes != null)
        {
            for (int i = 0; i < curlevelOriginObjes.Count; i++)
            {
                var tem = curlevelOriginObjes[i];
                var data = tem.GetComponent<OneTetrisData>();
                AllInts[data.Pos.X, data.Pos.Y] = 1;
                AllTetrisObjects[data.Pos.X, data.Pos.Y] = tem;
                CurColorTypes[data.Pos.X, data.Pos.Y] = data.CurColorType;
                CurTetrisDatas.Add(data);
            }
        }
    }
    public bool AddToGrid(Transform parentTransform, int[,] onetypetetris, GameObject[,] objetetris, int startRow, int startCloum)
    {
        int row = onetypetetris.GetLength(0);
        int cloum = onetypetetris.GetLength(1);
        GameObject ob=null;
        for (int i = 0; i < row; i++)
        {
            for (int j = 0; j < cloum; j++)
            {
                int currow = startRow - i;
                int curcloum = startCloum + j;
                if (currow >= MathHelper.BoundRowIndex)
                    return false;


                if (onetypetetris[i, j] != 0)
                {
                    if (ob == null)
                        ob = objetetris[i, j].transform.parent.gameObject;
                    AllInts[currow, curcloum] = onetypetetris[i, j];
                    AllTetrisObjects[currow, curcloum] = objetetris[i, j];


                    objetetris[i, j].transform.SetParent(parentTransform);
                    var curTetrisData = objetetris[i, j].GetComponent<OneTetrisData>();
                    curTetrisData.Pos = new Point(currow, curcloum);
                    CurTetrisDatas.Add(curTetrisData);
                    CurColorTypes[currow, curcloum] = curTetrisData.CurColorType;
                }
            }
        }
        Object.Destroy(ob);
        return true;
    }
    public void RemoveFromGrid(Point pos)
    {
        if (AllInts != null && AllInts[pos.X, pos.Y] != 0)
        {
            AllInts[pos.X, pos.Y] = 0;
            var obj = AllTetrisObjects[pos.X, pos.Y];
            var tetrisdata = obj.GetComponent<OneTetrisData>();
            CurTetrisDatas.Remove(tetrisdata);


            CurColorTypes[pos.X,pos.Y]=ColorType.None;
            Object.Destroy(obj);
            AllTetrisObjects[pos.X, pos.Y] = null;
        }
       
    }
}

这里还有一些基本的引用没有添加 进来 大家粘贴完之后可以直接添加引用。

下节我们继续讲怎么写具体的一个游戏的实例。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值