背景
2020年,那时候很喜欢玩英雄杀,当时游戏主要推广2V2模式,还需要ban pick武将,竞技性还是很强的。
普通人玩游戏不会记牌,但是如果你想赢,一定要记牌,普通的人会记某某装备牌出现过没有、杀闪药还有几张,牛逼的人会记剩下的牌的牌类型、花色、数字,例如他记得剩下的杀是黑桃A、黑桃J、红桃K,药是……。太牛逼了。
当时我要参加一个全国巅峰赛,所以就手写了一个记牌器,帮助我记牌堆中还剩什么牌:tool.hullqin.cn/yxs。
最终,也和队友取得了全国第八的成绩,还算满意了,最后一把BP运气太差,我们选的武将必被对方克制,因为不管选啥,武将堆中都有非常克制我们的武将,太难了。
功能介绍
英雄杀的牌,分为3种:「摸牌堆」、「场上的牌」、「弃牌堆」。
- 起初,所有牌都在「摸牌堆」,各种牌的初始数量设置为各个牌的总数。
- 允许将一些牌放置到「场上的牌」区域,例如你和队友的手牌、装备区的牌、判定区的牌。
- 允许将一些牌放置到「弃牌堆」,出的牌、判定牌、判定区的牌解除后,都会扔进弃牌堆。
- 允许用户随意设置牌的位置,例如移动「场上的牌」至「弃牌堆」、移动「弃牌堆」至「摸牌堆」等,以适应战场上的多变性。
- 允许洗牌。洗牌时,所有「弃牌堆」的牌进入「摸牌堆」。「场上的牌」在洗牌时,不会被清洗,依然留在场上。
- 允许清空。相当于重开一局游戏,把所有「弃牌堆」、「场上的牌」都移动至「摸牌堆」。
- 「场上的牌」可以随意拖动位置,是为了方便观察(如果把场上的牌跟手牌的顺序对应起来,就很方便了)。
整体界面如下:

开发
HTML和CSS
不再罗列了,可以直接检查源代码:tool.hullqin.cn/yxs。
全局变量定义
其中total标识所有牌的总数,using表示「场上的牌」的数量,used表示「弃牌堆」的数量,used_cards表示「弃牌堆」的所有牌,按序排列,using_cards表示「场上的牌」所有牌,按序排列。
另外PREFIX是所有静态资源的前缀(静态资源主要是图片)。
初始化
本段逻辑主要是为了实现这种效果:
- 通过图片展示牌的类型。
- 可以展示「摸牌堆」实时剩余多少张。
- 为了让「摸牌堆」剩多少张展示更生动形象,还加了绿色的百分比进度条。
- 通过
+1和-1按钮,可以操控:把「摸牌堆」的牌移动到「场上的牌」、或把「摸牌堆」的牌移动到「弃牌堆」。

添加一个「场上的牌」
删除一个「场上的牌」
添加一个「弃牌堆」的牌
删除一个「弃牌堆」的牌
备注
这是以前写的代码了,比较粗糙,但是至少实现了「英雄杀记牌器」的功能。感兴趣的可以去网站看一下,都是原生JS,没有混淆。
写在最后
我是HullQin,公众号线下聚会游戏的作者(欢迎关注公众号,联系我,交个朋友),转发本文前需获得作者HullQin授权。我独立开发了《联机桌游合集》,是个网页,可以很方便的跟朋友联机玩斗地主、五子棋等游戏,不收费无广告。还独立开发了《合成大西瓜重制版》。还开发了《Dice Crush》参加Game Jam 2022。喜欢可以关注我噢~我有空了会分享做游戏的相关技术,会在这2个专栏里分享:《教你做小游戏》、《极致用户体验》。
















