零基础手搓了一个安卓休闲小游戏——Claude的代码能力让我吃惊
前言
我是一个完全没有编程基础的普通人。几个月前,我突发奇想:能不能只靠 AI 大模型的帮助,从零开始做一款真正能运行在手机上的安卓游戏?
事实证明,这是可以的。
这篇文章记录了我用 Claude AI 开发《中国方块》的完整过程,希望能给同样想法的你一些参考和启发。
一、为什么选择中国方块(Chinese blocks)?
中国方块吸收了俄罗斯方块玩法(因为版权原因改名),是一个经典的入门项目:
-
逻辑相对清晰,方块、旋转、消行 -
不需要复杂的美术资源 -
功能可以逐步扩展
但真正做下来,才发现它并不简单。
二、技术栈选择
在 AI 的建议下,我选择了以下技术组合:
|
技术 |
用途 |
|
Kotlin |
主要开发语言 |
|
Jetpack Compose |
UI 框架 |
|
Material Design 3 |
设计系统 |
|
Bmob 后端云 |
国内用户账号系统 |
|
Firebase |
原本用于Google账号系统 |
三、开发过程
第一阶段:核心游戏逻辑
游戏的核心由几个文件构成:
board.kt — 游戏棋盘
定义了棋盘的宽高(最终确定为 12列 × 15行),以及方块的放置、消行等核心逻辑。这个文件经历了多次调整,从最初的 10×20,到后来根据手机屏幕比例优化为更合适的尺寸(意外避开了俄罗斯方块的核心版权)。
shape.kt — 七种方块
经典的 I、O、T、S、Z、J、L 七种俄罗斯方块,每种都有对应的旋转逻辑。旋转算法使用了 (-y, x) 坐标变换,O 形块保持不变。
GameViewModel.kt — 游戏状态管理
负责所有游戏逻辑:方块下落、移动、旋转、碰撞检测、消行计分、等级提升等。游戏共设计了 10 个等级,分数阈值从 100 到 5000,下落速度从 800ms 逐渐加快到 150ms。
第二阶段:UI 界面设计
UI 部分使用 Jetpack Compose 编写,采用 Material Design 3 风格。
整个应用的页面结构如下:
开机动画(SplashScreen) ↓登录页(BmobAuthScreen) ↓主菜单(MainMenuScreen) ├── 🎮 开始游戏 ├── 🏆 排行榜 ├── 📅 每日任务 └── 🎒 道具背包
游戏界面包含:
-
顶部信息栏(分数、等级、下一个方块预览) -
游戏棋盘(虚线网格,正方形格子) -
道具栏(四种道具快捷使用) -
控制按钮区(旋转、方向键、直落、暂停)
支持深色模式和中英文切换。
第三阶段:功能扩展
道具系统
游戏设计了四种道具,用金币兑换:
|
道具 |
价格 |
效果 |
|
💥 消除一行 |
50金币 |
立即消除最底部一行 |
|
🔄 更换方块 |
30金币 |
更换当前下落的方块 |
|
⭐ 双倍得分 |
80金币 |
得分翻倍持续30秒 |
|
💖 复活一次 |
120金币 |
游戏结束时复活 |
每日签到系统
连续签到奖励:
-
1天:20金币 -
连续3天:50金币 -
连续7天:100金币
排行榜
全球排行榜,记录每位用户的最高分,前三名显示🥇🥈🥉奖牌。
第四阶段:账号系统的曲折之路
这是整个开发过程中最复杂的部分。
最初的方案:Firebase
一开始选择了 Google Firebase 作为后端,支持 Google 登录和邮箱登录。但很快发现一个致命问题:Firebase 在中国大陆访问极慢,甚至完全超时。
国内用户注册、登录全部失败,排行榜数据也无法同步。
尝试过的替代方案
-
LeanCloud:已停服 -
微信登录:需要企业资质,审核复杂 -
QQ登录:需要腾讯开放平台审核 -
手机号登录(Firebase):大陆收不到验证码
经过多番尝试,最终选择了 Bmob 后端云:
-
国内服务器,大陆访问快 -
支持手机号验证码登录 -
支持邮箱注册登录 -
免费额度每天100万次 API 调用,完全够用 -
个人开发者即可注册,无需企业资质
最终登录方式:
- 📱
手机号验证码登录 - 📧
邮箱登录/注册 - 👤
匿名游玩
(不过最终还是保留了Google账号登录的选项)
第五阶段:屏幕适配
我的手机分辨率是 2760×1256,约合 437×960dp,屏幕比例高达 2.2:1,非常细长。
这给游戏界面带来了很大挑战:
-
游戏板格子变成长方形而不是正方形 -
按钮被挤出屏幕 -
各元素比例失调
解决方案是根据屏幕尺寸动态计算游戏板大小:
val cellByWidth = boardWidthDp.toFloat() / BOARD_WIDTHval cellByHeight = availableBoardHeightDp.toFloat() / BOARD_HEIGHTval cellSizeDp = minOf(cellByWidth, cellByHeight)
取宽高方向的最小值作为格子尺寸,确保格子始终是正方形。同时根据屏幕高度动态调整按钮大小、间距等参数。
四、遇到的坑
1. Gradle 配置问题
build.gradle.kts 的 Kotlin DSL 语法和 Groovy DSL 完全不同,网上很多教程是旧版 Groovy 写法,直接复制会报错。
关键:版本目录 libs.versions.toml 里定义的别名必须和 build.gradle.kts 里引用的一致。
2. Bmob SDK 与 AndroidX 冲突
Bmob SDK 依赖旧版 Android Support 库,与 AndroidX 冲突。
解决方法:
implementation("io.github.bmob:android-sdk:3.9.0") { exclude(group = "com.android.support")}
同时在 gradle.properties 里开启 Jetifier:
android.enableJetifier=true
3. 旋转后方块坐标丢失
最初旋转逻辑每次从 Shape 枚举重新计算坐标,导致旋转状态无法保持。
解决方法:在 GameState 里单独存储 currentCoords,旋转时更新这个字段而不是重新计算。
4. 游戏板格子变形
使用 weight(1f) 让游戏板撑满剩余空间,导致格子变成长方形。
解决方法:根据屏幕可用空间精确计算格子大小,使用固定的 width 和 height。
五、最终成果
历经数周的迭代开发,最终完成了一款功能完整的俄罗斯方块游戏:
游戏功能:
- ✅
完整的俄罗斯方块游戏逻辑 - ✅
10个等级,难度递进 - ✅
游戏通关机制(5000分) - ✅
开机动画
社交功能:
- ✅
手机号/邮箱注册登录 - ✅
全球排行榜 - ✅
每日签到系统
道具系统:
- ✅
四种游戏道具 - ✅
金币兑换系统 - ✅
复活机制
体验优化:
- ✅
深色/浅色模式 - ✅
中英文双语 - ✅
屏幕自适应
六、给想尝试的你
如果你也想用 AI 开发一个应用,以下是我的经验:
1. 从简单开始
不要一开始就想做很复杂的功能。先把核心玩法跑通,再逐步加功能。
2. 报错不要慌
开发过程中会遇到大量报错,把报错信息直接发给 AI,通常都能解决。
3. 要有耐心
同一个问题可能需要来回几次才能解决,特别是环境配置类的问题。
4. 多跟AI聊聊
通常我都是选择把完整的代码提交给Claude让他帮我出主意,但是我也会问他为什么要这么修改,会让你对开发感受更深刻。
结语
从完全不懂代码,到做出一款可以安装在手机上的游戏,这个过程既有挫败感,也充满成就感。
AI 大模型极大地降低了开发的门槛,让普通人也能实现自己的想法。但它不是万能的,你仍然需要清晰地描述需求、耐心地调试问题、以及不断地学习和尝试。
如果你也有一个想法,不妨现在就开始。
如需要尝试此游戏,可以私信我~~~

(游戏界面截图)
本文所有代码均由 Claude AI 辅助生成,开发环境为 Android Studio,技术栈为 Kotlin + Jetpack Compose + Bmob+Google firebase。
夜雨聆风