js实现2d建桥游戏代码

代码语言:html

所属分类:游戏

代码描述:js实现2d建桥游戏代码

代码标签: js 2d 建桥 游戏 代码

下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开

<!DOCTYPE html>
<html lang="en" >

<head>
  <meta charset="UTF-8">
  

  
  
<style>
* {
        margin: 0;
        padding: 0;
        box-sizing: border-box;
      }
      body {
        overflow: hidden;
        background: #87ceeb;
        font-family: Arial, sans-serif;
        user-select: none;
      }
      #container {
        width: 100vw;
        height: 100vh;
        position: relative;
      }
      #threeCanvas {
        position: absolute;
        top: 0;
        left: 0;
      }

      /* Top bar */
      #topBar {
        position: absolute;
        top: 10px;
        left: 50%;
        transform: translateX(-50%);
        display: flex;
        align-items: center;
        gap: 20px;
        z-index: 100;
      }
      #statusText {
        color: white;
        background: rgba(0, 0, 0, 0.7);
        padding: 8px 16px;
        border-radius: 4px;
        font-size: 16px;
        font-weight: bold;
        white-space: nowrap;
      }
      #budgetDisplay {
        color: white;
        background: rgba(0, 0, 0, 0.7);
        padding: 8px 16px;
        border-radius: 4px;
        font-size: 14px;
        white-space: nowrap;
      }

      /* Material selector */
      #materialPanel {
        position: absolute;
        top: 60px;
        left: 10px;
        display: flex;
        flex-direction: column;
        gap: 6px;
        z-index: 100;
      }
      .mat-btn {
        background: rgba(0, 0, 0, 0.7);
        color: white;
        border: 2px solid transparent;
        padding: 8px 12px;
        border-radius: 4px;
        cursor: pointer;
        font-size: 13px;
        text-align: left;
        transition: border-color 0.15s, background 0.15s;
        min-width: 140px;
      }
      .mat-btn:hover {
        background: rgba(40, 40, 40, 0.8);
      }
      .mat-btn.active {
        border-color: #00ff88;
        background: rgba(0, 80, 40, 0.8);
      }
      .mat-btn .key-hint {
        float: right;
        opacity: 0.5;
        font-size: 11px;
      }

      /* Bottom controls */
      #bottomBar {
        position: absolute;
        bottom: 10px;
        left: 50%;
        transform: translateX(-50%);
        display: flex;
        gap: 10px;
        z-index: 100;
      }
      .ctrl-btn {
        background: rgba(0, 0, 0, 0.7);
        color: white;
        border: 2px solid transparent;
        padding: 10px 20px;
        border-radius: 4px;
        cursor: pointer;
        font-size: 14px;
        font-weight: bold;
        transition: background 0.15s, border-color 0.15s;
      }
      .ctrl-btn:hover {
        background: rgba(60, 60, 60, 0.8);
      }
      .ctrl-btn.play-btn {
        border-color: #4caf50;
        min-width: 100px;
      }
      .ctrl-btn.delete-btn.active {
        border-color: #f44336;
        background: rgba(120, 20, 20, 0.8);
      }

      /* Instructions */
      #instructions {
        position: absolute;
        bottom: 60px;
        left: 50%;
        transform: translateX(-50%);
        color: white;
        background: rgba(0, 0, 0, 0.5);
        padding: 6px 12px;
        border-radius: 4px;
        font-size: 12px;
        z-index: 100;
        white-space: nowrap;
      }
</style>


  
</head>

<body translate="no">
  <div id="container">
      <canvas id="threeCanvas"></canvas>

      <div id="topBar">
        <div id="statusText">Build your bridge!</div>
        <div id="budgetDisplay">Budget: $5000 / $5000</div>
      </div>

      <div id="materialPanel">
        <button class="mat-btn active" data-material="ROAD">
          Road - $100/u <span class="key-hint">1</span>
        </button>
        <button class="mat-btn" data-material="WOOD">
          Wood - $50/u <span class="key-hint">2</span>
        </button>
        <button class="mat-btn" data-material="STEEL">
          Steel - $200/u <span class="key-hint">3</span>
        </button>
        <button class="mat-btn" data-material="ROPE">
          Rope - $30/u <span class="key-hint">4</span>
        </button>
      </div>

      <div id="bottomBar">
        <button class="ctrl-btn play-btn" id="playBtn">Play (Space)</button>
        <button class="ctrl-btn" id="resetBtn" style="display:none">Reset (R)</button>
        <button class="ctrl-btn delete-btn" id="deleteBtn">Delete (D)</button>
        <button class="ctrl-btn" id="clearBtn">Clear All</button>
        <button class="ctrl-btn" id="exampleBtn">Example (E)</button>
      </div>

      <div id="instructions">
        Click & drag between nodes to build. Anchor points (red) are fixed.
      </div>
    </div>
  
    <script >
async function initLibraries() {
  if (document.readyState === "loading") {
    await new Promise(resolve => {
      document.addEventListener("DOMContentLoaded", resolve, { once: true });
    });
  }

  const THREE = await import("https://esm.sh/three");
  window.THREE = THREE;

  const { d.........完整代码请登录后点击上方下载按钮下载查看

网友评论0