Everything you care about in one place

Follow feeds: blogs, news, RSS and more. An effortless way to read and digest content of your choice.

Get Feeder

blog.codingnow.com

云风的 BLOG

Get the latest updates from 云风的 BLOG directly as they happen.

Follow now 106 followers

Latest posts

Last updated 7 days ago

介绍几款单人桌游

7 days ago

上个月我花了不少时间在 dotAge 这个游戏中。我很喜欢这种通过精算规划应对确定风险的感觉。由于 dotAge 有很强的欧式桌游的设计感,所以我在桌游中尝试了一些有类似设计元素的单人游戏。 我感觉体验比较接近的有 Voidfall (2023) 和 Spirit Island (2017)...

和 AI 聊游戏设计

16 days ago

最近一段时间和 AI 聊游戏设计比较多。我主要用的是 google 首页上的 AI 模式,也试过 twitter 上的 grok 。 去年也和朋友聊过很多,但对理清楚自己的想法帮助有限。因为和人聊容易陷入不断的细节解释当中,一些天马行空的想法更容易被质疑,一旦陷入辩论就不太容易跳出来。而且每个人的时间并不固定,很容易造成时间和精力的浪费。和...

Skynet 升级到 Lua 5.5.0

about 1 month ago

Lua 5.5.0 已经正式发布。所以,skynet 的 Lua 版本也随之升级。 skynet 维护了一份修改版的 Lua ,允许在多个虚拟机之间共享函数原型。这可以节省初始化 Lua 服务的时间,减少内存占用。...

带可可学数学

about 2 months ago

可可三年级,前段老师说她数学成绩不好,需要在家加强一下。 这段时间我每天晚上给她讲一点点数学,都是课本上的内容,然后我再稍稍发挥一下。几次之后,我发现最大的问题是她觉得数学很无聊。 她似乎比较抗拒学新的知识,更喜欢用熟悉的方法。去年我发现她计算能力有问题,每天给她做加减法练习,总算不再用更早年我教她的 +1 法算加法了:即计算 7+8 的时候,算 8 次 +1 ,也就是数数。二年级学了乘法,乘法表也背了,但现在做应用题,本该用乘法的场合,她还是习惯连续算加法,一旦乘数太大就会出错。要用除法的时候就更混乱了,并不是用减法,而是靠猜测来试。大脑里完全没有建立乘除的概念。乘法表更像是独立的有背诵任务的诗词,还没古诗那么有趣。 我说:数学其实是这个世界上最有趣的东西。...

最近玩的几款卡牌构筑类电子游戏

about 2 months ago

最近玩了几个卡牌构筑类的电子游戏,觉得颇为有趣,值得记录一下。 首先是 Decktamer(训牌师)。我玩了十几个小时,把初级难度通关了。 它的新设计是用卡牌构筑的形式重新做了一个宝可梦。和杀戮尖塔开创的战斗结束后抽卡,用战斗胜利的奖励钱买卡、洗卡、升级的模式不同。它的战斗卡是不需要洗的,战斗中死亡就直接消失;新卡片是在战斗中捕获对手获得。加强战斗卡的方式主要是用道具卡杂交战斗卡:从一张战斗卡上抽取需要的技能,加到另一张战斗卡上。 战斗过程更像是万智牌那种更传统的卡牌战斗模式:摆放战斗卡都场上,再由上场的卡片发动能力。这种传统战斗模式不同,发动战斗技能没有额外的资源消耗,而修改成每回合必然从卡片上所有技能中选择一个。这可以避免给同一张卡片合成太多能力造成的不平衡。更多能力往往只是增加了容错性,可以应付更多场景。 玩家卡牌被分成了???个牌堆:战斗卡堆和道具卡堆。这种双卡堆的模式最近的卡牌构筑游戏中比较常见,下面还会再提到。不过这里道具卡堆并不是抽牌堆,更像是一个道具背包,可以随时使用。 我在简单难度通关的感受是:只有最终 boss 有挑战。而这种挑战更像是一个谜题。所以第一次面对最终 boss 我没有一次通过。而是熟悉了它的技能,第二次刻意针对这些技能来升级牌组,这样才通关。整个游戏给我的感觉是,解密成分更重一些,也就是该如何养卡才能解决对手。所以游戏里(简单模式下)有无限次的 undo...

欧陆风云5的游玩笔记

2 months ago

最近一个月共玩了 270 小时的欧陆风云5 ,这两天打算停下来。最近在游戏后期打大战役时,交互已经卡得不行。我已经是 i9-14900K 的 CPU ,估计升级硬件已经无法解决这个问题,只能等版本更新优化了。 ps. 其实只要把游戏暂停下来立刻就不卡了。虽然我直到这个游戏需要的计算量非常大,但是卡交互操作肯定是实现的不对。因为这并不是因为渲染负荷造成的卡顿,可以让游戏时间流逝更慢一些,也不应该让鼠标点击后的界面弹出时间变长。 在暂置游戏前,我先把一些关于游戏设计上的理解先记录下来。也是对上一篇的补充。 在最初几十小时的游戏时间里,我一直想确认游戏经济系统的基础逻辑。和很多类似策略游戏不同,欧陆风云5...

