无界世界在线 (BWO)

style: effective dartPowered by Flame

一个使用 Flutter 和 Flames,以及 NodeJS 和 Firebase 作为后端的无限程序化在线游戏。

showcase5
showcase1

关于桌面

世界并没有存储在任何地方,它使用了一些概念和规则(Perlin NoiseSimplex Noise)在所有设备上以相同的方式生成它,只有玩家所做的更改实际上存储在服务器端。

玩家可以在无限的世界中的任何地方建造他们的房屋。这就是为什么我一开始称之为无界世界。?

该项目仍在开发中,目前还没有很多功能。
我尽可能多地使用 SOLID 原则,使事物足够清晰易读,虽然我不是专家,但如果您有任何建议,请告诉我。

发布日期?

希望在今年晚些时候。

当前版本:1.0.4

游戏图表、结构和注释

BWO
更多细节请访问 Whimsical 图表页面,查看每个节点的注释。

说明

  1. 要求

    • 系统已安装 NPM 和 NodeJS
    • 导航到 bwo-server 文件夹,然后在控制台中运行命令 npm install 来安装和更新所有依赖项
  2. 启动您自己的服务器

    • 2.1 如果您想在线运行,请设置数据库

      • Google 控制台 创建一个项目并设置您的 Firebase 数据库和 Cloud Firestore
        • google-services.json 文件保存在 android\app\
      • 编辑 resources/config.js 中的环境变量或在您的系统中设置它们,以便服务器可以连接到您的数据库。
    • 2.2. 运行 Node 服务器

      • 导航到 bwo-server 文件夹,然后在控制台中运行命令 npm startnode server.js
        • 要指定环境,请在两种情况下都使用 --env=development--env=production,您需要通过 Firebase 进行身份验证。对于本地主机,请使用 --env=localhost
        • 要在服务器端运行测试,请运行 npm test(仍在开发中)
    • 2.3 对于客户端(Android 应用),请在 lib\server\utils\server_utils.dart 中调整服务器 URL

      • 设置您的数据库名称 developmentproductionlocalhost
      • 提示:您可以免费托管在 gitpod 或 heroku 上运行它
  3. 如果您不想配置自己的服务器,只想运行游戏:(本地主机)

    • 请确保将 server 变量 URL 在 lib\server\utils\server_utils.dart 中调整为 https://borderless-world.herokuapp.com
    • 请确保将 isOffline 变量在 lib\server\utils\server_utils.dart 中调整为 true
  4. 在您的设备上启动应用程序

    • 屏幕左侧点击 = 行走
    • 屏幕右侧点击 = 砍树/攻击
    • 在建造模式下,您不能行走,只能在地基的方形区域内放置/删除物体

您还可以通过浏览器打开主机 URL 来查看当前的服务器状态(用于调试)

如果您遇到任何问题,请告诉我,打开一个 issue,我会很快与您联系。在此阶段,代码重构非常受欢迎。

开发日志

