卡牌冒险者 - 为什么要控制单局游戏的长度

在之前《卡牌冒险者》的设计中,玩家熟悉游戏之后,一次通关流程大约是20分钟。一些玩家抱怨游戏通关时间过短。

假如我们通过延长冒险牌组的厚度,比如说后期加几个血量上千的怪组成第4/5/6关,是否可行呢?我认为是不可行的。原因有两点:

一,延长单次冒险的长度会导致游戏体验非常不可控。由于《卡牌冒险者》中的combo非常多,也很强力,导致了玩家在一局游戏中的成长是非线性的。玩家可能突然脸好而获得了非常强大的卡牌combo,那么后期势必是碾压的游戏体验,获得不到成长的乐趣。而如果你强行削弱卡牌之间的combo,使得设计趋于保守和数值化,以获得游戏流程的线性成长,那么会牺牲卡牌游戏的趣味性,沦为数值游戏。

二,游戏中的某些卡牌是造成一些收益效果然后抽一张牌,并且法力消耗还很低的牌(俗称“无脑赚”,之前探讨过)。这种牌无论几张都不会成为牌组的累赘,而相对的有些牌是固定收益的,比如说直接伤害,没有其他增益的牌,这种牌在后期会成为累赘(当然也可以设计一些牌来在后期配合,那是最好的,但不可能兼顾到所有的牌)。玩家在意识到一些卡牌成为累赘,会一味地倾向于去拿不会成为累赘的那些牌,前期的抓牌策略倾向于单一化。那么为了削弱这种策略的主导地位,就需要游戏后期的数值相对不太爆炸的游戏流程,保证不会出现大量牌后期成为累赘的现象。

当然,有其他方式去解决这个问题,只是我控制个人开发游戏的成本,而没有去实现它。

面向Dream Moment的卡牌设计方式

脑洞征集帖中,我收集到了不少脑洞,其中不乏非常有趣的设计,但是大多数的设计谈不上‘有趣’。

我对并不有趣的卡牌设计进行了一下总结,发现它们的一个特点,即卡牌设计的出发点是“设定”。这里的“设定”的意思是指用卡牌的效果、法力消耗、元素属性等等所有卡牌的基本属性去对迎合卡牌的设定(比如圣骑士和光属性联动等等)。这种设计方式的特点是能设计出符合设定的牌,这当然是好的,但这和“有趣”并无关联。

卡牌冒险者中最重要的核心体验,就是玩家期望达成一种游戏中的一种Dream Moment,并为之努力的过程。这种Dream Moment,包括冰法对敌人大量添加冰冻buff后实施冰爆,或者猎人通过上膛瞬间抽满手牌等等。在卡牌设计中首先需要兼顾的应该是这类组成Dream Moment的牌。

因此,在卡牌设计中,也要通过创建一种Dream Moment。有的Dream Moment需要卡牌之间的combo达成(如《卡牌冒险者》中的堡垒+盾牌猛击等)。有些核心体验则只需要一张牌(如《卡牌冒险者》中的冰与火之书,可以让玩家达成华丽的连击)。

当然,能够兼顾人设上的自洽和Dream Moment的话是最好的。但是对我来说,“有趣”是卡牌设计需要最先解决的东西。平衡性设计则是在它之后进行的。

卡牌冒险者 - 我为什么设计“无脑赚”的牌

《卡牌冒险者》发布后,一些玩家反映游戏中出现了‘无脑赚牌差’的牌,使得游戏失去平衡性,下面我来解释一下为什么这些牌的存在是合理的。

首先,例举一些这些牌的效果:

 寒潮(1费):造成(4)点冰霜伤害,从你的牌组将(2)张基本牌加入你的手牌。(亏1费,净赚4伤,净赚1牌)

战争怒吼(0费):造成(2)点伤害,抽(2)张牌。(不亏费,净赚2伤,净赚1牌)

...

