一个使用Godot引擎开发的星露谷物语风格农场模拟游戏,致力于还原原作的核心玩法和体验。
- 农场模拟:种植作物、养殖动物、经营农场
- 探索冒险:探索地图、发现宝藏、与NPC互动
- 战斗系统:使用各种武器与怪物战斗
- 物品系统:收集、制作、交易各种物品
- 时间系统:完整的昼夜和季节循环
- 存档系统:自动保存游戏进度
- 操作系统:Windows 10+, macOS 10.15+, Linux
- 引擎:Godot 4.4 或更高版本
- 内存:至少 4GB RAM
- 存储空间:至少 500MB 可用空间
-
克隆项目
git clone https://github.com/your-username/stardew-godot.git cd stardew-godot -
导入Godot项目
- 打开Godot编辑器
- 点击"导入"按钮
- 选择项目根目录下的
project.godot文件
-
运行游戏
- 在Godot编辑器中按
F5键运行项目 - 或者在项目管理器中双击项目并点击"播放"按钮
- 在Godot编辑器中按
- 稳定版本:Godot 4.4 LTS
- 开发版本:Godot 4.4+ (最新稳定版)
- 启用GDScript LSP支持(提升代码提示和错误检查)
- 配置项目设置:
- 窗口分辨率:1280x720
- 渲染方法:Forward+
- 音频输出:立体声
- WASD:移动角色
- 鼠标:控制视角和交互
- E键:打开/关闭物品栏
- 鼠标滚轮:切换物品栏中的物品
- Q键:丢弃物品
- 左键点击:使用物品/工具
- 耕地:使用锄头在泥土上点击创建农田
- 种植:选择种子在农田上点击进行种植
- 浇水:使用洒水壶在作物上点击浇水
- 收获:成熟的作物会变为金色,点击即可收获
- 战斗:使用武器攻击怪物获得经验和掉落物
Global/ # 全局管理器
├── global.gd # 全局常量和工具函数
├── audio_manager.gd # 音频管理系统
├── save_manager.gd # 存档管理系统
├── scene_manager.gd # 场景管理系统
└── mouse_cursor.gd # 鼠标光标系统
Player/ # 玩家系统
├── player.gd # 玩家主控制器
├── player_camera.gd # 玩家相机系统
└── States/ # 玩家状态机
├── state.gd # 状态基类
├── state_machine.gd # 状态机管理器
├── idle.gd # 闲置状态
├── move.gd # 移动状态
├── axe.gd # 斧头状态
├── hoe.gd # 锄头状态
└── water.gd # 浇水状态
Bag/ # 物品栏系统
├── items/ # 物品定义
├── projectiles/ # 投掷物系统
└── scene/ # 物品栏UI
Component/ # 组件系统
├── hit_component.gd # 碰撞组件
├── hurt_component.gd # 受伤组件
└── tilemap_component.gd # 地图组件
TimeSystem/ # 时间系统
└── time_system.gd # 时间管理器
UI/ # 用户界面
├── tool_tip.tscn # 工具提示
└── inventory_ui.tscn # 物品栏界面
玩家行为通过有限状态机管理,确保逻辑清晰和可维护性:
# 状态基类定义了标准的生命周期方法
class State:
func _enter(): pass # 进入状态
func _exit(): pass # 退出状态
func _physics_update(delta): pass # 物理更新
func _update_animation(): pass # 动画更新游戏对象功能通过组件系统实现,提高代码复用性:
# 碰撞组件
class HitComponent extends Area2D:
func _init():
collision_layer = 2
collision_mask = 1核心管理器作为Autoload单例运行:
# project.godot 中的Autoload设置
Global="*res://Global/global.gd"
AudioManager="*res://Global/audio_manager.gd"
SceneManager="*res://Global/scene_manager.gd"- 游戏时间流速:1秒现实时间 = 1分钟游戏时间
- 昼夜循环:24小时制,6:00开始新的一天
- 季节系统:4个季节循环,影响作物生长
- 事件触发:基于时间的事件系统
- 自动保存:游戏进行中自动保存关键数据
- 手动存档:玩家可随时保存当前进度
- 数据结构:使用Godot的Resource系统进行序列化
- 双播放器:实现背景音乐的无缝切换
- 音效管理:同时播放多个音效
- 音量控制:独立的主音量、音乐、音效控制
- 分辨率:16x16像素基础单位
- 调色板:自定义16色调色板
- 动画帧:4-8帧循环动画
- 背景音乐:不同场景的氛围音乐
- 音效:工具使用、战斗、UI交互音效
- 环境音:风声、水声、鸟鸣等环境音效
- 对象池:复用掉落物和粒子效果
- 视锥剔除:只渲染可见区域
- 纹理压缩:优化资源占用
- 引用计数:避免循环引用导致的内存泄漏
- 资源卸载:场景切换时正确释放资源
- 纹理管理:按需加载纹理资源
- 状态调试:显示当前玩家状态信息
- 性能监控:显示FPS和内存使用情况
- 碰撞调试:可视化碰撞箱
- Fork 项目到你的GitHub账户
- 创建特性分支:
git checkout -b feature/amazing-feature - 提交更改:
git commit -m 'Add amazing feature' - 推送分支:
git push origin feature/amazing-feature - 创建Pull Request
- 使用GDScript 2.0语法
- 遵循Godot最佳实践
- 添加详细的中文注释:所有代码文件都有行级别的详细中文注释
- 使用有意义的变量和函数名
- 统一的命名规范和代码风格
本项目采用严格的中文注释标准,确保代码的可读性和可维护性:
# 文件级注释:每个文件开头的功能说明
# 简要描述文件的主要功能和作用
## 导出属性注释
# 使用##开头标注导出的属性,可以在Godot编辑器中看到
@export var player_speed: int = 100 # 玩家移动速度,像素/秒
## 函数注释
# 函数说明:详细描述函数的功能、参数和返回值
# @param param_name: 参数说明
# @return: 返回值说明
func update_player_position(delta: float) -> void:
# 行级别注释:解释具体的代码逻辑
# 每个重要变量、条件判断、循环都有相应的注释
var new_position = current_position + velocity * delta
# 检查边界条件
if new_position.x < min_bounds:
new_position.x = min_bounds # 防止超出左边界
# 更新位置
current_position = new_position注释要求:
- 文件头部:每个代码文件都有详细的文件功能说明
- 导出属性:所有@export属性都有中文注释说明
- 函数说明:每个函数都有功能描述、参数说明和返回值说明
- 行级别:重要代码行都有相应的解释注释
- 代码块:复杂逻辑块有整体说明
feat: 添加新功能
fix: 修复bug
docs: 更新文档
style: 代码格式调整
refactor: 重构代码
test: 添加测试
本项目采用MIT许可证 - 查看 LICENSE 文件了解详情
- 原作:Stardew Valley by ConcernedApe
- 引擎:Godot Engine
- 社区:Godot中文社区
- 开发者:独立游戏开发者们
- 项目维护者:你的名字
- 邮箱:your-email@example.com
- GitHub:https://github.com/your-username
- 项目主页:https://your-project-homepage.com
注意:这是一个学习和教育项目,旨在展示Godot引擎的强大功能。如有任何版权问题,请联系项目维护者。