嵌入主线程消息循环的任务调度器

2 months ago

最近在网友协助下把 soluna port 到包括 wasm 在内的非 windows 平台。其间遇到很多难题,大多是多线程环境的问题。因为 soluna 的根基就是基于 ltask 的多线程调度器,如果用单线程实现它,整个项目的意义就几乎不存在,所以它是把项目维护下去必须解决的问题。...

欧陆风云 5 的经济系统

3 months ago

很早从“舅舅”那里拿到了《欧陆风云 5》的试玩版。因为开发期的缘故,更新版本后需要重玩,所以一开始只是陆陆续续玩了十几个小时。前段时间从阳朔攀岩回来,据说已经是发售前最后一版了,便投入精力好好玩了 50 小时,感觉非常好。 我没有玩过这个系列的前作,但有 800 小时《群星》的经验,还有维多利亚 2/3 以及十字军之王 2/3 的近百小时游戏时间,对 P...

关于桌游设计大赛的介绍

4 months ago

这一篇是前几个月研究桌游规则期间的另一篇小结。因为最近两个多月都在制作 Deep Future 的数字版,没空整理笔记。现在闲下来,汇总整理这么一篇记录。 今年夏天,我迷上了 DIY 类型的桌游。这类桌游最显设计灵感。商业桌游固然被打磨的更好,但设计/制作周期也更长。通常,规则也更复杂,游戏时间更长。我经常买到喜欢的游戏找不到人开。阅读和理解游戏规则也是颇花精力的事情。所以,我近年更倾向于有单人模式的游戏。这样至少学会了规则就能开始玩。但为单人游玩的商业桌游并不算多(不太好卖),而我对多年前玩过的几款 PnP (打印出来即可玩)类单人桌游印象颇为深刻:比如 Delve 和同期的 Utopia...

深远未来开发总结

4 months ago

桌游 Deep Future(深远未来)开发搞一段落,我为它创建了一个 itch.io 的页面 发布第一个试玩版本。接下来的 bugfix 会在 github 继续,等积累一定更新后再发布下一个小版本。 这是一个兴趣驱动的项目。正如上一篇 blog...

有惊无险的一次网站系统升级

5 months ago

好消息是:这个 blog 终于是 UTF-8 编码了。前些年老有人问我能不能把 RSS 输出改成 UTF-8 的,很多 RSS 阅读器不支持 gbk...

立即模式下的鼠标交互处理

5 months ago

最近在做游戏时,发现在立即模式下鼠标的交互部分实现的比较混乱。 在做引擎时,我简单留出了鼠标相关事件的 callback 接口。一开始写游戏时,也就是对付一下写了几行代码,大致可以工作。做了大半个月后,随着交互界面越来越复杂,那些应付用的代码明显不堪重负。有越来越多的边界情况无法正确处理。等到最近想在交互上加一种长按鼠标确认的操作,发现不能再这样对付下去了,就花了一晚上重构了所有和鼠标交互相关的代码。 之前的问题出在哪里? 如果从系统的鼠标消息出发,我们可以从引擎获得鼠标移动、按下、抬起等事件。或许还可以利用系统发送来的点击、双击等等复合事件,但我选择自己用按下和抬起来判断这些。但是,消息机制本身和立即模式是相悖的。采用立即模式编写游戏业务以及交互,获得当下的状态是最自然的,而“消息”不是状态。它是一个队列:在每个游戏帧中,可能没有消息,也可能有多条消息。如果只是处理鼠标的位置和按键状态,那么保留最后一个状态也可以;但是,像点击这种行为,明显不是瞬间的状态,而是过去一段时间的状态叠加后的事件。 除了“点击”,必须处理的还有“焦点”,或叫“悬停”。一个交互元素获得焦点、失去焦点都不是瞬间状态,它们取决于鼠标过去的位置、鼠标位置下交互元素在屏幕上的位置。即使鼠标不移动,但交互元素在屏幕上动了,或消失了、出现了,都可能引起“焦点”的改变。 所以在立即模式下,最好我们可以将点击和焦点这样的“事件”变成某种“状态”,然后统一用立即模式处理。否则混用立即模式的状态判断和消息队列轮询就会比较混乱。 首先,我们应该把系统传来的鼠标消息在帧间累积起来,然后在每个游戏帧发送出去,而不应该在消息抵达的时候立即处理。这样做可以让游戏代码严格的按帧执行,帧间不会触发任何额外的 callback 。所以,在立即模式下,底层传来的不是鼠标移动消息,而是每帧鼠标的位置。即使没有更新位置,也同样会刷新一次鼠标位置信息。如果两帧之间有多个鼠标移动消息,位置当然只需要记录最后一次,游戏可以忽略中间的轨迹(除非以后要做鼠标手势,那再来改进)。 但鼠标按键则不可只保留多个按压抬起事件的最后一个。比如之前如果鼠标处于按下状态、而在两帧之间鼠标按键抬起又按下,如果只取最后的按键状态,就没有改变(都是按下状态),但操作者实际点击了一次鼠标。这个点击操作就被忽略掉了,这是不行的。...