爱意满满的作品展示区。
hashtome

做了第一款 iOS 小游戏:用 SwiftUI 写了个水墨麻将连连看,送 50 个内购码

  •  
  •   hashtome · 17h 37m ago · 1678 views

    各位佬,大家好。

    最近把第一款 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 写小游戏这条路有没有你们觉得很蠢或很妙的地方

    谢谢各位佬。

    33 replies    2026-05-24 00:30:58 +08:00
    Soonan
        1
    Soonan  
       17h 28m ago
    不能兑换:提示需要 iOS16.3 及以上,我都 26.5 了
    x4gz
        2
    x4gz  
       17h 20m ago via iPhone
    羊了个羊麻将版吗
    hashtome
        3
    hashtome  
    OP
       17h 10m ago via iPhone
    @Soonan 美区看看
    andykuen959595
        4
    andykuen959595  
       16h 58m ago   ❤️ 1
    FW8NR6KMT4YY4WJT7W 已兑换 谢谢
    dgmgso
        5
    dgmgso  
       16h 51m ago
    6AT7NEY6HX3KW3TLXJ 已兑换 谢谢
    83f420984
        6
    83f420984  
       16h 46m ago
    KF3EWEX33JWAN7FK6X 已兑换 谢谢
    sunshy
        7
    sunshy  
       16h 34m ago
    感谢,01 已兑换
    andykuen959595
        8
    andykuen959595  
       16h 32m ago
    1 、玩了几局 确实简单了
    2 、落叶倒还好 不怎么影响
    3 、是否可以多加几个主题
    hashtome
        9
    hashtome  
    OP
       16h 25m ago   ❤️ 1
    @andykuen959595 第一版本我主要做的实验,快速做出来验证可行,如果整体反馈不错,皮肤做他 100 个
    InDom
        10
    InDom  
       15h 34m ago
    10 T8743LLPNNFW7X3HR8 已用
    Wataru
        11
    Wataru  
       15h 24m ago via iPhone
    36 已使用
    3231012
        12
    3231012  
       14h 25m ago
    WTTAH84LA3XRWWLT3J
    已兑,谢谢
    FirerWire3
        13
    FirerWire3  
       13h 56m ago
    25 已使用
    youcandoit
        14
    youcandoit  
       13h 39m ago
    31 已兑换,玩了一把,很解压,作者牛逼
    lockheart
        15
    lockheart  
       13h 37m ago via iPhone
    66M4KAA4HJT8TMP7FJ 已用
    as9567585
        16
    as9567585  
       13h 37m ago
    问个问题,我在 mac 上浏览器打开 apps.apple.com/us ,被强制重定向到了 apps.apple.com/cn ,有什么好办法处理吗?除了开代理
    FirerWire3
        17
    FirerWire3  
       13h 28m ago
    通关用时对不上,时间越来越长,实际并没有使用这么长的实践,玩了几把,最后一把到了 27 分钟
    iao
        18
    iao  
       13h 9m ago
    33 已兑换,感觉玩法太简单了。
    andykuen959595
        19
    andykuen959595  
       13h 8m ago
    @FirerWire3 #17 是滴 这个时间有点问题
    hashtome
        20
    hashtome  
    OP
       11h 28m ago
    @as9567585 这个是你的账号本身不是美区的话就会前行跳转的
    hashtome
        21
    hashtome  
    OP
       11h 28m ago
    @FirerWire3 谢谢收到
    twinsdestiny
        22
    twinsdestiny  
       10h 55m ago
    45 已兑换
    ARFARFARF
        23
    ARFARFARF  
       10h 54m ago
    50. AYAX6MLJP776HT3FHN 已兑换,让我想起小时候家里大人不打麻将的时候,带我把麻将洗好平铺起来玩连连看的情形
    hashtome
        24
    hashtome  
    OP
       10h 46m ago
    @ARFARFARF 嘿嘿 我打麻将不太好,但是我就喜欢堆麻将,咱俩一样的爱好
    fromzero
        25
    fromzero  
       10h 22m ago via iPhone
    提示的青色外框不太能看得清楚。能不能改成醒目的红色
    hashtome
        26
    hashtome  
    OP
       10h 16m ago
    @fromzero 收到,下一版的修改确实有点浅
    whiteleopard520
        27
    whiteleopard520  
       9h 32m ago via iPhone
    没有了,能求个码吗,谢谢
    MjYxOTgxNzU3QHFxLmNvbQ==
    235299862
        28
    235299862  
       9h 23m ago   ❤️ 1
    39. HK6YAH6E6MLPXH6XFL [已使用]
    赞,老哥做的很不错。几点个人小建议:
    1 、两张牌消除的音效稍微有点长
    2 、落叶落地时会位移,消除落叶有个风声之类的音效更完美点
    3 、无可消除麻将时自动重组没有提示
    4 、全部消除完成时的过渡动画太快了
    5 、个人记录的时长没看明白,好像不是纯游戏时间
    6 、不同主题只有背景和麻将画面不同,落叶、音效都没变化
    hashtome
        29
    hashtome  
    OP
       9h 18m ago
    @235299862 收到大佬的建议,我小本本记录,下次更新的问题就有了,我自己开发的真心看不出问题,自己家的孩子真的哪里都好 哈哈
    hashtome
        30
    hashtome  
    OP
       9h 16m ago
    @whiteleopard520 RXWPRWF8WAJ73PHRNP 记得给我写个反馈意见哈,如果项目有人气我就知道怎么开发了,我第一次做游戏
    Soonan
        31
    Soonan  
       5h 44m ago
    @hashtome #3 后来可以了,谢谢,不知道是哪里出了问题。
    tiantangtianma
        32
    tiantangtianma  
       5h 5m ago via Android
    怎么感觉和安卓上的 vita mahjong 基本一样?
    dhc90
        33
    dhc90  
       3h 27m ago
    老哥好高产
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   904 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 65ms · UTC 19:58 · PVG 03:58 · LAX 12:58 · JFK 15:58
    ♥ Do have faith in what you're doing.