summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEltrac <hi@guhub.cn>2025-02-11 23:32:16 +0800
committerEltrac <hi@guhub.cn>2025-02-11 23:32:16 +0800
commit0e4a0ede0255ecb406494a4b4072f15be22d7130 (patch)
tree573c2954cdce13ab37560f801c0b6beabc8a00b4
parent4bdaa41711b9bf1448bd8cbc8d1ee1a8b911350a (diff)
docs(draft): upload drafts
Former-commit-id: f3c2af5393829a62f310f1a9f44927de7ac733c4
-rw-r--r--content/posts/为什么不玩扑克呢.md180
-rw-r--r--content/posts/稻草人周刊-vol-16.md24
2 files changed, 204 insertions, 0 deletions
diff --git a/content/posts/为什么不玩扑克呢.md b/content/posts/为什么不玩扑克呢.md
new file mode 100644
index 00000000..3baee8b2
--- /dev/null
+++ b/content/posts/为什么不玩扑克呢.md
@@ -0,0 +1,180 @@
+---
+title: 为什么不玩扑克呢?
+subtitle: 游戏《Exploker》设计日志
+categories: Game++
+tags:
+ - 游戏开发
+date: 2025-02-11 21:15:50
+draft: true
+toc: true
+---
+
+大概是因为某天在条件有限的情况下,用扑克牌给朋友占卜的经历,我注意到扑克牌作为一种游戏用的纸牌,其实有相当多的开发潜力。
+
+<!--more-->
+
+有趣的是,19 岁的我没有不会玩任何一种扑克牌游戏。我记得很小的时候我妈妈教过我一种叫做「金钩钓鱼」的扑克牌游戏,但我已经忘记了。说来好笑,我曾经暗暗发誓不要学会任何一种扑克游戏,因为当时的我很讨厌聚在一起打牌的大人。
+
+不过,现在的我决定设计自己的扑克牌游戏。
+
+## 可以利用的材料
+
+扑克牌之所以可以被用来占卜,是因为它的牌面和塔罗牌的小阿卡纳牌组非常相似。扑克牌有四种花色:`♠️黑桃`、`♣️梅花`、`♥️红桃`和`♦️方片`。每种花色有不同的数字和字母:2~9 和 J、Q、K、A。除此之外,还有两张 Joker 牌。
+
+我所在的地区,扑克牌里的 J、Q、A 根据形状被称作「勾」「框」「帽」(也有人把 A 叫做「尖」),大概是因为扑克牌被传到中国时,中国人基本上都不认识拉丁字母。而 K 因为很难联想到具体的形象,所以还是用了英文读法。
+
+扑克牌里的 A 其实代表 Ace,在塔罗牌里也有。有的人把 Ace 当作王牌,也有的人就把它当作数字 1。实际上,ace 来自拉丁语 as,就是「一」的意思,原来指最低面值的货币[^1]。不过由于各种玩法的演变,Ace 被赋予了更多的含义,在一些玩法里它变成了最大的牌。
+
+至于 J、Q、K,和塔罗牌里的宫廷牌一样,其实代表了三个人物:Jack(骑士)、Queen(王后)和 King(国王)。
+
+## 从零开始的头脑风暴
+
+由于我并不熟悉任何一种扑克牌游戏规则,所以我参考了一些其他的纸牌游戏,比如说 Uno。在 Uno 这个纸牌游戏中,出牌的逻辑是,玩家打出的牌要么和场上被打出的上一张牌颜色一样,要么数字或符号一样。通过颜色和数字决定是否能够出牌的规则可以借鉴。
+
+作为一个生存类沙盒游戏玩家,我其实非常喜欢「收集」类的玩法,或者说「屯积资源」。正好扑克牌上有数字,「资源」就可以通过数字大小来衡量。既然有了大小,那何不把获胜条件设置为「拥有最多的资源」呢?虽然比大小有些无聊,但这是一个明确的游戏目标,而且游戏的趣味性可以通过其他规则来实现。
+
+花色除了用来判断能否出牌,`♠️黑桃`、`♣️梅花`、`♥️红桃`和`♦️方片` 其实形成了四个天然的阵营。更棒的是,这四个阵营中有两个黑色阵营和两个红色阵营,那么同色的阵营就可以是盟友,不同色的就可以是敌对关系。当然,也可以反过来,比如说,如果这些花色对应的不是「阵营」而是「市场」,同属黑色市场的玩家就有竞争关系,对于红色市场的玩家则无所谓。
+
+数字可以被用来衡量资源的数量,那字母呢?结合 J、Q、K 实际代表的身份,他们实际上可以被当作「功能牌」。这些牌也是一种资源,只是不能被当作财富计量,必须发挥效果才行。比如 J(骑士)可以有一定的攻击性,Q(王后)可以是谈判的角色,而 K(国王)则可以发号施令。至于 A,我不想把它当作 1 来使用,那样太无聊了。
+
+说完数字牌和字母牌,还有两张 Joker 没有说到。既然在 54 张牌中只有两张 Joker,那不妨把它们视作一种「稀缺资源」。配置稀缺资源的好方法是什么呢?当然是「市场」。Joker 可以通过某种方式被拿到,付出最高代价的玩家才能得到它。Joker 可以给玩家带来一定优势,但又不能强大到让其他玩家没法玩下去。
+
+现在我对每张卡牌的定位都有了些想法,也有了大致的设计方向,可以开始了!
+
+## 牌桌上的探索与收集
+
+既然已经将卡牌视作一种「资源」,那么就将相关的主题进行到底吧!在这个全新的扑克牌游戏里,一共有四种资源,也就是 `♠️黑桃`、`♣️梅花`、`♥️红桃`和`♦️方片`,玩家将扮演类似「探索家」的角色,不断地收集自己想要的资源,最终获得最多资源的玩家获胜。
+
+既然要探索,那么玩家不能是白手起家,要有一些初始的卡牌,并且能用现有的资源交换获得新的资源。我很快就想出了一种游戏形式:
+
+1. 玩家在一开始获得 3 张随机的卡牌;
+2. 在每局游戏开始时,在桌面上放上 3 张不属于任何玩家的卡牌;
+3. 玩家依次行动,利用手牌换取桌面上的卡牌。
+
+刚才不是提到了 Uno 吗?这里刚好就能用上 Uno 的规则。玩家可以用相同颜色(注意花色和颜色的区别)置换一张场上的牌,比如玩家有一张 `♥️3`,那么他可以拿走一张场上的 `♦️5`,然后把自己的 `♥️3` 留在场上。这样的话,玩家就获得了更高点数的卡牌。
+
+不过,如果只是比大小的话,如果场上没有比自己手牌更大的牌呢?而且,这样玩家之间的竞争关系也不容易体现出来了,所以我引入了一条新的规则:
+
+1. 玩家在拿到初始手牌时,必须选择一个花色作为自己的「目标花色」
+2. 最终玩家的分数将按照这样的方式计算:
+ 1. 将「目标花色」卡牌的点数总和作为「被减数」
+ 2. 用「相反颜色」卡牌的点数作为「减数」
+ 3. 相同颜色但不同花色的卡牌不参与计算
+ 4. 被减数减去减数就得到了玩家的分数,或者说资源的数量,毕竟只有自己需要的资源才有价值
+
+这样一来,玩家的目的更加明确了,就是获取更多能给自己加分的牌,想办法丢掉那些会扣掉自己分数的牌。Uno 的另一条规则也变得有意义了,如果玩家的目标花色是 `♣️梅花`,那么他就可以用 -3 分的 `♥️3` 置换一张 +3 分的 `♣️3`;如果条件不允许的话,也可以换成一张人畜无害的 `♠️3`。
+
+由于玩家的竞争关系更明显了,所以在决策时也需要考虑其他玩家的行动。比如,如果自己把扣分的 `♥️3` 换到了场上,而对方的目标花色刚好是 `♥️红桃` 怎么办?这个时候应该是为自己谋取更多的利益,还是阻止对方加分,就是玩家需要权衡取舍的问题。
+
+为了让游戏更好地进行,而不是在几张牌里换来换去。在一局游戏结束后,也就是所有玩家都行动一次之后,场上剩下的牌会被放到弃牌区,然后玩家们从牌堆顶抽出新的三张牌放到场上继续游戏。这一清理机制的引入也让玩家需要考虑的因素多了一些,比如最后一个出牌的玩家可能就需要慎重地决策,因为他留在场上的牌会被弃置,没有人能拿到它们了。
+
+## 快速扩张
+
+以物换一物太慢了!而且玩家手上的牌永远是三张,要是一不小心错过了目标花色的大牌怎么办?要知道,在扑克牌里,没有相同的两张牌。能不能让玩家快速地获得较多的卡牌资源呢?
+
+为了解决这个问题,我引入了新的规则:
+
+1. 如果场上的一张牌比玩家手牌中一张相同花色的牌数字更小,那么玩家可以凭借这张手牌直接「吃掉」场上的这张牌。比如,玩家有一张 `♦️8`,那么他就可以亮出这张牌,然后直接拿走场上的 `♦️3`。
+2. 如果场上的几张牌比玩家手牌中的一张相同花色的牌数字都要更小,那么玩家可以弃置这张手牌,然后拿走场上所有符合条件的牌。比如,玩家有一张 `♠️7`,那么他可以丢掉这张牌,然后直接拿走场上的 `♠️4` 和 `♠️5`。
+3. 如果玩家拿走了牌,导致场上的卡牌数量不足三张,并且这局游戏中还有玩家没有行动,那么玩家就需要从牌堆顶拿出相应数量的牌补齐场上的牌。
+
+为了保证游戏的平衡性,避免某个玩家一直吃牌,在每局游戏里,一个玩家只能行动一次,然后就轮到下一个玩家。玩家必须尽可能做出当下最佳的决定,否则好牌就会被别人拿走,或者被清理到弃牌堆里。
+
+## 皇室出动!
+
+以上的规则都只适用于数字牌,J、Q、K 还没有出场。前文已经提到,我打算把它们当作功能牌,那么,它们的功能分别是什么,又要如何触发呢?
+
+目前这个游戏还没有「出牌」的机制,我也不打算直接引入。前面提到相同颜色或者相同数字/字母的卡牌可以置换,那么 J、Q、K 触发其效果的方式就可以是:当 J、Q 或 K 被置换到场上时,触发其效果。
+
+- 当 J(骑士)被置换到场上,清场,包括 J 在内的所有牌都被放进弃牌堆;如果当局游戏还有玩家未行动,则从牌堆顶拿取三张新的牌放到场上。
+- 当 Q(王后)被置换到场上,玩家需要指定另一名玩家与自己换牌,双方将牌背朝上,不明牌地交换一张牌。由于玩家彼此清楚什么牌能给对方加分、什么牌能给对方扣分,换牌的过程就是一种心理博弈。
+- 当 K(国王)被置换到场上,玩家可以拿走场上的另外两张牌;加上置换时被换到手上的那张牌,玩家实际上拿走了场上所有的牌。如果当局游戏还有玩家未行动,则从牌堆顶拿取两张新的牌放到场上。
+
+这三张牌的效果我做了几次测试和改动,目前的规则应该是没有问题的。并且,通过几轮 playtest 得到的反馈,我发现 Q 的换牌玩法真的非常刺激,也让玩家之间有了更多的互动。
+
+噢对了,我是不是忘了还有 Ace 这张牌?如果直接把它当作数字 1,那未免也太无聊了。和德州扑克一样,我把它设置为一张「最大的牌」,但是它不计入玩家的分数,因为 Ace 不算一个数字,只不过,在其他需要比大小的情况下,Ace 是最大的。经过几轮游戏,我发现,Ace 是一张非常强的牌。如果你有一张 `♥️A`,那么场上几乎任何一张 `♥️` 都能被你直接吃掉。
+
+## 现在来看看 Joker
+
+Joker 牌只有两张,是一种稀缺资源。前面提到配置稀缺资源的方式是市场,但 Joker 的供给是不变的,需求则难以衡量。由于市场上只有一个地方(也就是牌堆)提供 Joker 牌,我们可以说 Joker 牌的市场是被垄断的,价格受单个卖者控制。
+
+好的,不扯经济学术语了。其实我的想法是,玩家可以通过「竞拍」的方法获得 Joker 牌。当场上的三张牌里有 Joker 时,玩家就多了一个行动选择——参与竞拍。玩家可以将一张牌背面朝上放在自己身前,表明自己有意愿竞拍这张 Joker。在一局游戏结束时,玩家翻开各自的筹码,最高出价者获得这张牌。他将筹码放在弃牌区,表明他已经支付了费用,其他玩家则收回自己的筹码。如果有相同的出价者,则竞拍失败,所有玩家收走自己的筹码,Joker 牌和其他牌一起被放到弃牌区。
+
+由于竞拍也算作一次行动,玩家放下筹码之后则不能行动。这也是玩家需要权衡取舍的点,因为不参与竞拍就意味着 Joker 牌一定会落入别人手中,而参与竞拍则意味着自己不能获得现在场上出现的牌,而且自己还不一定能赢。
+
+不过,由于玩家可以通过大牌来吃掉小牌,所以玩家很清楚谁拥有数字较大的牌。玩家在吃牌时也要注意,不能把最大的牌直接展示给其他玩家,这在竞拍时可能会不利于自己。这算是一种有趣的博弈。
+
+那么,支付高昂的价格换取的 Joker 牌究竟有什么用呢?说实话,我很纠结,因为 Joker 牌显然是很难获得的,无论怎么改规则,它都只有两张。然而,我不能让 Joker 牌变得太厉害,这样的话,拥有 Joker 牌的人似乎就滑坡式地主宰了游戏,其他玩家就没什么体验感了;但如果它太弱,又有谁会想要 Joker 牌呢?
+
+这种微妙的平衡有些难把握。我最终的做法是,让 Joker 牌变成一张带有增益效果的牌。当玩家的手牌中有 Joker,那么相同颜色的牌也可以给他加分!如果玩家的目标花色是 `♠️黑桃`,拥有 Joker 之后,手上的 `♣️梅花` 牌就从「无用」变成了「好东西」。
+
+如此一来,拥有 Joker 的玩家的确获得了优势,但他仍然需要靠自己获得更多的牌,他只是有了更多的选择而已。他的弱点也变得明显,其他玩家可以通过 J(骑士)的清场效果或者提前换走某些花色的牌,让他的日子变得不好过。拥有 Joker 牌的玩家的竞争对手也变多了,原本 `♠️黑桃` 玩家和 `♣️梅花` 玩家井水不犯河水,如今他们却需要争夺同样的资源。
+
+通过测试证明,拥有 Joker 牌的玩家也有很大可能输给没有 Joker 牌的玩家。
+
+## 点睛之笔也可能是游戏黑洞
+
+当晚想明白 Joker 的作用之后我就安心地上床睡觉了,没想到,在之后两天的 playtest 中,我发现的所有游戏逻辑漏洞,几乎都是因为 Joker 牌。
+
+1. 吃牌、骑士(J)清场和国王(K)抢牌之后,玩家需要补上新的牌,在补上的新牌当中就有可能出现 Joker。此时,由于前面的玩家已经行动过了,就没有资格参与竞拍,如此一来,强大的 Joker 牌就不得不落入后面的玩家手中。
+2. 在发牌阶段,玩家就有可能获得 Joker。
+3. 如果玩家只有两个人,那么人人都能获得 Joker,如此一来,Joker 的增益效果便没有意义,玩家也没必要争夺它。
+4. 国王(K)抢牌可以直接拿走 Joker 牌。
+5. 若后续的玩家使用骑士(J)清场,Joker 牌就会被直接放到弃牌区,那先前玩家的竞拍还有效吗?如果无效,对那位玩家来说也是不公平的,因为他失去了一次行动机会。
+
+作为程序员,修 Bug 是份内的事情,而且解决问题非常有成就感,即使是游戏设计的 Bug 也是如此。那就一条一条来看吧。
+
+1. 第一个问题的解决方案非常简单,引入一条新规则:当玩家行动导致新的牌被放到场上时,如果新牌中有 Joker,就需要将 Joker 放回牌堆并洗牌,然后重新拿出一张牌放到场上。
+2. 在发牌前,将 Joker 移出牌堆,发牌完成后再洗入牌堆。
+3. 第三个问题其实不必修复,可以允许玩家多次竞拍,为了避免自己的对手获得优势,玩家可以支付代价将第二张 Joker 牌也放入自己的手牌里,这并不会有额外增益;玩家也可以选择关注获取更多的资源,和对手公平竞争。
+4. 规定国王(K)的效果对 Joker 无效,当场上有 Joker 时,将 K 置换上场的玩家只能拿走其他的牌。
+5. 规定骑士(J)的效果对 Joker 无效,当场上有 Joker 时,将 J 置换上场只会使得其他的牌进入弃牌区。
+
+问题确实是修好了,但代价是引入了四条新的规则,这会让游戏变得复杂,增加了玩家的理解成本。实际上,如果完全去掉 Joker 牌,游戏也能很好地进行下去,Joker 牌的存在只是增加了一些新的玩法。
+
+不过,我并不打算阉割掉这一部分,因为没了 Joker 怎么还叫扑克牌呢?桌游毕竟很灵活,和不熟悉规则的新手一起玩的时候可以去掉 Joker 牌,玩过一两次之后再加入 Joker 也未尝不可。
+
+## 静观其变也有成本
+
+我在想,如果一局游戏中,场上没有很好的牌,甚至只有给自己减分的牌,那玩家是不是应该选择不行动呢?
+
+一方面来讲,静观其变本身就有成本。如果少了一次行动机会,对方的机会并不会减少。但这样的成本并不明显,甚至没有太多影响。那可不可以让不行动的成本变得更明显一些呢?也就是说,能不能加入一条规则,让玩家必须行动?
+
+先谈谈这样做有没有必要,我认为是有的,因为如果玩家可以放弃行动,就留了一条「苟活」的路。当环境不利于自己的时候,玩家可以选择不行动来规避损失,与其这样设计,不如给玩家多一个选择——玩家可以选择弃牌来跳过一轮。
+
+如此一来,静观其变就有了明显的成本。玩家不能一直不行动,因为手上的牌总会弃完的。玩家需要在两个行动选择之间做出决策,究竟是换一张给自己扣分的牌更不利,还是丢掉手上的某张牌更不利?
+
+不过,这也允许了玩家直接丢掉给自己扣分的牌,这似乎让游戏变得简单了。我曾经设想了两个方案来解决这个问题:
+
+1. 规定玩家只能丢掉与自己目标花色颜色相同的牌。
+2. 规定玩家只能在没有合法行动时弃牌,也就是说只能在没有办法拿牌或者置换卡牌的情况下弃牌。玩家弃牌时,其他玩家可以质疑,质疑成功与失败会有对应的奖惩。
+
+不过,我最终没有采用这两种方法中的任何一种,因为我发现即使允许玩家直接丢掉不利于自己的牌,游戏也不会变得非常容易。
+
+首先,丢牌并不利于自己的扩张,更多的牌意味着更多的换牌机会。其次,玩家的手上往往不会拥有很多牌,丢牌意味着手上的资源会变少,即使是当下会给自己扣分的牌,未来也可能会给自己换来 J、Q、K、A 这样的牌。再者,对玩家自己不利的牌也可能对别人不利,可以在皇后(Q)换牌时将它换给别人。
+
+总而言之,直接弃牌跳过行动的选项让游戏变得更有趣了,因为玩家需要决策和博弈的场合变多了。
+
+## 游戏结束的时机
+
+在设计上一个游戏《Warstro》的时候,我还没有「为游戏设置结束条件」的意识,现在我吸取到教训了。幸好,目前的游戏规则已经指向了一个非常明显的结束条件——当牌堆里的牌全部抽完时,游戏就结束了。
+
+除了玩家手上,游戏还有三个放置卡牌的区域:一是牌堆,二是玩家可获得的资源区,三是弃牌区。当场上需要新牌时,玩家总是从牌堆顶抽牌;当所有玩家都行动一次后,或者玩家需要弃牌时,牌会被放在弃牌区,弃牌区的牌不能收回来。
+
+以牌堆剩余卡牌数量计算游戏剩余时长的另一个好处是,玩家可以观察牌堆的高度来判断游戏还剩下多少时间。在游戏的后期,玩家就不应该做那些长远的打算了,比如,玩家不能指望在这个时候换一张 Ace 来帮自己吃牌,因为能吃到的牌本来就不多了。
+
+经过几轮 playtest,我发现将剩余牌堆高度作为行动时的考量因素,的确是一个非常有用的技巧,能让游戏变得好玩。
+
+另外,如果某个玩家一直弃牌跳过行动,手上没有牌,把自己玩死了,那他就没有机会行动了。如果所有人的手上都没有牌了,那么也算游戏结束。当然,这是非常罕见的局面。
+
+游戏一结束,就可以开始结算分数了。每个人将手牌摊开来算分,分高者胜。
+
+## 测试的意义
+
+测试之后我发现,一轮游戏的时间大概是 8~12 分钟,非常适合茶余饭后和朋友玩一玩,而且扑克牌这东西几乎随处可见。
+
+在测试的时候还有幸收到了玩家的直接反馈。其中一位玩家非常喜欢 J、Q、K 这三种效果牌,他说把 K 换上场然后把全部牌收走的时候真的非常爽,王后换牌的心理博弈也很有意思,需要揣摩对方会不会害自己,自己又要不要害对方。刚开始介绍规则的时候有些担心玩家会觉得理解规则有些困难,后来也有玩家主动反馈说玩过一遍之后就很清晰了,也给了我一些信心。
+
+自己作为玩家进行测试也很有意思。首先是能发现很多设计上的漏洞,比如前面提到的 Joker 牌引发的大大小小的问题,这些都需要实际测试过才能发现。其次,真正玩过几次之后,才能感受到这款游戏吸引人的地方在哪里。
+
+[^1]: [Ace - quword](https://www.quword.com/ciyuan/s/ace) \ No newline at end of file
diff --git a/content/posts/稻草人周刊-vol-16.md b/content/posts/稻草人周刊-vol-16.md
new file mode 100644
index 00000000..704ce0db
--- /dev/null
+++ b/content/posts/稻草人周刊-vol-16.md
@@ -0,0 +1,24 @@
+---
+title: 稻草人周刊 Vol.16
+subtitle:
+description:
+tags:
+date: 2025-02-10 22:23:01
+categories: 稻草人周刊
+draft: true
+toc: true
+---
+
+{{< callout "你正在阅读 稻草人周刊,一个读者的自述,每周一更新。" "🔖" >}}
+
+## 🏃 这周做了什么?
+
+## 🔍 有趣的话题
+
+## 💡 新知复盘
+
+## 🗣️ 碎碎念
+
+- 看到有人把 Scripting Language 翻译成「手稿语言」,我才意识到 Script 这个单词既是「手稿」又是「脚本」的意思。
+
+## 🐈 \ No newline at end of file