IT之家 5 月 31 日消息,国内首家专注于电循环液体运载火箭航天运输系统创建及运营的科技公司“星火空间”今日发文称, 目前正在研发的“进化一号”电循环液体运载火箭,是我国第一款电循环液体运载火箭 。 据介绍, “进化一号”也是目前全球运载能力最大的电循环液体运载火箭 ,将用于为卫星发射、小型星座组网、大型星座补网客户提供“太空特惠快车”发射服务。 IT之家查询获悉,“进化一号”是国内首款、全球最大的电循环液体运载火箭,全箭总长 27.5 米,箭体直径 2.25 米,起飞推力 90 吨,LEO 运载能力 1.5 吨,SSO 运载能力 1 吨。 火箭动力系统采用 9+1 发动机构型 ,配备由星火空间自主研制的 10 吨级电循环液体火箭发动机“烈焰二号”(LY-2),通过电动泵代替传统涡轮泵驱动推进剂供应。 今年 3 月,星火空间完成了“烈焰二号”电循环火箭发动机首次全系统试车,取得圆满成功,验证了电动泵循环技术路线在国产发动机上的可行性,验证了系统设计的正确性及各组件间的协调匹配性,并刷新了世界最大的电循环火箭发动机推力上限。官方表示, “烈焰二号”也是世界最大电循环火箭发动机 。
TripMap 旅行地图终于上线 App Store 了 历时一周开发、一周上架,中间两次因为内购相关问题被拒,只能重新修改再提交。好在最后还是成功上线 App Store 了。 App 的主要功能 首页地图照片 打开 App 后,可以直接在地图上查看所有已拍摄照片的位置,也可以按月份筛选某个时间段拍摄的照片。 手动创建旅游相册 可以在 App 内创建专属于旅行的相册,用来整理每一次出行的照片。 地图范围解锁 根据去过的地点解锁地图范围,记录自己的旅行足迹。 为什么要开发这个 App ? 现在苹果相册进入地图的步骤有点麻烦,需要先进入照片详情,才能查看照片对应的位置。 虽然这是一个比较小众的功能,但从我自己的使用习惯出发,每次旅游回来后,我都很想直观地看看自己去了哪些地方,所以就把这个功能直接做到了首页。 为什么还要做旅游相册? 创建相册这个功能,苹果自带相册其实已经可以实现。 但苹果相册里的相册太多了,可能会有各种不同用途的相册,整体看起来比较杂。我希望有一个更纯粹的地方,只用来存放和整理旅游相关的照片。 所以在 TripMap 里,可以创建只属于旅行的相册。 关于地图解锁功能 如果只有照片地图和旅游相册这两个功能,App 可能会显得有些单调。 刚好我自己也很喜欢这种“解锁记录类”的功能,所以参考了一些足迹类 App ,也加入了地点解锁功能。 不过由于地图精度问题不太好处理,最后选择了点状地图的形式。这样整体视觉上会更加简洁。 当然,点状地图本身没有太高精度,解锁范围也只能图一乐。 App Store 链接 TripMap 旅行地图 最近可能会被下架,还在备案中。
各位佬,大家好。 最近把第一款 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 里的内购商品下面生成的。 兑换方式: iPhone 打开 App Store 点右上角头像 选择「兑换礼品卡或代码」 粘贴下面任意一个兑换码 如果兑换成功,麻烦回复一下用了哪个编号,方便后面的人少试重复码。 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 写小游戏这条路有没有你们觉得很蠢或很妙的地方 谢谢各位佬。
各位佬,大家好。 最近把第一款 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 里的内购商品下面生成的。 兑换方式: iPhone 打开 App Store 点右上角头像 选择「兑换礼品卡或代码」 粘贴下面任意一个兑换码 如果兑换成功,麻烦回复一下用了哪个编号,方便后面的人少试重复码。 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 写小游戏这条路有没有你们觉得很蠢或很妙的地方 谢谢各位佬。
各位佬,大家好。 最近把第一款 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 里的内购商品下面生成的。 兑换方式: iPhone 打开 App Store 点右上角头像 选择「兑换礼品卡或代码」 粘贴下面任意一个兑换码 如果兑换成功,麻烦回复一下用了哪个编号,方便后面的人少试重复码。 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 写小游戏这条路有没有你们觉得很蠢或很妙的地方 谢谢各位佬。
各位佬,大家好。 最近把第一款 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 里的内购商品下面生成的。 兑换方式: iPhone 打开 App Store 点右上角头像 选择「兑换礼品卡或代码」 粘贴下面任意一个兑换码 如果兑换成功,麻烦回复一下用了哪个编号,方便后面的人少试重复码。 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 写小游戏这条路有没有你们觉得很蠢或很妙的地方 谢谢各位佬。
各位佬,大家好。 最近把第一款 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 里的内购商品下面生成的。 兑换方式: iPhone 打开 App Store 点右上角头像 选择「兑换礼品卡或代码」 粘贴下面任意一个兑换码 如果兑换成功,麻烦回复一下用了哪个编号,方便后面的人少试重复码。 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 写小游戏这条路有没有你们觉得很蠢或很妙的地方 谢谢各位佬。
各位佬,大家好。 最近把第一款 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 里的内购商品下面生成的。 兑换方式: iPhone 打开 App Store 点右上角头像 选择「兑换礼品卡或代码」 粘贴下面任意一个兑换码 如果兑换成功,麻烦回复一下用了哪个编号,方便后面的人少试重复码。 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 写小游戏这条路有没有你们觉得很蠢或很妙的地方 谢谢各位佬。
各位佬,大家好。 最近把第一款 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 里的内购商品下面生成的。 兑换方式: iPhone 打开 App Store 点右上角头像 选择「兑换礼品卡或代码」 粘贴下面任意一个兑换码 如果兑换成功,麻烦回复一下用了哪个编号,方便后面的人少试重复码。 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 写小游戏这条路有没有你们觉得很蠢或很妙的地方 谢谢各位佬。
各位佬,大家好。 最近把第一款 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 里的内购商品下面生成的。 兑换方式: iPhone 打开 App Store 点右上角头像 选择「兑换礼品卡或代码」 粘贴下面任意一个兑换码 如果兑换成功,麻烦回复一下用了哪个编号,方便后面的人少试重复码。 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 写小游戏这条路有没有你们觉得很蠢或很妙的地方 谢谢各位佬。
各位佬,大家好。 最近把第一款 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 里的内购商品下面生成的。 兑换方式: iPhone 打开 App Store 点右上角头像 选择「兑换礼品卡或代码」 粘贴下面任意一个兑换码 如果兑换成功,麻烦回复一下用了哪个编号,方便后面的人少试重复码。 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 写小游戏这条路有没有你们觉得很蠢或很妙的地方 谢谢各位佬。
各位佬,大家好。 最近把第一款 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 里的内购商品下面生成的。 兑换方式: iPhone 打开 App Store 点右上角头像 选择「兑换礼品卡或代码」 粘贴下面任意一个兑换码 如果兑换成功,麻烦回复一下用了哪个编号,方便后面的人少试重复码。 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 写小游戏这条路有没有你们觉得很蠢或很妙的地方 谢谢各位佬。
各位佬,大家好。 最近把第一款 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 里的内购商品下面生成的。 兑换方式: iPhone 打开 App Store 点右上角头像 选择「兑换礼品卡或代码」 粘贴下面任意一个兑换码 如果兑换成功,麻烦回复一下用了哪个编号,方便后面的人少试重复码。 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 写小游戏这条路有没有你们觉得很蠢或很妙的地方 谢谢各位佬。
各位佬,大家好。 最近把第一款 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 里的内购商品下面生成的。 兑换方式: iPhone 打开 App Store 点右上角头像 选择「兑换礼品卡或代码」 粘贴下面任意一个兑换码 如果兑换成功,麻烦回复一下用了哪个编号,方便后面的人少试重复码。 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 写小游戏这条路有没有你们觉得很蠢或很妙的地方 谢谢各位佬。
各位佬,大家好。 最近把第一款 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 里的内购商品下面生成的。 兑换方式: iPhone 打开 App Store 点右上角头像 选择「兑换礼品卡或代码」 粘贴下面任意一个兑换码 如果兑换成功,麻烦回复一下用了哪个编号,方便后面的人少试重复码。 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 写小游戏这条路有没有你们觉得很蠢或很妙的地方 谢谢各位佬。
各位佬,大家好。 最近把第一款 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 里的内购商品下面生成的。 兑换方式: iPhone 打开 App Store 点右上角头像 选择「兑换礼品卡或代码」 粘贴下面任意一个兑换码 如果兑换成功,麻烦回复一下用了哪个编号,方便后面的人少试重复码。 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 写小游戏这条路有没有你们觉得很蠢或很妙的地方 谢谢各位佬。
各位佬,大家好。 最近把第一款 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 里的内购商品下面生成的。 兑换方式: iPhone 打开 App Store 点右上角头像 选择「兑换礼品卡或代码」 粘贴下面任意一个兑换码 如果兑换成功,麻烦回复一下用了哪个编号,方便后面的人少试重复码。 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 写小游戏这条路有没有你们觉得很蠢或很妙的地方 谢谢各位佬。
各位佬,大家好。 最近把第一款 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 更像一个安静的小棋盘,不是那种有闯关、体力、排行榜、活动弹窗的手游 截图放两张: 这次放 50 个内购码,想换一些真实反馈。 注意:下面这些是 Unlock All Themes 的内购 Offer Code ,不是 App 下载码。这个坑我之前在另一个 App 上踩过一次,苹果后台把外层 Promo Codes 和内购 Offer Codes 分得特别绕,真的很容易点错。这次是在 In-App Purchases 里的内购商品下面生成的。 兑换方式: iPhone 打开 App Store 点右上角头像 选择「兑换礼品卡或代码」 粘贴下面任意一个兑换码 如果兑换成功,麻烦回复一下用了哪个编号,方便后面的人少试重复码。 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 写小游戏这条路有没有你们觉得很蠢或很妙的地方 谢谢各位佬。
一直想在 App Store 上发布自己的 app ,奈何编程水平有限,心有余而力不足。 但是心里还是一直想开发 app 的,24 年的毕业题目也是选择的开发一款 ios app ,说是开发,但其实就是照着 YouTube 上的视频一个字母一个字母得手敲出了第一个项目,也清楚没有上架 App Store 的可能(是一款 ios 音乐播放器),只在手机上测试运行过,当初看到 app 第一次安装到自己的手机上的时候心情还是很激动的。 那时候用 ChatGPT 还不能控制整个项目文件,只能网页问答或者是给它发几个代码文件,返回的改动还要自己到文件里修改。纯靠它来开发一款可以上架的好用的 app 对我来说不太可能,于是又将这个想法搁置。(在这期间出过一个项目说是可以生成一整个 ios 项目,用过之后也只是有几个页面,整体不可用) 然后就是去年 cursor 上线了,让我看到了一点上线 app 的可能,接入的好像是 GPT4.X 。对比之前已经很能打了,但是做出来的 app 也是差强人意。遂放弃。 最近上班也接触不到 ai ,但是 claude 和 codex 的信息看到得越来越多,工作也没什么事情,vibe coding 的想法越发强烈。 现在做的这个 app 的想法是怎么来的: 1.五一去东京旅游,每天想看看自己去了哪些地方,拍了哪些照片,对我来说最方便的办法就是———打开相册,点开照片,打开详细信息会显示照片的拍摄位置,再点进去会显示拍过的所有照片的位置。有时候还是觉得不太方便。 2.每次旅游结束后我会把相册中这次旅游拍的照片整理到一个相册中。但是相册中还有别的不同类型的相册,感觉有点乱。 3.挺喜欢 flighty 可以分享出一张照片,可以显示飞过的航线。每次旅游发不出一张总结性的图片,于是也自己写一个。 所有就有了 TripMap 。在地图上显示图片,在 app 里创建旅游相册,还可以显示解锁的范围,设计上也花了不少心思 功能相对来说还是简单了很多,但是开发记账,记事本...这些类别的 app 太多了,也算是解锁一个小众 app 。
一直想在 App Store 上发布自己的 app ,奈何编程水平有限,心有余而力不足。 但是心里还是一直想开发 app 的,24 年的毕业题目也是选择的开发一款 ios app ,说是开发,但其实就是照着 YouTube 上的视频一个字母一个字母得手敲出了第一个项目,也清楚没有上架 App Store 的可能(是一款 ios 音乐播放器),只在手机上测试运行过,当初看到 app 第一次安装到自己的手机上的时候心情还是很激动的。 那时候用 ChatGPT 还不能控制整个项目文件,只能网页问答或者是给它发几个代码文件,返回的改动还要自己到文件里修改。纯靠它来开发一款可以上架的好用的 app 对我来说不太可能,于是又将这个想法搁置。(在这期间出过一个项目说是可以生成一整个 ios 项目,用过之后也只是有几个页面,整体不可用) 然后就是去年 cursor 上线了,让我看到了一点上线 app 的可能,接入的好像是 GPT4.X 。对比之前已经很能打了,但是做出来的 app 也是差强人意。遂放弃。 最近上班也接触不到 ai ,但是 claude 和 codex 的信息看到得越来越多,工作也没什么事情,vibe coding 的想法越发强烈。 现在做的这个 app 的想法是怎么来的: 1.五一去东京旅游,每天想看看自己去了哪些地方,拍了哪些照片,对我来说最方便的办法就是———打开相册,点开照片,打开详细信息会显示照片的拍摄位置,再点进去会显示拍过的所有照片的位置。有时候还是觉得不太方便。 2.每次旅游结束后我会把相册中这次旅游拍的照片整理到一个相册中。但是相册中还有别的不同类型的相册,感觉有点乱。 3.挺喜欢 flighty 可以分享出一张照片,可以显示飞过的航线。每次旅游发不出一张总结性的图片,于是也自己写一个。 所有就有了 TripMap 。在地图上显示图片,在 app 里创建旅游相册,还可以显示解锁的范围,设计上也花了不少心思 功能相对来说还是简单了很多,但是开发记账,记事本...这些类别的 app 太多了,也算是解锁一个小众 app 。