惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

MyScale Blog
MyScale Blog
博客园 - 司徒正美
A
About on SuperTechFans
Vercel News
Vercel News
H
Hackread – Cybersecurity News, Data Breaches, AI and More
爱范儿
爱范儿
I
InfoQ
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园_首页
Google DeepMind News
Google DeepMind News
T
Tailwind CSS Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
F
Fortinet All Blogs
S
SegmentFault 最新的问题
阮一峰的网络日志
阮一峰的网络日志
D
Docker
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
G
Google Developers Blog
Stack Overflow Blog
Stack Overflow Blog
M
MIT News - Artificial intelligence
Jina AI
Jina AI
H
Help Net Security
量子位
IT之家
IT之家

V2EX

我用 AI 写代码,但终端管理反而成了累赘——于是我做了 codux [调研] 各位在公司都用什么 ide 和 agent 写代码? 老运维 share 一个运维平台 看到有公司考核 token 指标,很好奇大家上个月的 AI 账单是多少 GLM-Coding 调用持续报错: z.ai 的 Lite 套餐几乎无法使用,官方 Pro/Max 是否稳定? 现在还有什么渠道可以稳定安全地使用 Claude 吗? 上海漕河泾内推,本组有 2 个 hc,一个后端,一个前端,预算都是 20k 左右,不打卡,氛围好 如果 V2EX 上有一组不永久保存聊天记录(比如只保存 7 天或者 24 小时)的聊天室,那么会开启哪些有用或者有趣的可能? gemini cli 貌似挂了,一直返回 403 第一次在自媒体上赚到钱 收集了最近在使用的低价 GPT, Gemini,邮箱等 AI 会员的小店合集 讨论个大实话:现在企业还在说 AI 编程提效 20%, 30%的,真的太落后,没用懂 AI。因为包括很多前沿公司,已经狂奔到提效 200%-500%的情况 [招聘][远程][币安] 前端/后端/QA/iOS/Android 至少 3 年以上经验 目前有大量 HC 欢迎投递 Chatgpt Pro 用量用不完的可以开这些设置 面试的时候好像遇到钓鱼了,给各位避个坑 cursor 年续费 22 号到期, 自动续费是否还是老的计次套餐呢 被两件破事毁掉的一下午,琐碎的内耗消磨人的精力 使用 Planet 存储 Codex 的会话或者重要信息 如果业务部门领导不要你开发功能,而是要求你教会它用 claude code 开发功能,你会怎么做? 分享一个 MacOS 接绿联 CM818 USB 转 DP 转接器使用感受 我的 HR 朋友 10 年老 Java ,非全大专,大家帮忙看看简历 开源了一个 AI 口语练习工具,音素级发音评分,完全免费可自部署 V2EX 上有哪些你觉得很有趣、印象深刻的妹纸? 字节为啥不出个国内版 Vercel? 有在大马的朋友吗? 问个运营商问题 你们在有领导的公司大群发过的最大胆的消息是什么 公司裁员,目前没有工作。想试试摆摊,做一个移动鲜啤打酒车 我的硬盘 Memblaze Pblaze 5 Linux 下不识别,给 Linux 内核提交了补丁, AI 说有望被合并 只有我一个人觉得 codex 不好用?
做了第一款 iOS 小游戏:用 SwiftUI 写了个水墨麻将连连看,...
hashtome · 2026-05-23 · via V2EX

各位佬,大家好。

最近把第一款 iOS 小游戏上架了,叫 Sumi Mahjong Solitaire 。中文我自己叫它「禅艺麻将 / 水墨连连看」。它不是四人麻将,是麻将牌面的连连看 / Mahjong Solitaire:点两张相同的自由牌,如果能连起来就消掉。

App Store:

https://apps.apple.com/us/app/sumi-mahjong-solitaire/id6770823912?uo=4

这次做它其实不是想一上来做一个特别大的游戏,而是想完整跑一遍 iPhone 小游戏从开发、性能优化、内购、审核到上架的流程。因为是第一款游戏,我刻意没有选特别大的项目,也没有用 Unity 、SpriteKit 、Metal 或其他游戏框架,主实现就是 Swift / SwiftUI / SwiftData / StoreKit 2 ,加一些 Apple 系统框架自己硬写。

做之前觉得「麻将连连看」规则很简单,做完才发现游戏里的简单经常是假象。

比如牌面资源层是完整 144 张麻将牌,但手机竖屏上如果一味塞满,触控会小、画面会挤、玩家也更容易疲劳。后来默认局面反而往更舒服的牌数调,把精力放在可消对子数量、布局密度、死局重排和提示可信度上。

算法这块也比我想象中有意思。不能只是随机撒牌,因为很容易开局就无聊,或者中途卡死。最后做法更像「约束下的随机」:布局要满足堆叠和遮挡规则,开局要有足够但不过量的可选对子,还要用 Solver 去验证能不能继续玩。一个看起来很轻的小游戏,最后还是会回到核心算法和手感调参。