用例

  • 优化渲染和地图生成器
  • 修复玩家动画位置
  • 为环境添加阴影
  • 当设备完全平放时停止玩家行走
  • [-] 特殊效果
    • 行走烟雾
    • 水波纹
    • 水沫
    • 水星闪烁
    • 音效 BGM、行走和游泳
    • 为环境增加更多生机
    • 当玩家挂机时围绕玩家移动摄像机
  • 为玩家添加砍树动画
  • 砍树时添加水果掉落
  • 砍树逻辑和动画
  • 添加拾取物品
  • 库存
  • 敌人类别
    • AI 巡逻(本地)
    • AI 搜索、跟随和丢失目标(本地)
    • AI 攻击(本地)
    • 行走时生成随机敌人(在线)
  • 为玩家添加攻击动画
  • 添加战斗系统
  • 添加 UI 系统
  • 已添加场景管理器(在菜单、游戏等场景之间切换)
  • 添加 UI - 玩家创建
  • 为游戏添加了新的角色精灵
  • 关卡和进度系统
  • 玩家 HUD
  • 装备和状态加成
  • 添加饥饿度
  • 添加行走方式的输入摇杆风格
  • [-] 创建 Node 服务器
    • 同步玩家位置
    • 平滑玩家动画
    • 优化玩家数据同步,仅同步给可见范围内的玩家
    • 同步砍树动画/状态/重生
    • 同步敌人
    • 同步攻击其他玩家的伤害/动画
    • 同步装备精灵
    • 同步物品生成
  • [-] 制作类别
    • 用其他物品制作斧头
    • 制作数据库
    • 带有拖放功能的制作 UI
  • [-] 建造类别
    • 私人建筑的地基
    • 墙壁放置
    • 自动/切换墙壁高度级别
    • 删除地基
    • UI 对象选择界面
    • 地面瓦片
    • 屋顶
    • 动画门
    • Windows
    • 制作或购买系统
    • 将建筑同步到服务器
      • 墙壁
      • 地板
      • 家具
    • 将地基/房屋保存/备份到 Firebase
  • [-] 界面
    • 创建账户 UI
    • 角色创建 UI
    • 登录 UI
    • 装备 UI
  • 动态更改背景音乐音量
  • Firebase 用于备份服务器状态
  • 处理数据库中的用户登录
  • 生物群系
  • Playstore 的动态捆绑包和 CI/CD
  • 全局聊天系统
  • UML 游戏图
  • 地基的安全区域
  • 随机迷宫地牢和战利品

已知问题

  • 收到行走更新时有时会滑得太厉害
  • 敌人不会与墙壁碰撞。缺少寻路

正在进行

  • 性能改进

下一步

  • 代码重构
  • 新敌人
  • 敌人被动攻击

22/09

  • 新敌人

forward_right

18/09

  • 修复了将地基区域预览拖出屏幕区域的错误
  • 修复了 Flames 更新后创建角色的错误
  • 减少服务器上的地基加载区域,只有当您靠近屏幕边缘时才会加载
  • 添加了在砍伐树木地点建造地基的选项

17/09

  • 服务器消息发送大幅改进
  • 地基现在是安全区,这意味着敌人不会在那里攻击您

13/09

  • 添加了门
  • 玩家靠近时自动开关门
  • 通过删除工具添加了移除家具的功能
  • 家具碰撞检查和放置验证

doors

09/09

  • 添加了屋顶

roofs

08/09

  • 家具同步
  • 添加了向上墙壁的图层到相应的按钮(未来用于显示屋顶)

07/09

  • 添加了墙壁多材质

wall_multexture1

06/09

  • 修复了在地形尚未完全生成时未放置地板的错误
  • 添加了家具选择和放置
  • 添加了地板和家具精灵

04/09

  • 添加了吐司通知消息
  • 添加了树木 HP 恢复和 HP 满后从服务器删除
  • 修复了地基未加载问题
  • 将地基备份到 Firebase

03/09

  • 修复了更新墙壁时的一些性能问题

01/09

  • 添加了地板到建造系统

30/08

  • 添加了墙壁窗户选择器
  • 添加了地基窗户选择器、放置区域指示器拖动、移动时的安全/不安全颜色指示器
  • 用于地基的服务器验证
  • UI 建造系统

28/08

  • 已通过服务器添加墙壁放置同步。(*终于! :O* (尚未保存数据))
  • 在行走时改进了服务器发送的消息
  • 添加了新的精灵
  • 开始构建窗口操作(未完成)

26/08

  • 添加了 Google 登录方法认证
  • 将用户角色数据和用户账户保存到 Firebase
  • 添加了 Firebase 与服务器数据之间的合并功能
  • 敌人不再永久保存,因为它们是在您行走时生成的,这也是服务器重启时清理服务器的好主意

25/08

  • 添加了 Firebase 数据库来保存持久化数据

24/08

  • 添加了 02 个新的精灵角色
  • 添加了切换墙壁高度级别(自动、低和高)

23/08

  • 为私人房屋建造系统添加了地基
  • 在地形上添加了墙壁放置

