游戏的基础-三消-2

       前一篇讲到了开始界面那个鹏鹏猫落下来的效果,那个小游戏里面我其实是做个4个效果,当然有兴趣的可以可以去扩充,扩充的方法也很简单,只用去继承那个通用接口,方法体里面想怎么就可以怎么写。这一篇主要讲到整个游戏该怎么去写它 ,怎么去架构这一类型的游戏。格子游戏嘛,自然少不了格子嘛,在游戏开发公司,开始做demo的时候,我们可以不体现视图的表现,就直接用debug测试把游戏的逻辑测通,等逻辑健壮之后再开始写视图表现,这就是mvc嘛,把视图层与模型,控制层分离,我们先把游戏的实例创建出来,这里我们用list存储所有的游戏实例,每个游戏实例挂载一个脚本,这个脚本主要用来存储它的type和在这个格子板上的位置,这是unity的方式,如果是xna的方式的话我们还要重新建一个类存储我们建的用来存储type和位置的类,当然这个类还要有视图表现类的引用了,但我们用的unity,所以不需要去考虑这些了,这个脚本的设计应该是这样的:

public class CatClass : MonoBehaviour
{
   
    public Point Position{set;get;}
    public string AName { set; get; }
    public CatType Type { set; get; }

    //这里构造方法我省略了,实际开发把它加上,当然默认不写也行

}

应为你用的unity所以这个类要继承MonoBehaviour。好了最基本的类我们设计完了,接下来就是设计一个类来生成游戏实例,我们定义这个类为管理类。

public class Cat_Manage

{

    public Dictionary<Point, GameObject> DiCat { set; get; }

    public List<GameObject> Cats { set; get; }

}

这里list数组我们知道了,接下来就要了解这个DiCat 的字典了。当我们一行被消掉的时候,我们知道list数组的大下变小了,我们并不知道是那个地方的,哪一行那一列被消掉了是不是,所以这个字典的主要作用是告诉我们是哪个格子上面的东西被消除了,它的更新和list是同步的,它的作用主要是好多个标志位的集合。接下来就是对整个lsit和字典进行填充了,然后你写一个简单的生成算法就生成出来几行成以几列的游戏实体,但这是你还没有视图表现,你这样生成的游戏实体他们在世界坐标中的位置都是在一个位置的,这是你就要根据屏幕来算你的每个格子的大下了,每个游戏实体的具体的位置了,这个你是可以单独完成的,例如你在1行1列这个位置生成了一个,那么你就给这个游戏实体上的那个最初的脚本上对其type和位置赋值了,然后一个又好多个游戏实体组成了几乘以几的格子了,这个应该大家都能完成,当重新生成特定位置的游戏实体,就把这个游戏实体添加到list中和dic中去,说白了就是不断的跟新整个字典和list,

了解原理之后我们接下来聊聊怎么实现手指按下,并查找周围有没有相同的类型的游戏实体。具体步骤如下:

   首先通过一定的计算,我们知道了我们手指按到了那个游戏实体上,当然你可以加碰撞器,当然怎么方便怎么来,我的建议是不要去加碰撞器,通过计算来得到,当我们得到一个point结构体的数据,里面记录了x,y分别表示列和行,然后分找它的point(x,y+1),point(x,y-1),point(x+1,y),point(x-1,y),如果这四个点中有一个和point(x,y)位置上的游戏实体的类型是一样,那么再一这个点为起始点,向四个方向去找,以此类推就可以找到周围与point(x,y)位置的游戏·实体的类型一样的游戏实体了,简单的来说就是一个递归嘛。

   public  void  GetSurroundCats(Point position)
    {
        
        var list = FindAround(position);
        for (int i = 0; i < list.Count; i++)
        {
            if (!CatMange.Surrounds.Contains(list[i]))
            {
                CatMange.Surrounds.Add(list[i]);
                var key=list[i].GetComponent<CatClass>().Position;
                GetSurroundCats(key); 
            }
        }   
    }

这样一想一个三消基本的东西都快要搞定了,那做一个三消不是简单的跟1一样有什么区别呢!下一节再讲一下如果中间的有部分被消掉了怎么实现下落


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值