功能详细说明文档
<p>概述</p>
<p>本游戏是一款以砍树获取代币(Coin)为主要玩法的休闲游戏。玩家通过砍伐树木获取代币,同时需要管理自身的能量(Energy)。游戏中包含多种可升级的属性和功能,如每次砍树获得的代币数量、能量恢复速度、能量上限、采矿宠物等。还包含宝箱系统和离线采矿功能,增加游戏的趣味性和粘性。</p>
<p>功能列表</p>
<ol>
<li>
<p>砍树(Chop Tree)</p>
<p>• 玩家通过滑动屏幕砍伐树木,消耗能量获取代币。</p>
<p>• 每次砍树消耗 1 点能量,获得一定数量的代币,代币数量可通过升级提升。</p>
<p>• 能量会自动恢复,恢复速度可通过升级提升。</p>
<p>• 在砍树过程中,有概率出现宝箱。</p>
<ol>
<li>能量系统(Energy System)</li>
</ol>
<p>• 能量用于限制玩家的砍树次数,防止过度游戏。</p>
<p>• 能量会以每秒一定的速度自动恢复,恢复速度可升级。</p>
<p>• 能量上限也可通过升级提升,增加玩家的游戏时间。</p>
<p>• 玩家每天有 3 次 能量填满的机会,可以随时使用,使能量立即恢复至最大值。</p>
<ol>
<li>升级系统(Upgrade System)</li>
</ol>
<p>• 砍树获得的代币数量升级</p>
<p>• 每升级一级,砍树获得的代币数量 +1。</p>
<p>• 升级消耗一定数量的代币,升级费用随着等级提升而增加。</p>
<p>• 能量恢复速度升级</p>
<p>• 每升级一级,能量恢复速度 +1 点/秒。</p>
<p>• 升级消耗一定数量的代币,升级费用随着等级提升而增加。</p>
<p>• 能量上限升级</p>
<p>• 每升级一级,能量上限增加一定数值(例如 +50 点)。</p>
<p>• 升级消耗一定数量的代币,升级费用随着等级提升而增加。</p>
<ol>
<li>宝箱系统(Chest System)</li>
</ol>
<p>• 随机宝箱</p>
<p>• 在玩家砍树过程中,会随机出现宝箱。</p>
<p>• 玩家可以点击开启这些宝箱,获得奖励。</p>
<p>• 宝箱出现的概率可设定,例如 10%。</p>
<p>• 开启宝箱不消耗任何资源。</p>
<p>• 每日免费宝箱</p>
<p>• 每天玩家可以开启 3 个 免费宝箱。</p>
<p>• 开启免费宝箱不需要任何条件或消耗。</p>
<p>• 免费宝箱与随机宝箱具有相同的规则和奖励机制。</p>
<ol>
<li>能量填满机会(Energy Refill Chances)</li>
</ol>
<p>• 玩家每天有 3 次 能量填满的机会。</p>
<p>• 使用能量填满机会可立即将能量恢复至最大值。</p>
<p>• 能量填满机会与宝箱无关,独立存在。</p>
<p>• 能量填满机会每天重置。</p>
<ol>
<li>采矿宠物(Mining Pet)</li>
</ol>
<p>• 玩家可拥有并升级采矿宠物,宠物有 5 个等级,每个等级解锁不同功能:</p>
<p>• Lv1:开启自动砍树功能,在线时自动执行砍树操作。</p>
<p>• Lv2:添加持续 2 小时的离线采矿模式。</p>
<p>• Lv3:延长离线采矿持续时间至 12 小时。</p>
<p>• Lv4:离线采矿模式持续 12 小时,获得额外 30% 离线采矿奖励,持续 7 天。</p>
<p>• Lv5:离线采矿模式持续 12 小时,获得额外 60% 离线采矿奖励,持续 7 天。</p>
<p>• 升级宠物需要消耗一定数量的代币,费用随着等级提升而增加。</p>
<ol>
<li>离线采矿(Offline Mining)</li>
</ol>
<p>• 当玩家离线时,具备离线采矿功能的宠物会自动采矿。</p>
<p>• 离线采矿的持续时间取决于宠物等级,奖励在玩家重新上线时发放。</p>
<p>• 为防止滥用,设置最小离线时间阈值(例如 5 分钟),只有离线时间超过该阈值才计算离线奖励。</p>
<p>• 离线奖励只能领取一次,防止频繁断线重连重复领取。</p>
<ol>
<li>自动砍树(Auto Chop)</li>
</ol>
<p>• 玩家在线且宠物等级达到 Lv1 及以上时,自动砍树功能生效。</p>
<p>• 自动砍树会在每秒自动执行砍树操作,消耗能量并获取代币。</p>
<p>详细功能描述</p>
</li>
<li>
<p>砍树功能</p>
<p>• 操作方式:玩家在前端界面滑动屏幕进行砍树操作。</p>
<p>• 能量消耗:每次砍树消耗 1 点能量。</p>
<p>• 代币获取:每次砍树获得的代币数量由 coinPerChop 属性决定,初始值为 1,可通过升级提升。</p>
<p>• 宝箱出现:在砍树过程中,玩家有一定概率遇到 随机宝箱,点击开启后可获得奖励。</p>
<p>• 逻辑流程:</p>
<ol>
<li>
<p>前端发送 chop_tree 消息至服务器。</p>
</li>
<li>
<p>服务器接收消息,验证用户身份。</p>
</li>
<li>检查用户是否有足够的能量:</li>
</ol>
<p>• 如果能量不足,返回错误信息。</p>
<p>• 如果能量足够,扣除 1 点能量,增加相应的代币。</p>
<ol>
<li>检查是否触发随机宝箱:</li>
</ol>
<p>• 根据设定的概率,确定是否出现宝箱。</p>
<p>• 如果出现宝箱,增加用户的可用宝箱数量。</p>
<ol>
<li>保存用户数据,返回最新的能量、余额和宝箱信息给前端。</li>
</ol>
</li>
<li>
<p>能量系统
• 能量恢复:</p>
<p>• 能量会以每秒一定的速度自动恢复,初始恢复速度为 1 点/秒。</p>
<p>• 恢复速度可通过升级提升,每升级一级,恢复速度 +1 点/秒。</p>
<p>• 能量上限:</p>
<p>• 初始能量上限为 100 点,可通过升级提升。</p>
<p>• 每升级一级,能量上限增加一定数值(例如 +50 点)。</p>
<p>• 能量填满机会:</p>
<p>• 玩家每天有 3 次 能量填满的机会。</p>
<p>• 使用能量填满机会可立即将能量恢复至最大值。</p>
<p>• 能量填满机会每天重置,与宝箱系统无关。</p>
</li>
<li>
<p>升级系统
• 升级砍树获得的代币数量:</p>
<p>• 每升级一级,coinPerChop 属性 +1。</p>
<p>• 升级费用计算方式:100 * 当前 coinPerChop 值。</p>
<p>• 升级能量恢复速度:</p>
<p>• 每升级一级,energyRecoveryRate 属性 +1。</p>
<p>• 升级费用计算方式:100 * 当前 energyRecoveryRate 值。</p>
<p>• 升级能量上限:</p>
<p>• 每升级一级,maxEnergy 属性增加 50 点。</p>
<p>• 升级费用计算方式:100 * (当前 maxEnergy / 100)。</p>
</li>
<li>
<p>宝箱系统
• 随机宝箱:</p>
<p>• 在玩家砍树过程中,有一定概率出现随机宝箱(例如 10%)。</p>
<p>• 玩家可以点击开启这些宝箱,获得奖励。</p>
<p>• 奖励内容可包括代币、道具等,不包含能量填满机会。</p>
<p>• 开启宝箱不消耗任何资源。</p>
<p>• 每日免费宝箱:</p>
<p>• 每天玩家可以开启 3 个 免费宝箱。</p>
<p>• 开启免费宝箱不需要任何条件或消耗。</p>
<p>• 奖励内容与随机宝箱相同。</p>
<p>• 免费宝箱开启次数每天重置。</p>
<p>• 能量填满机会:</p>
<p>• 能量填满机会与宝箱系统无关,独立存在。</p>
<p>• 玩家每天有固定次数的能量填满机会,可随时使用。</p>
</li>
<li>
<p>能量填满机会
• 每日次数:</p>
<p>• 玩家每天有 3 次 能量填满机会。</p>
<p>• 次数每天重置。</p>
<p>• 使用方式:</p>
<p>• 玩家可在任何时候使用能量填满机会,将能量立即恢复至最大值。</p>
<p>• 使用能量填满机会不需要任何额外条件或消耗。</p>
<p>• 逻辑流程:</p>
<ol>
<li>
<p>前端发送请求至 /api/energy/refill 接口。</p>
</li>
<li>
<p>服务器验证用户身份,检查当天已使用的能量填满次数。</p>
</li>
<li>
<p>如果未超过限制,将能量恢复至最大值,增加已使用次数。</p>
</li>
<li>
<p>保存用户数据,返回成功信息。</p>
</li>
<li>如果已用完次数,返回错误信息。</li>
</ol>
</li>
<li>
<p>采矿宠物
• 升级效果:</p>
<p>• Lv1:开启自动砍树功能。</p>
<p>• Lv2:添加持续 2 小时的离线采矿模式。</p>
<p>• Lv3:延长离线采矿持续时间至 12 小时。</p>
<p>• Lv4:离线采矿模式持续 12 小时,获得额外 30% 离线采矿奖励,持续 7 天。</p>
<p>• Lv5:离线采矿模式持续 12 小时,获得额外 60% 离线采矿奖励,持续 7 天。</p>
<p>• 升级费用:</p>
<p>• 升级费用计算方式:500 * 下一级宠物等级。</p>
<p>• 逻辑流程:</p>
<ol>
<li>
<p>前端发送请求至 /api/upgrade/pet 接口。</p>
</li>
<li>
<p>服务器验证用户身份,检查用户余额是否足够。</p>
</li>
<li>
<p>如果足够,扣除相应代币,提升宠物等级,更新对应功能。</p>
</li>
<li>
<p>保存用户数据,返回最新的宠物等级和功能状态。</p>
</li>
<li>如果余额不足,返回错误信息。</li>
</ol>
</li>
<li>
<p>离线采矿
• 触发条件:</p>
<p>• 宠物等级达到 Lv2 及以上。</p>
<p>• 用户离线时间超过最小离线时间阈值(例如 5 分钟)。</p>
<p>• 奖励计算:</p>
<p>• 根据用户的 coinPerChop 属性和实际离线时间计算基础奖励。</p>
<p>• 离线时间不得超过宠物等级对应的离线采矿持续时间。</p>
<p>• 如果宠物等级达到 Lv4 或 Lv5,离线奖励有额外加成。</p>
<p>• 逻辑流程:</p>
<ol>
<li>
<p>用户断线时,服务器记录离线时间。</p>
</li>
<li>
<p>用户重新上线时,服务器计算离线时间和应得奖励。</p>
</li>
<li>
<p>检查离线时间是否超过最小阈值,且离线奖励未领取。</p>
</li>
<li>
<p>计算奖励,更新用户余额,标记离线奖励已领取。</p>
</li>
<li>返回离线奖励信息给前端。</li>
</ol>
</li>
<li>
<p>自动砍树
• 触发条件:</p>
<p>• 宠物等级达到 Lv1 及以上。</p>
<p>• 用户在线且有足够的能量。</p>
<p>• 逻辑流程:</p>
<p>• 服务器每隔一定时间(例如 1 秒)为开启自动砍树功能的用户执行砍树操作。</p>
<p>• 检查用户能量是否足够,扣除能量,增加代币。</p>
<p>• 保存用户数据,发送最新的能量和余额信息给前端。
数据模型
用户模型(User)
包含以下主要字段:
• id: 用户唯一标识符。</p>
<p>• balance: 用户当前的代币余额。</p>
<p>• energy: 用户当前的能量值。</p>
<p>• maxEnergy: 用户的能量上限。</p>
<p>• energyRecoveryRate: 能量恢复速度(点/秒)。</p>
<p>• lastEnergyUpdate: 上次能量更新时间,用于计算自动恢复。</p>
<p>• coinPerChop: 每次砍树获得的代币数量。</p>
<p>• petLevel: 采矿宠物等级。</p>
<p>• autoChopEnabled: 是否开启自动砍树功能。</p>
<p>• offlineMiningDuration: 离线采矿持续时间(毫秒)。</p>
<p>• offlineMiningBonus: 离线采矿奖励加成比例。</p>
<p>• offlineMiningBonusEndTime: 离线采矿奖励加成结束时间。</p>
<p>• lastLogoutTime: 上次登出时间,用于计算离线奖励。</p>
<p>• offlineMiningCollected: 是否已领取离线奖励,防止重复领取。</p>
<p>• availableChests: 玩家当前可用的宝箱数量(包括随机宝箱和每日免费宝箱)。</p>
<p>• dailyFreeChestsOpened: 当天已开启的每日免费宝箱数量。</p>
<p>• lastChestReset: 上次重置宝箱计数的日期。</p>
<p>• dailyEnergyRefillsUsed: 当天已使用的能量填满次数。</p>
<p>• lastEnergyRefillReset: 上次重置能量填满计数的日期。</p>
</li>
</ol>
<h1>接口设计文档</h1>
<h2>WebSocket 消息接口</h2>
<h3>砍树操作</h3>
<p><strong>消息类型</strong>:<code>chop_tree</code></p>
<p><strong>客户端发送</strong>:</p>
<pre><code class="language-json">{
&quot;type&quot;: &quot;chop_tree&quot;
}</code></pre>
<p><strong>服务器响应</strong>:</p>
<pre><code class="language-json">{
&quot;type&quot;: &quot;balance_updated&quot;,
&quot;balance&quot;: &lt;最新余额&gt;,
&quot;energy&quot;: &lt;最新能量&gt;,
&quot;availableChests&quot;: &lt;可用宝箱数量&gt;
}</code></pre>
<h3>用户状态更新</h3>
<p><strong>消息类型:user_status</strong></p>
<p><strong>服务器在用户上线时发送,包含用户的最新状态信息。</strong></p>
<pre><code class="language-json">{
&quot;type&quot;: &quot;user_status&quot;,
&quot;balance&quot;: &lt;余额&gt;,
&quot;energy&quot;: &lt;能量&gt;,
&quot;maxEnergy&quot;: &lt;能量上限&gt;,
&quot;energyRecoveryRate&quot;: &lt;能量恢复速度&gt;,
&quot;coinPerChop&quot;: &lt;每次砍树获得的代币数量&gt;,
&quot;petLevel&quot;: &lt;宠物等级&gt;,
&quot;autoChopEnabled&quot;: &lt;是否开启自动砍树&gt;,
&quot;availableChests&quot;: &lt;可用宝箱数量&gt;,
&quot;dailyEnergyRefillsUsed&quot;: &lt;当天已使用的能量填满次数&gt;
}</code></pre>
<p><strong>离线奖励领取</strong></p>
<p><strong>消息类型:offline_rewards_collected</strong></p>
<p><strong>服务器在用户重新上线并领取离线奖励后发送。</strong></p>
<pre><code class="language-json">{
&quot;type&quot;: &quot;offline_rewards_collected&quot;,
&quot;message&quot;: &quot;你获得了 &lt;奖励数量&gt; 个离线奖励代币!&quot;,
&quot;balance&quot;: &lt;最新余额&gt;
}</code></pre>
<h2>错误消息</h2>
<p><strong>消息类型:error</strong></p>
<p><strong>服务器在发生错误时发送。</strong></p>
<pre><code class="language-json">{
&quot;type&quot;: &quot;error&quot;,
&quot;message&quot;: &quot;&lt;错误信息&gt;&quot;
}</code></pre>
<h2>RESTful API</h2>
<p><strong>升级砍树获得的代币数量</strong></p>
<p><strong>请求方式:POST</strong></p>
<p><strong>接口:/api/upgrade/coin-per-chop</strong></p>
<p><strong>请求头:Authorization: Bearer <token></strong></p>
<p><strong>服务器响应:</strong></p>
<pre><code class="language-json">{
&quot;message&quot;: &quot;砍树获得的代币数量已升级!&quot;,
&quot;balance&quot;: &lt;最新余额&gt;,
&quot;coinPerChop&quot;: &lt;最新的 coinPerChop 值&gt;
}</code></pre>
<h2>升级能量恢复速度</h2>
<p><strong>请求方式:POST</strong></p>
<p><strong>接口:/api/upgrade/energy-recovery</strong></p>
<p><strong>请求头:Authorization: Bearer <token></strong></p>
<p><strong>服务器响应:</strong></p>
<pre><code class="language-json">{
&quot;message&quot;: &quot;能量恢复速度已升级!&quot;,
&quot;balance&quot;: &lt;最新余额&gt;,
&quot;energyRecoveryRate&quot;: &lt;最新的 energyRecoveryRate 值&gt;
}</code></pre>
<h2>升级能量上限</h2>
<p><strong>请求方式:POST</strong></p>
<p><strong>接口:/api/upgrade/max-energy</strong></p>
<p><strong>请求头:Authorization: Bearer <token></strong></p>
<p><strong>服务器响应:</strong></p>
<pre><code class="language-json">{
&quot;message&quot;: &quot;能量上限已升级!&quot;,
&quot;balance&quot;: &lt;最新余额&gt;,
&quot;maxEnergy&quot;: &lt;最新的 maxEnergy 值&gt;
}</code></pre>
<h2>升级采矿宠物</h2>
<p><strong>请求方式:POST</strong></p>
<p>**接口:/api/upgrade/pet</p>
<p><strong>请求头:Authorization: Bearer <token></strong></p>
<p><strong>服务器响应:</strong></p>
<pre><code class="language-json">{
&quot;message&quot;: &quot;采矿宠物已升级到 Lv&lt;宠物等级&gt;!&quot;,
&quot;balance&quot;: &lt;最新余额&gt;,
&quot;petLevel&quot;: &lt;最新的宠物等级&gt;,
&quot;autoChopEnabled&quot;: &lt;是否开启自动砍树&gt;,
&quot;offlineMiningDuration&quot;: &lt;离线采矿持续时间&gt;,
&quot;offlineMiningBonus&quot;: &lt;离线采矿奖励加成比例&gt;,
&quot;offlineMiningBonusEndTime&quot;: &lt;离线采矿奖励加成结束时间&gt;
}</code></pre>
<h2>开启宝箱</h2>
<p><strong>请求方式:POST</strong></p>
<p>**接口:/api/chest/open</p>
<p><strong>请求头:Authorization: Bearer <token></strong></p>
<p><strong>服务器响应:</strong></p>
<pre><code class="language-json">{
&quot;message&quot;: &quot;宝箱开启成功!你获得了奖励。&quot;,
&quot;availableChests&quot;: &lt;剩余可用宝箱数量&gt;,
&quot;balance&quot;: &lt;最新余额&gt;,
// 其他奖励信息
}</code></pre>
<h2>使用能量填满机会</h2>
<p><strong>请求方式:POST</strong></p>
<p><strong>接口:/api/energy/refill</strong></p>
<p><strong>请求头:Authorization: Bearer <token></strong></p>
<p><strong>服务器响应:</strong></p>
<pre><code class="language-json">{
&quot;message&quot;: &quot;能量已填满!&quot;,
&quot;energy&quot;: &lt;最新能量&gt;,
&quot;dailyEnergyRefillsUsed&quot;: &lt;当天已使用的能量填满次数&gt;
}</code></pre>