




























今天在 GitHub Trending 上看到一个有意思的项目:Unciv,这是一款用 LibGDX 开发的开源文明V重制版,能在 Android 和桌面端流畅运行,特别适合怀旧玩家和模改爱好者。
Unciv 是一个开源的、专注于模改(moddability)的 Android 和桌面端文明V重制版,使用 LibGDX 游戏开发框架构建。项目的核心理念是打造一个轻量、快速、可模改、开源且深度的 4X 策略游戏,即使是在低配置设备上也能流畅运行。
核心特性:
项目在 GitHub 上获得了广泛的关注,支持通过 Google Play、F-Droid、itch.io、Flathub、AUR、Homebrew、Chocolatey 等多种方式安装。
Unciv 基于 LibGDX 框架开发,这是一个成熟的跨平台 Java 游戏开发框架,支持 Windows、Linux、macOS、Android、iOS 和 Web 平台。项目采用典型的 LibGDX 多层架构:
├── core/ # 核心游戏逻辑(平台无关)
├── desktop/ # 桌面端启动器和打包配置
├── android/ # Android 平台特定代码
├── ios/ # iOS 平台特定代码(未活跃维护)
└── assets/ # 游戏资源(JSON 配置、图像、音频)
LibGDX 是项目的技术基石,选型理由包括:
JSON 驱动的配置系统是 Unciv 模改系统的核心。游戏的所有规则、文明、单位、建筑、科技树等都以 JSON 文件定义,存放在 android/assets/jsons/ 目录下。这种设计使得玩家无需编写代码即可创建复杂的模改。
状态模式(State Pattern):游戏中的单位和城市都有复杂的状态管理,使用状态模式清晰地处理不同状态下的行为。
观察者模式(Observer Pattern):用于实现事件系统和 UI 更新机制,当游戏状态变化时自动通知相关组件。
策略模式(Strategy Pattern):AI 决策系统使用策略模式,不同的 AI 难度和风格采用不同的决策策略。
游戏的数据流主要围绕 GameInfo 对象展开,这是整个游戏状态的核心数据结构:
// 核心游戏状态结构
class GameInfo {
val civilizations: MutableList<Civilization> = mutableListOf()
val cities: MutableList<City> = mutableListOf()
val tiles: MutableList<Tile> = mutableListOf()
val units: MutableList<MapUnit> = mutableListOf()
val difficulty: Difficulty = Difficulty.None
val gameParameters: GameParameters = GameParameters()
// ...
}
所有游戏操作都会修改 GameInfo 或其子对象,然后通过序列化保存到本地或用于多人游戏同步。
Android 设备:
# 通过 Google Play 安装
# 或下载 F-Droid 版本
# 或从 GitHub Releases 下载 APK
Linux 桌面:
# Flatpak 安装(推荐)
flatpak install flathub io.github.yairm210.unciv
# 或从 AUR 安装(Arch Linux)
yay -S unciv-bin
# 或下载 Jar 文件运行
java -jar Unciv.jar
Windows:
# 下载安装 MSI
# 或从 Chocolatey 安装
choco install unciv
# 或下载 Jar 文件运行
java -jar Unciv.jar
macOS:
# 使用 Homebrew 安装
brew update && brew install unciv
# 或下载 Jar 文件运行
java -jar Unciv.jar
桌面端运行 Jar(所有平台通用):
# 下载最新 Release 的 Jar 文件
wget https://github.com/yairm210/Unciv/releases/latest/download/Unciv.jar
# 运行游戏
java -jar Unciv.jar
Docker 运行(实验性):
# 拉取并运行 Docker 镜像
docker run -d -p 6901:6901 -p 5901:5901 ghcr.io/yairm210/unciv
# 在浏览器中访问
# http://localhost:6901/vnc.html?password=headless
开始新游戏:启动游戏 → 选择"快速游戏"或"新游戏" → 选择文明 → 配置游戏参数 → 开始
游戏界面:
基本操作:
模改安装:
/sdcard/Android/data/com.unciv.app/files/mods/~/.local/share/unciv/mods/(Linux)或 %APPDATA%\unciv\mods\(Windows)自定义文明:
创建 MyCiv.json 文件,定义新文明:
{
"name": "我的文明",
"leaderName": "领导者",
"flags": ["IsCityState", "IsMajorCiv"],
"uniqueUnits": ["MY_UNIQUE_UNIT"],
"uniqueBuildings": ["MY_UNIQUE_BUILDING"],
"startBias": ["Coast", "Luxury"],
"cityNames": ["首都", "第二城", "第三城"]
}
场景:创建自定义单位
{
"name": "激光步兵",
"unitType": "LandUnit",
"cost": 150,
"strength": 40,
"rangedStrength": 25,
"range": 2,
"movement": 2,
"requiredTech": "LaserTechnology",
"upgradesTo": "None",
"uniqueTo": "未来文明",
"uniques": [
"3倍伤害对抗机械化单位",
"+10% 防御在丘陵地形"
]
}
问题:Android 安装 APK 时提示"解析包错误" 解决方案:
问题:桌面端运行 Jar 提示"找不到 Java" 解决方案:
# 检查 Java 版本
java -version
# 如果未安装,安装 OpenJDK 11
# Ubuntu/Debian
sudo apt install openjdk-11-jdk
# macOS
brew install openjdk@11
# Windows:从 Adoptium 下载安装
问题:游戏启动后黑屏或崩溃 解决方案:
--disable-gpu~/.local/share/unciv/logs/ 或 Android 的 logcat问题:游戏卡顿、帧率低下 解决方案:
问题:启用的模改没有效果 解决方案:
问题:自定义文明/单位不显示 解决方案:
问题:保存的游戏在新版本中无法加载 解决方案:
Unciv 是一个令人敬佩的开源项目,它证明了开源社区能够创造出高质量、跨平台的游戏重制版。通过使用 LibGDX 框架和 JSON 驱动的配置系统,项目实现了极高的可移植性和可模改性。
项目亮点:
适合人群:
如果你怀念文明V的经典玩法,又想要在手机或低配电脑上玩,Unciv 绝对值得一试。而且,作为开源项目,你不仅可以免费游玩,还可以参与到项目的开发和改进中。
相关资源:
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。