You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JS增量游戏开发问题:从对象数组获取返回值并更新HTML

嘿,刚学JS几周就动手做增量游戏,这进度超棒的!针对你提到的「从UPGRADES对象创建数组」「用对象属性写比较逻辑」「更新HTML内容」这几个核心问题,我给你一步步拆解解决方案:

一、从UPGRADES对象生成数组

你的UPGRADES是键值对结构的对象,要把里面的所有升级项转成数组很简单,用Object.values()方法就能直接提取所有值组成数组,后续遍历、操作会更方便:

// 补全后的UPGRADES示例(假设required开头属性为requiredScience)
var UPGRADES = {
  newClothes: {
    name: "New Clothes",
    desc: "Give your bums a new look and some more motivation! Bum production bonus: 100%",
    moneyCost: 1000,
    scienceCost: 10,
    requiredScience: 5
  }
  // 可添加更多升级项...
};

// 转成数组
const upgradesList = Object.values(UPGRADES);

现在upgradesList就是包含所有升级项对象的数组啦~

二、用对象属性写比较语句

要判断玩家是否有足够资源购买升级,直接通过对象的点语法获取属性值即可。先定义玩家资源对象:

// 玩家当前资源示例
const player = {
  money: 1200,
  science: 15,
  productionRate: 10 // 基础bum产量
};

然后遍历升级数组,编写条件判断逻辑:

upgradesList.forEach(upgrade => {
  // 检查是否满足购买条件:钱够、科技点够、满足前置要求
  const canPurchase = 
    player.money >= upgrade.moneyCost && 
    player.science >= upgrade.scienceCost && 
    player.science >= upgrade.requiredScience;

  if (canPurchase) {
    console.log(`可以购买「${upgrade.name}」啦!`);
  } else {
    console.log(`还买不起「${upgrade.name}」,继续攒资源吧~`);
  }
});

核心就是用upgrade.moneyCost、player.science这类方式获取属性值,代入比较逻辑即可。

三、动态更新HTML内容

要把升级项信息渲染到页面并根据状态更新UI,用DOM操作实现即可。先在HTML里准备容器:

<div id="upgrades-container"></div>

然后编写JS逻辑生成并更新内容:

function renderUpgrades() {
  const container = document.getElementById('upgrades-container');
  // 先清空容器避免重复渲染
  container.innerHTML = '';

  upgradesList.forEach(upgrade => {
    const canPurchase = 
      player.money >= upgrade.moneyCost && 
      player.science >= upgrade.scienceCost && 
      player.science >= upgrade.requiredScience;

    // 创建单个升级项卡片
    const upgradeCard = document.createElement('div');
    // 根据购买状态添加类名,方便CSS区分样式
    upgradeCard.className = `upgrade-card ${canPurchase ? 'available' : 'unavailable'}`;

    // 填充卡片内容
    upgradeCard.innerHTML = `
      <h3>${upgrade.name}</h3>
      <p>${upgrade.desc}</p>
      <div class="cost">
        <span>金钱:${upgrade.moneyCost}</span>
        <span>科技点:${upgrade.scienceCost}</span>
      </div>
      <button 
        ${!canPurchase ? 'disabled' : ''} 
        onclick="buyUpgrade('${upgrade.name}')"
      >
        ${canPurchase ? '购买' : '资源不足'}
      </button>
    `;

    // 将卡片加入容器
    container.appendChild(upgradeCard);
  });
}

// 购买升级的函数
function buyUpgrade(upgradeName) {
  // 找到对应的升级项
  const targetUpgrade = upgradesList.find(item => item.name === upgradeName);
  if (!targetUpgrade) return;

  // 扣减玩家资源
  player.money -= targetUpgrade.moneyCost;
  player.science -= targetUpgrade.scienceCost;

  // 应用升级效果(比如产量提升100%)
  player.productionRate *= 2;

  // 更新UI:重新渲染升级列表和玩家状态
  renderUpgrades();
  renderPlayerStats(); // 需自行实现,用于显示当前资源、产量等信息
}

// 页面加载时首次渲染
renderUpgrades();

之后每次玩家资源变化或购买升级后,调用renderUpgrades()就能更新页面内容啦~

内容的提问来源于stack exchange,提问作者bejewelled

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:36:33