zoukankan      html  css  js  c++  java
  • Match3 Module For Game(THDN)

     

    1. 介绍

        THDN的核心机制为Match3的利用,本文对Match3 Gameplay进行记录,并对其进行改良.THDN作为RogueLIke性质的游戏,玩家在随机生成的dungeon里进行探索并获取THDN的线索,随机生成的dungeon(DUNGEONIZE)会之后介绍,在探索的过程中,玩家面对黑暗的环境以及未知的生物,当玩家面对生物时,通过采取对战的方式战胜对手,而Match3机制的利用在对战中得以体现,THDN利用RPG+Match的对战风格去战胜对手,Match3的核心机制在于条件消除(3(*)+1),在规定的时间内收集指定的元素生成战斗能力,而在回合结束后,进行重置开始下一回合的收集.

     

        2.Match3 Core

       Match3在THDN的核心流程如下图

      

     

       其初始化过程中主要为4步

       

    InitTileAndPieces()=>FindAllCollectiable()=>FillBoard()=>InitParticleundCamera()

      首先获取图块和碎片并生成至match3面板中,碎片生成与图块里当进行消除时可以自动生成随机碎片或特殊元素至空图块中,当消除条件允许时,可以对面板全部图块进行消除条件检查,FindCollectiable方法对面板进行检测处理,当元素初始化生成后,需要对面板进行尺寸填充。在第一次填充时,需要保证第一次无消除条件的产生,保证条件的初始确认,在一切初始化完成后,便可对条件进行消除操作

      // find all Collectibles in the Board
        List<GamePiece> FindAllCollectibles()
        {
            List<GamePiece> foundCollectibles = new List<GamePiece>();
    
            for (int i = 0; i < height; i++)
            {
                List<GamePiece> collectibleRow = FindCollectiblesAt(i);
                foundCollectibles = foundCollectibles.Union(collectibleRow).ToList();
            }
    
            return foundCollectibles;
        }

    消除对象主要是对图块中的碎片进行操作,当玩家在对碎片进行操作时,当对相邻碎片进行移动位置时需要检测是否产生消除操作,消除操作的产生指对3个以上的碎块进行合并,tile[column,row]里的碎片产生消除条件时,即可对碎块进行消除操作。、

       // decrement the breakable value, switch to the appropriate sprite
        // and conver the Tile to become normal once the breakableValue reaches 0
        IEnumerator BreakTileRoutine()
        {
            breakableValue = Mathf.Clamp(breakableValue--, 0, breakableValue);
    
            yield return new WaitForSeconds(0.25f);
    
            if (breakableSprites[breakableValue] !=null)
            {
                m_spriteRenderer.sprite = breakableSprites[breakableValue];
            }
    
            if (breakableValue == 0)
            {
                tileType = TileType.Normal;
                m_spriteRenderer.color = normalColor;
    
            }
    
        }

    而在进行碎片移动操作时,需要对消除条件进行判断,主要分为以下情况

      1.当碎片可以进行消除条件时,确认消除的情况为tile[i,row]还是tile[column,i]还是tile[i,j],[x,y]会产生3中未知的消除条件

      2.bomb的消除条件为接邻消除效果即可触发,而产生的条件为4个以上的或者others产生的奖励效果。

      3.连锁反应的产生在对第一次消除效果的条件下产生,在对连锁反应的机制产生需要对面板元素进行遍历检测,而对THDN中的基础奖励进行倍数奖励(Sum(damage))

      4.DeadLock 状态的情况为当进行消除操作或者首次填充面板时无可消除条件期望产生时,即可对面板进行重新生成,直至生成可消除期望为止

       IEnumerator ClearAndRefillBoardRoutine(List<GamePiece> gamePieces)
        {
    
            // disable player input so we cannot swap pieces while the Board is collapsing/refilling
            m_playerInputEnabled = false;
    
            isRefilling = true;
    
            // create a new List of GamePieces, using our initial list as a starting point
            List<GamePiece> matches = gamePieces;
    
            // store a score multiplier for chain reactions
            m_scoreMultiplier = 0;
            do
            {
                //  increment our score multiplier by 1 for each subsequent recursive call of ClearAndCollapseRoutine
                m_scoreMultiplier++;
    
                // run the coroutine to clear the Board and collapse any columns to fill in the spaces REFILLUNDCLEAR
                yield return StartCoroutine(ClearAndCollapseRoutine(matches));
    
                // pause one frame
                yield return null;
    
                // run the coroutine to refill the Board (just refill)
                yield return StartCoroutine(RefillRoutine());
    
                // find any subsequent matches and repeat the process...
                matches = FindAllMatches();
    
                yield return new WaitForSeconds(0.2f);
    
            }
            // .. while our list of matches still has GamePieces in it
            while (matches.Count != 0);
    
    
            // deadlock check
            if (m_boardDeadlock.IsDeadlocked(m_allGamePieces, 3))
            {
                yield return new WaitForSeconds(1f);
                // ClearBoard();
    
                // shuffle the Board's normal pieces instead of Clearing out the whole Board
                yield return StartCoroutine(ShuffleBoardRoutine());
               
                yield return new WaitForSeconds(1f);
    
                yield return StartCoroutine(RefillRoutine());
            }
    
    
            // re-enable player input
            m_playerInputEnabled = true;
    
            isRefilling = false;
    
        }

        消除效果产生后,关卡条件对消除物品进行收集并产生奖励,在THDN中,对战的主要机制为回合制下的match3操作,玩家在规定时间内产生消除成果Sum(basicMatch3+ExtraMatch3(combine)+ItemsEffect+BasicStats+specialEffect) 生成伤害总值对敌人进行伤害效果的产生(damage*effect?),在回合结束后需要检测双方的速度值来决定先手次序,如果包含network api需要对伤害方法进行[clientrpc]标记.在一方的血量为0时结束战斗返回地下城或者城镇.

       

  • 相关阅读:
    基于storm和hadoop的广告系统研究【2】
    基于storm和hadoop的广告系统研究【1】
    签名ipa,让其它手机也安装
    UIWebview 截获html并修改内容。
    Resetting the SMC & PRAM
    UITableview 兼容IOS6 和IOS7的方法
    IOS7 APP 升级的10个TIP 建议
    IOS: Xcode报 Undecleared selector Warning错误的解决方法
    十个iOS面试问题
    iOS制作Static Library(静态库),实现多工程的连编
  • 原文地址:https://www.cnblogs.com/EraserHead/p/12182365.html
Copyright © 2011-2022 走看看