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 = ; 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--, , breakableValue); yield return new WaitForSeconds(0.25f); if (breakableSprites[breakableValue] !=null)
{
m_spriteRenderer.sprite = breakableSprites[breakableValue];
} if (breakableValue == )
{
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 = ;
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 != ); // deadlock check
if (m_boardDeadlock.IsDeadlocked(m_allGamePieces, ))
{
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时结束战斗返回地下城或者城镇.

   

Match3 Module For Game(THDN)的更多相关文章

  1. Android Studio 编译单个module

    前期自己要把gradle环境变量配置好 在Terminal中gradle命令行编译apk 输入gradle assembleRelease 会编译全部module编译单个modulecd ./xiru ...

  2. ABP源码分析三:ABP Module

    Abp是一种基于模块化设计的思想构建的.开发人员可以将自定义的功能以模块(module)的形式集成到ABP中.具体的功能都可以设计成一个单独的Module.Abp底层框架提供便捷的方法集成每个Modu ...

  3. nodejs模块中exports和module.exports的区别

    通过Node.js的官方API可以看到Node.js本身提供了很多核心模块 http://nodejs.org/api/ ,这些核心模块被编译成二进制文件,可以require('模块名')去获取:核心 ...

  4. ES6之module

    该博客原文地址:http://www.cnblogs.com/giggle/p/5572118.html 一.module概述 JavaScript一直没有模块体系,但是伴随着ES6的到来,modul ...

  5. [python] CSV read and write using module xlrd and xlwt

    1. get data from csv, skip header of the file. with open('test_data.csv','rb,) as csvfile: readCSV = ...

  6. Yii2.0.7 限制user module登录遇到的问题

    在Yii2.0.6的时候我是在以下文件通过以下方法实现的. frontend/modules/user/Module.php namespace frontend\modules\user; clas ...

  7. Android Studio导入github下载的project和module

    前言:我们以前eclispe时代, 经常都是跑到github浏览第三方开源资源,然后下载下来,运行一下sample之类的,学习没有接触的第三方安卓库,但是到了Android Studio,在githu ...

  8. Android Studio导入Project、Module的正确方法

    Gradle Project项目.Module模块导入 最近看到网上很多人在抱怨,Android Studio很难导入github上下载下来的一些项目,主要包括: 1.导入就在下载Gradle2.根本 ...

  9. ImportError: No module named 'requests'

    补充说明: 当前环境是在windows环境下 python版本是:python 3.4. 刚开始学习python,一边看书一边论坛里阅读感兴趣的代码, http://www.oschina.net/c ...

随机推荐

  1. Python--day66--模板语言之自定义mysimpletag

  2. BERT的通俗理解 预训练模型 微调

    1.预训练模型      BERT是一个预训练的模型,那么什么是预训练呢?举例子进行简单的介绍      假设已有A训练集,先用A对网络进行预训练,在A任务上学会网络参数,然后保存以备后用,当来一个新 ...

  3. SpringBoot 集成 Activiti 一路踩得坑

    由于项目需要,本人开始在项目Spring boot 中集成工作流引擎Activiti.由于第一次集成,一路上步步都是坑,怪我没有先去看官方文档.现将一路上遇到的问题一一记录. 一. 环境配置 1.项目 ...

  4. H3C OSPF可选配置命令

  5. python进阶之异常处理

    异常处理 在代码运行时,会因为各种原因出现bug,而程序遇到bug就会中断运行,而在日常生产中程序是要长时间运行不能随意中断的.因此就需要我们提前做好异常处理. 异常 print(x) # 一般报错就 ...

  6. 关于Ping和Tracert命令原理详解

    本文只是总结了两个常用的网络命令的实现原理和一点使用经验说明.这些东西通常都分布在各种书籍或者文章中的,我勤快那么一点点,总结一下,再加上我的一点理解和使用经验,方便大家了解.这些也是很基础的东西,没 ...

  7. H3C 静态默认路由配置

  8. H3C 域名解析显示及维护

  9. vue脚手架搭项目 git push超时github网站打不开

    vue: 1.npm install vue-cli -g 全局安装脚手架 2.vue init webpack  name 新建项目 name为项目名称 react: 1..npm install  ...

  10. 手把手教你基于koa2,mongoose实现增删改查

    初始化项目 npm init -y 先安装一波乱七八糟的依赖插件(需要具备一定的koa2知识,至于mongoDB自行百度安装教程),模板引擎我使用的是art-template(据说是性能最好的,而且是 ...