Tetrigo如何用SQLite记录你的高光时刻:本地排行榜从零到完整实现

Tetrigo如何用SQLite记录你的高光时刻:本地排行榜从零到完整实现 Tetrigo如何用SQLite记录你的高光时刻本地排行榜从零到完整实现【免费下载链接】tetrigoPlay Tetris in your terminal.项目地址: https://gitcode.com/gh_mirrors/te/tetrigoTetrigo 是一款用 Go 语言编写的终端俄罗斯方块游戏它最大的亮点之一就是内置了基于 SQLite 的本地排行榜系统——每一局比赛的分数、时间、消行数和等级都会自动落库让你随时回顾自己的高光时刻。本文将带你从数据库文件位置、表结构设计到分数入库的完整流程看懂 Tetrigo 本地排行榜是如何从零搭起来的。 为什么选择 SQLite 记录游戏分数终端游戏最大的优势是轻。Tetrigo 的本地排行榜没有引入任何数据库服务器而是直接选择了 SQLite零配置不需要安装、启动或维护任何服务一个文件就是整个数据库单机自足排行榜数据完全保存在本地断网也能随时查看实现极简通过 Go 标准库database/sql SQLite 驱动几十行代码就能完成全部存储逻辑核心入口在 internal/data/data.go程序启动时调用NewDB()打开数据库文件并自动确保排行榜表存在用户完全无感知。 数据库文件在哪里XDG 数据目录自动管理你不需要手动创建数据库文件。Tetrigo 遵循 Linux 的 XDG 规范在 cmd/tetrigo/main.go 中通过xdg.DataFile自动定位数据库路径平台默认数据库位置Linux~/.local/share/tetrigo/tetrigo.db其他平台对应用户数据目录下的tetrigo/tetrigo.db如果第一次运行文件会自动创建。你也可以用--db参数指定自定义路径配置文件则支持--config参数覆盖详见 cmd/tetrigo/main.go 中的GlobalVars定义。️ 排行榜表结构6 个字段完整保存一局比赛整个排行榜就是一张leaderboard表建表语句在 internal/data/data.go 的EnsureTablesExist()中CREATE TABLE IF NOT EXISTS leaderboard (id INTEGER PRIMARY KEY, game_mode TEXT, name TEXT, time INTEGER, score INTEGER, lines INTEGER, level INTEGER)每个字段的含义如下game_mode游戏模式Marathon / Sprint / Ultra不同模式独立排行name玩家昵称缺省为Anonymoustime本局用时score总得分是排名的第一依据lines累计消行数level最终达到的等级对应的 Go 结构体Score和数据访问层LeaderboardRepository定义在 internal/data/leaderboard.go职责非常清晰Save()负责写入一局成绩All()负责按模式取出全部记录。⏱️ 高光时刻如何入库从游戏结束到分数落库的完整流程这是整个排行榜最精彩的部分流程一共 4 步游戏结束触发当方块堆顶或计时器耗尽时internal/tui/views/single.go 中的gameOverUpdate()拦截退出按键组装成绩从对局引擎single.Game中取出总分、消行数、等级连同玩家昵称打包成一个data.Score写入数据库切换到排行榜模式时internal/tui/views/leaderboard.go 的NewLeaderboardModel()调用repo.Save()完成 INSERT并拿到新记录的 ID高亮展示排行榜表格会定位到你这条新记录选中行用醒目的颜色标出——你的高光时刻一眼就能看到排序规则也很合理All()的 SQL 使用ORDER BY score DESC, time ASC分数高者优先同分比用时完全符合竞速类游戏排行惯例。⌨️ 如何查看本地排行榜两种进入方式方式一游戏自然流转。任何一局结束后按 EXIT 键就会自动进入对应模式的排行榜页面。方式二命令行直达。Tetrigo 提供了独立的leaderboard子命令定义在 cmd/tetrigo/subcommands.go# 直接查看 Marathon 模式的本地排行榜 tetrigo leaderboard marathon # 查看 Sprint 模式排行榜 tetrigo leaderboard sprint进入后支持方向键上下滚动浏览长榜单测试用例中 50 条记录的滚动场景可见 internal/tui/views/leaderboard_test.go按?查看按键帮助按Esc返回主菜单。 三种游戏模式独立计分支持自定义玩家昵称Tetrigo 内置三种模式各自维护独立的排行榜模式玩法结束条件Marathon经典马拉松方块堆到顶部上限 15 级Sprint40 行冲刺消满 40 行或堆顶Ultra限时挑战2 分钟内尽可能得分命令行方式开局时可以用-n参数指定玩家昵称它会被记录到排行榜的name字段# 以 Ace 的名字开始一局 Sprint记录会写入本地排行榜 tetrigo play sprint -n Ace如果不通过菜单设置昵称默认以Anonymous身份上榜。 如何安装 Tetrigo 并快速体验本地排行榜Tetrigo 是一个纯 Go 项目安装非常直接# 克隆仓库 git clone https://gitcode.com/gh_mirrors/te/tetrigo cd tetrigo # 构建并启动 go build -o tetrigo ./cmd/tetrigo ./tetrigo启动后进入主菜单填写用户名、选择模式和起始等级开玩。一局结束后你的成绩就会自动存入 SQLite 排行榜——下次打开leaderboard子命令就能看到它在那里等你。✨ 小结一个极简但完整的本地排行榜Tetrigo 的 SQLite 排行榜实现堪称小而美的范本一个文件搞定存储XDG 目录自动管理零配置一张表完整记录 6 个维度的比赛数据两个方法Save/All覆盖全部读写需求分数降序 用时升序的排序规则简单且公平想深入了解游戏引擎层面的计分规则可以看看 pkg/tetris/scoring.go想研究排行榜视图的表格渲染细节internal/tui/views/leaderboard.go 是最直接的入口。【免费下载链接】tetrigoPlay Tetris in your terminal.项目地址: https://gitcode.com/gh_mirrors/te/tetrigo创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考