假如上述的牌出现在《炉石传说》这种自由组牌的游戏中,肯定是及其不合理的,因为他们在几乎没有代价的情况下赚取了利益,如果你在牌组中大量加入这种牌,那么你将在一回合中不断地获得大量的、免费的收益。

但是,在《卡牌冒险者》中,这种牌的出现是合理的,我将从以下几点进行解释:

1.卡牌获得的有限性。在卡牌冒险者》中,所有卡牌的获得都是随机并且需要代价的,因此这类牌的数量在牌组中是有限的,玩家不可能随心所欲地使用这些牌。

2.每个回合出牌的限制。很多人忽略了每回合出牌一个限制:牌池被抽光的情况。玩家如果在一个回合中抽光了牌库,并且场上的牌尚未送去墓地进行补充的话,就限制了无限过牌的情况发生。一旦玩家能再一个回合内达成循环,那么剩下的过牌效果就废了。

过牌类的牌和其他单卡的区别。过牌类的牌很大程度上是一种“附加效果”。

举个例子:

假设x的效果是(0)费造成(1)点伤害,抽一张牌。1伤的价值是(1);

牌组a的平均价值是【10】,那么加入牌x对牌组价值的影响可能是【10 + p1】。

牌组b的平均价值是【20】,那么加入牌x对牌组价值的影响可能是【20 + p2】

其中,p1 > p2,p1,p2一定是正的,因为x能够抽一张牌,x的效果是附赠的。

假设y的效果是(0)费造成(15)点伤害。10伤的价值是(15);

牌组a的平均价值是【10】,那么加入牌x对牌组价值的影响可能是【10 + p3】。

牌组b的平均价值是【20】,那么加入牌x对牌组价值的影响可能是【20 + p4】

其中,p3是正的,因为它拉高了牌组的平均价值,p4是负的,因为他拉低了牌组的平均价值。

但是可以推断的是,假如y单卡的价值显著大于牌组平均价值,那么它对牌组的正面加强的效果是比x要强的。这也说明前期y卡堆牌组的质量提高程度大于x。同时,y不会出现x在一回合过光牌组的牌之后的尴尬境地。

因此,x并不是“无脑赚”的牌,玩家需要合理地搭配x,y类的卡牌。

卡牌冒险者—游戏基本规则

卡牌种类

0.1 基本牌(灰色)

l 在自己回合使用并发挥效果的牌。

l 结算完毕后入场,并随着回合的结束送至所有者的坟场。

l 强力的卡牌需要消耗一定的法力。

0.2 装备牌(蓝色)

l 使用之后进入使用者的装备区。

l 装备牌的描述效果为永续存在的效果。

l 因效果移除后进场,并随着回合的结束送至所有者的坟场。

l 未战斗时,你可以将需要的牌移动到装备牌组以在对战开始时令它们处于装备状态。

l 法力消耗一律为0

0.3 道具牌(绿色)

l 在自己回合, 从手牌或者背包区域使用的牌,使用后进场,回合结束时直接从对战中移除(一次性)。

l 一次对局结束后,你背包区域剩下的牌会保留在背包区域,为你之后的作战使用。

l 未战斗时,你可以将需要的牌移动到背包牌组以在对战开始时令它们处于备用状态并且避免抽到它们。

l 法力消耗一律为0

0.4 反制牌(红色)

l 满足一定条件时从手中触发的牌,触发时移入场并具有一定效果,随着回合的结束送至所有者的坟场。

l 触发时机多在对方的回合。

l 不能直接使用。

l 法力消耗一律为0

卡组

1.1 主牌组

卡组的主体,抽牌的来源。

1.2 装备牌组

对局开始时,装备牌组的牌视为已经装备在身上。

1.3 背包牌组

对局开始时,道具牌组的牌可以从背包区域直接使用,否则你就必须抽到那张牌并从手牌中使用。

玩家属性

2.1 生命