21/08

  • 从服务器添加了升级系统
  • 同步:砍树动作
  • 同步:树的生命值/树的死亡动画/180秒后重生

19/08

  • 修复了某些设备上的 UI 元素位置不正确的问题。
  • 在服务器上添加了日志记录
  • 从服务器添加了玩家 HP 再生
  • 从服务器添加了杀死怪物获得的 XP 奖励
  • 修复了 male1 的左右行走精灵动画顺序
  • 更改了键盘打开动画和自动大写

17/07

  • 为测试添加了 heroku 服务器。

16/08

  • 修复了敌人离开屏幕时的行走问题
  • 改进了敌人在玩家进入其范围时和攻击延迟的反应
  • 将玩家攻击同步到敌人

13/08

  • 将 Effective Dart 添加到项目中(大规模重构)

11/08

  • 在后端服务器上为(TDD)添加了 Jasmine
  • 让敌人死亡时丢失目标

07/08

  • 新的生产/开发环境在启动服务器时更新
  • 修复了上一次更新后玩家的生成位置
  • 修复了未加载草地纹理
  • 添加了 Wakelock(屏幕将保持唤醒)
  • 修复了敌人生成时出现 NaN 值的罕见错误

03/08

  • 重建逻辑以同步服务器端速度模拟的敌人行走(这需要计算敌人何时真正接近玩家,而不是从后端“传送”到玩家面前,实际上他们并不近)

01/08

  • 在项目中添加了服务器端文件夹

30/07

  • 减少 Socket.io 库的日志量
  • 敌人名称
  • 在连接服务器接收消息更新方面的一些改进

26/07

  • 实时敌人生成/行走同步(客户端)

24/07

  • 添加了行走方式的输入摇杆风格(加速度计仍然非常有趣且不同,但对某些人来说太难了)
  • 修复了敌人离开屏幕时未生成的问题
  • 敌方/玩家的伤害文本颜色
  • 敌人未巡逻

21/07

  • 添加了关卡和进度系统
  • 添加了装备物品和奖励状态(所有角色共享的单一来源)
  • 添加了玩家 HUD 和状态管理逻辑
  • 添加了斧头以更快地砍树
  • 添加了卡路里逻辑(如果您挨饿,您将获得不良状态和限制)

17/07

  • 新玩家精灵
  • 修复了树木生成(有时是随机的)
  • 小地图改进
  • 修复了一些服务器端逻辑
  • 添加了离线模式用于调试

15/07

  • 添加了 3 个新的可玩精灵来玩
  • 添加了起始位置选择
  • 角色创建 UI
  • 添加了新的 UI 按钮和键盘

10/07

  • 解决了进入我的屏幕时玩家未更新的问题
  • 移除了 Google Firebase,改用 Node.js 服务器
  • 仅将玩家位置同步到相机视图

07/07

  • 添加了与 Google Firebase 的实时连接。

04/07

  • 添加了战斗系统(伤害/死亡/重生)
  • 添加了 AI 攻击
  • 在 UI 上添加了伤害文本显示

03/07

  • 添加了 AI 系统
  • 添加了新敌人 [Skull]

02/07

  • 砍树逻辑/动画和重生
  • 添加了日志项
  • 添加了拾取项
  • 添加了库存系统
  • 添加了点击检测
  • 添加了 HUD 和 UI 系统

29/06

  • 重力、摩擦和弹力物理
  • 添加了掉落物品逻辑

28/06

  • 玩家移动已更改 - 现在您需要点击屏幕才能让他移动。
  • 玩家精灵已更改
  • 砍树玩家动画

26/06

  • 添加了随机草/花卉精灵,
  • 更改颜色调色板以获得更多游戏的“外观和感觉”。
  • 在山区添加了碰撞
  • 环境音乐和脚步声

24/06

  • 添加了行走/游泳和水效果+动画

23/06

  • 添加了玩家沉入水中和树木碰撞检测。

21/06

  • 我现在专注于性能改进,以提供尽可能高的帧率。
  • 下一步将是玩家本身的设计以及与环境的碰撞检测。

GitHub

查看 Github