Match3 Module For Game(THDN)
- 介绍
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)的更多相关文章
- Android Studio 编译单个module
前期自己要把gradle环境变量配置好 在Terminal中gradle命令行编译apk 输入gradle assembleRelease 会编译全部module编译单个modulecd ./xiru ...
- ABP源码分析三:ABP Module
Abp是一种基于模块化设计的思想构建的.开发人员可以将自定义的功能以模块(module)的形式集成到ABP中.具体的功能都可以设计成一个单独的Module.Abp底层框架提供便捷的方法集成每个Modu ...
- nodejs模块中exports和module.exports的区别
通过Node.js的官方API可以看到Node.js本身提供了很多核心模块 http://nodejs.org/api/ ,这些核心模块被编译成二进制文件,可以require('模块名')去获取:核心 ...
- ES6之module
该博客原文地址:http://www.cnblogs.com/giggle/p/5572118.html 一.module概述 JavaScript一直没有模块体系,但是伴随着ES6的到来,modul ...
- [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 = ...
- Yii2.0.7 限制user module登录遇到的问题
在Yii2.0.6的时候我是在以下文件通过以下方法实现的. frontend/modules/user/Module.php namespace frontend\modules\user; clas ...
- Android Studio导入github下载的project和module
前言:我们以前eclispe时代, 经常都是跑到github浏览第三方开源资源,然后下载下来,运行一下sample之类的,学习没有接触的第三方安卓库,但是到了Android Studio,在githu ...
- Android Studio导入Project、Module的正确方法
Gradle Project项目.Module模块导入 最近看到网上很多人在抱怨,Android Studio很难导入github上下载下来的一些项目,主要包括: 1.导入就在下载Gradle2.根本 ...
- ImportError: No module named 'requests'
补充说明: 当前环境是在windows环境下 python版本是:python 3.4. 刚开始学习python,一边看书一边论坛里阅读感兴趣的代码, http://www.oschina.net/c ...
随机推荐
- a span做成按钮时,文字不被选中样式
HTML: <a class="button"></a> <span class="button"></span> ...
- pip安装软件包报Could not fetch URL
报这个错误的原因是python.org已经不支持TLSv1.0和TLSv1.1了.更新pip可以解决这个问题,但是你不能用命令 pip install --upgrade pip 做更新,因为TLS证 ...
- display常用的三种值:block、inline、inline-block
display:block(块级元素 ) 会独占一行,多个block元素会各自新起一行.默认情况下,block元素宽度自动填满其父级宽度 display:inline(内联(行级)元素 ) 不会独占一 ...
- jq制作tab栏
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Eclipse设置默认编码为UTF-8
需要设置的几处地方为: Window->Preferences->General ->Content Type->Text->JSP 最下面设置为UTF-8 Window ...
- java面向接口编程之适配器模式
使用一个现成的类,但是它的接口不完全符合你的需求,我只想要它其中的一个方法,不想覆写其他的方法. 比如,窗体有变大,变小,关闭的行为,但是我现在只需要关闭行为; package reviewDem ...
- Vue.js 学习笔记 第7章 组件详解
本篇目录: 7.1 组件与复用 7.2 使用props传递数据 7.3 组件通讯 7.4 使用slot分发内容 7.5 组件高级用法 7.6 其他 7.7 实战:两个常用组件的开发 组件(Compon ...
- 【31.95%】【CF 714B】Filya and Homework
time limit per test 1 second memory limit per test 256 megabytes input standard input output standar ...
- 【47.40%】【BZOJ 1875】[SDOI2009]HH去散步
Time Limit: 20 Sec Memory Limit: 64 MB Submit: 1363 Solved: 646 [Submit][Status][Discuss] Descript ...
- SVG路径无法识别问题
SVG 路径不规范无法识别 使用 (?<=(,|-))\. 替换为0. 即可