归零后死亡,对战结束后保留当前的生命值。

2.2 法力

每个回合结束时,补满法力至上限。

2.3 手牌上限

手牌上限默认为10张,当手牌达到上限时,你任何将牌加入手中的效果都不会触发。

2.4 回合手牌

每个回合结束时,当前回合玩家从牌组抽2张牌。

结算顺序

所有事件(使用牌,造成伤害等)的结算顺序为:标记=>装备=>手牌中的反制牌。如果任意一环中出现类似伤害被免除、卡牌效果被无效化,那么就不会继续传递这个事件。

4 保存时机

在进入战斗前、战斗胜利后、使用角色能力后,均会自动存档。不支持同时多档。

论从MVC模式审视Word文档设计

Word实际上是一个基于MVC模式的文档排版集成环境。
MVC模式可能是贯穿所有程序员职业的一个比较传统的开发模式:将开发分为Model、View、Controller三层。

其中,
Model层为doc文件中的根本,是指文本及其自带的属性(包括其大纲等级、从属于的样式号、各种行内格式(即不从样式集中设置的所有格式))。Model层表示代表着文档的内容和语义化的结构。
View层为doc的具体呈现,包括样式的格式设置(决定了样式的视觉呈现)、自动页码等。一个形象的理解是,相当于网页中的”换肤“功能,改变View层不影响文档内容。View层表示不包含任何文档的内容或语义化的结构。
Controller层可以体现在用户对Model层、View层的操作与控制,包括Word本身对各种(决定引用关系、如序号、题注)的自动化控制。
(以下简称M层、V层、C层。)

MVC的好处是使得用户在更改任意一个层时,不用以及不会影响到其他层的内容。也就是说,要让M层和V层被C层的方便地控制。
举个栗子,修改标题样式的时候,为所有标题制定标题1,这样可以在主体修改的时候改变样式,二不是每次需求发生变化,都要去寻找标题的位置一个个修改。以下是直观地呈现MVC层模式特点的对话:

MVC模式
M层:我是一段作为文档小标题的文本,我的的样式为:标题3,我的大纲级别为三级。
V层:我是标题3样式,我的格式为:黑体,三号,所以M层的这位老兄你的长相就是黑体,三号。
C层:我要改变所有标题3的字号为4,只用选取样式为标题3的就行了。

非MVC模式
M层:我是一段作为文档小标题的文本,我的格式为:黑体,三号,我的大纲级别没有设置,为默认的正文。
V层:我是标题1样式,我的格式为:黑体,三号,但是并没有什么卵用。
C层:M层没有结构信息,我只能手动查找这些小标题的位置。

基于MVC模式的意义,设计Word文档应该遵循以下原则:

  • 不在M层输入任何应该由程序自动生成的非语义文本。如:手动输入的序号、题注、目录等。
  • 不使用V层去侵占M层内容。如使用带有重要文字内容的图片,使用任何格式上的变化去表现内容等。
  • 减少使用M层去实现V层职责内的功能,尽量用样式集去沟通M层与V层。如:不使用空格控制标题文字间距,不为了避免表格截断等视图呈现的需求而使用分页符,不使用行内格式等。(不使用行内格式很重要的一点是这样格式没有语义性,破坏了m层为内容的原则,会影响文档的可维护性和无障碍性)

在我搜集的论文看来,几乎所有递交的论文在MVC上都设计不足。大多数的问题体现在视图使用m层去控制v层。从主观上来说,这样可能是为了一时的方便,或者作者并不愿意投入精力去学习Word文档设计的基本知识。因此出现了以下荒谬的设计弊端:

  • 没有大纲级别或大纲级别混乱(m层结构缺失)
  • 没有多级标题或多级标题没有对应大纲级别(m层结构缺失)
  • 目录手动制成(m层侵占v层、c层)
  • 缺少题注(m层侵占v层、c层)
  • 使用图片表格(v层侵占m层)
  • 使用文字引用而不是域引用(m层侵占c层)
  • ...

