乐于分享
好东西不私藏

零基础手搓了一个安卓休闲小游戏——Claude的代码能力让我吃惊

零基础手搓了一个安卓休闲小游戏——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。

本站文章均为手工撰写未经允许谢绝转载:夜雨聆风 » 零基础手搓了一个安卓休闲小游戏——Claude的代码能力让我吃惊

猜你喜欢

  • 暂无文章