js实现2d建桥游戏代码
代码语言:html
所属分类:游戏
代码描述: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