任何递交报告的人都应该使用MVC视角重审自己的文档设计。让Word回归原本的面貌

word 自动插入题注

将以下代码插入到vb宏中运行,即可实现自动插入题注。

Sub 题注()
' 题注 宏
Selection.Find.ClearFormatting
With Selection.Find
.Text = "^p图^#"
.Replacement.Text = " "
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchByte = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute
Selection.MoveLeft Unit:=wdCharacter, Count:=1
Selection.MoveRight Unit:=wdCharacter, Count:=1
Selection.InsertCaption Label:="图", TitleAutoText:="InsertCaption4", Title _
:="", Position:=wdCaptionPositionBelow, ExcludeLabel:=0
End Sub

如需清理题注内原有的手动标签,请依次替换"图^#^#"和"图^#",同时查找的样式需要设置为"题注"。

网站体验优化-web生命周期

整理自Udacity:Browser Rendering Optimization

决定网页流畅度的web生命周期:LAIR

  • Load(<1s) 载入时间 (最重要)。
  • Idle(≈50ms) 空闲时间,紧随载入时间,此时首屏必须已经渲染好,等待用户的输入。此时开始载入被延迟(differ)的元素,如不出现在首屏的图片、视频、评论等。
  • Animation(=60fps)动画内不可有超过16ms的事件,否则会影响流畅度。
  • Response(<100ms)从接受到用户输入到浏览器呈现响应的时间。

word:一键清理已有的标题序号

之前介绍了如何一键设置多级标题

但对于已经手动设置了多级标题的论文,使用结果是如此蛋疼:

运行结果

注:左方是新加的自动多级标题,右方是残留的手动多级标题。

这种情况是很常见的,此时使用手动删除操作是非常麻烦的。因此需要使用模糊查找、替换功能。

首先介绍一下如何通过通配符进行查找、替换的操作。如下图:

选中“使用通配符”之后,就能使用正则表达式来进行模糊匹配了。

表达式:[0-9]表示单个数字,括号表示其内部为一个子表达式,{1,}表示前面的子表达式最少匹配1次,没有指定最多匹配次数。因此“([0-9]){1,}.([0-9]){1,}.([0-9]){1,} ”正好匹配了三级标题。

注:正式的表达式后面加了一个空格,因为word是默认非贪婪匹配的,如果标题后方不是个位数会造成漏掉后面的数字

同时,我们需要筛选格式,选取段落>大纲级别(设置为当前要清理的级别号),避免清理掉正文内容。

为此,我录制了一个一键清理 标题1 标题2 标题3 内的手动标题的宏。仅限修改手动标题为“X.X.X ”的情况,如有不同需要手动更改代码内

.Text = "([0-9]){1,}.([0-9]){1,2}.([0-9]){1,} "

的表达式。

代码如下:

word:一键设置多级标题样式控制论文排版

多级列表能方便作者控制文档的结构(内容和呈现分离)。

你可以直接设置多级列表,但这样做的弊端就是你必须为所有需要设置列表层级的内容分别设置列表级别,也不能很好地控制大纲有序化,同时不能体现多级标题的语义。

那么问题来了,如何将多级列表链接到样式呢?

步骤如下:

  • 开始>多级列表>定义新的多级列表(如下图)
  • 修改列表样式为合适的样式
  • 选择左下角的“更多”,选择“将级别链接到样式”,需将各个级别链接到相同级别的标题上,即级别n对应标题n。
  • 设置成功后,通过开始>样式里面的标题n来为标题设置n级标题。

word多级列表设置

但是这样做还不能满足要求,因为要对每个新的论文重复如上的操作,那么如何一键设置多级标题呢?

我们可以通过录制宏来讲以上的操作进行录制,并将其设置到快捷按钮或者键盘快捷键录制宏的基本操作)。