视觉和性能也踩了不少坑。最早我用代码实时画牌体、厚度、阴影和牌面,效果可控,但游戏里牌一多,任何一处重复绘制都会开始变贵。后面就上了烘焙流程:牌面先按图集裁切,再把代码画出来的牌体、厚度、材质烘成完整 PNG ,运行时直接用图片,帧率和稳定性会舒服很多。

音效和一些小特效也基本是自己做的。消除粒子、碰撞感、落叶飘动这些不是接现成物理引擎,而是用曲线、随机数和一些公式去调。落叶一开始只是想做氛围,后来发现它随着时间落下来会轻微遮挡棋盘,反而变成一种自然的难度;所以游戏里保留了扫叶次数,让它既是装饰也是一点玩法压力。

当前功能大概是:

  • 无广告、无账号、无第三方分析 SDK
  • 离线可玩,本地保存进度和设置
  • 水墨主题免费,核心玩法不锁
  • 提示、撤销、洗牌、落叶清扫
  • 背景音乐、音效和触觉反馈可开关
  • 一个可选内购:一次性解锁全部高级主题,不是订阅

也坦白说现在还有不少可以继续打磨的地方:

  • 玩法平衡还可以继续调,不同人对「太简单 / 太难」的阈值差很多
  • 牌面、落叶、粒子这些视觉效果在不同 iPhone 尺寸上还值得继续看
  • SwiftUI 做游戏挺有意思,但动画和性能边界需要一直盯
  • 这个 App 更像一个安静的小棋盘,不是那种有闯关、体力、排行榜、活动弹窗的手游

截图放两张,图片放在 GitHub Pages 上:

主玩法截图: https://hooosberg.github.io/Sumi-Mahjong/posters/zh-Hans/01.webp

主题截图: https://hooosberg.github.io/Sumi-Mahjong/posters/zh-Hans/03.webp 这次放 50 个内购码,想换一些真实反馈。

注意:下面这些是 Unlock All Themes 的内购 Offer Code ,不是 App 下载码。这个坑我之前在另一个 App 上踩过一次,苹果后台把外层 Promo Codes 和内购 Offer Codes 分得特别绕,真的很容易点错。这次是在 In-App Purchases 里的内购商品下面生成的。

兑换方式:

  1. iPhone 打开 App Store
  2. 点右上角头像
  3. 选择「兑换礼品卡或代码」
  4. 粘贴下面任意一个兑换码

如果兑换成功,麻烦回复一下用了哪个编号,方便后面的人少试重复码。

01. FW8NR6KMT4YY4WJT7W
02. TEXK4A63A4FKRH6F3N
03. FPKJAWXJX368KWMKYK
04. 66M4KAA4HJT8TMP7FJ
05. TNP7ERJWXPRN878K33
06. N7HW4PWXW3NMFJWKLA
07. YEKXELENPMFYA34K4Y
08. W8RFHXN7R7AK4LRMEE
09. EJKHRTYYF7FW6T4E4N
10. T8743LLPNNFW7X3HR8
11. 67LN47348M6MW6R6EK
12. NWK4NT6JAEHNF347RP
13. XNEL8MMYKFTLEYJRF8
14. WE8EYK7HE6HE3WLPXY
15. 6E47AKXPJM3HRAMFAH
16. HEMJ67E78RL8XX8N8K
17. KF3EWEX33JWAN7FK6X
18. T7RXMWWEPMEAH4EL67
19. 3LPPR3LAWJJ7YE43RW
20. XKLL63EJPTA8PJFW33
21. 6AT7NEY6HX3KW3TLXJ
22. L8HY7HE3ALAXW8TLWF
23. PH3A8WJJHLTW3X6HKK
24. MTE4KA8736TNXFN4L3
25. E846MJMLNA8M7WKHTP
26. NTT36RTJA6E34WLA4M
27. HYJAFXTEYFRF76KH7T
28. FJJA63NNPEF8MH6Y3A
29. L6N7JHKFM8Y6JNKT4L
30. PPL8XANNRMJKP4RFEE
31. M4JF3YHMKAXK8JKRN6
32. 6J7RE7HJYF3E68F733
33. LNE8NXM86XMWFP6X8F
34. T67NJM33K37W3RPNME
35. LHRXWHFLKJLAKPKTLE
36. AL4EETX6N6KK7E3M63
37. KLFH7P8X8KANH7WH6R
38. WTTAH84LA3XRWWLT3J
39. HK6YAH6E6MLPXH6XFL
40. 46HM4JF3K6AJ83T3PL
41. AHNJH8KN7FMWW4EKYP
42. LAHKY84HE7MH6HFJFY
43. JHYYWY6RPPRRHJKR46
44. RHKFR67KKH78PLKAMM
45. NRX3MTMLM8Y7PK8A3F
46. E8TN3XXJ3FMRXEXHK4
47. 34Y4HNAWLH3ENPM3P8
48. J8NYRFF7TMTMP8RPLN
49. K4WPPPE8JPRRY3ENWP
50. AYAX6MLJP776HT3FHN

特别想听大家吐槽:

  • 玩法是不是太简单 / 太难
  • 牌面和主题有没有看不清的地方
  • 落叶到底是有趣,还是烦人
  • SwiftUI 写小游戏这条路有没有你们觉得很蠢或很妙的地方

谢谢各位佬。