three实现三维城市道路规划缓解拥堵游戏代码
代码语言:html
所属分类:游戏
代码描述:three实现三维城市道路规划缓解拥堵游戏代码,晚高峰来临,车流从 绿色入口 涌向 橙色出口,自动选择最快路线 按住左键拖拽即可规划新路:沿网格自动取直,跨河自动架桥(更贵) 路上的热力条 绿→黄→红 表示拥堵程度,修新路把红色车流分走 在倒计时结束前完成 运送目标 即可过关;全城长时间瘫痪会提前失败 左键画路 / 拆除 右键拖动旋转视角 滚轮缩放 Shift+右键平移 1/2/3/4切换工具 空格暂停 H热力图 Esc取消画路
代码标签: three 三维 城市 道路 规划 缓解 拥堵 游戏 代码
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>治堵工程师 · 3D 路网规划</title>
<link href="https://fonts.googleapis.com/css2?family=ZCOOL+QingKe+HuangYou&family=Noto+Sans+SC:wght@400;500;700;900&display=swap" rel="stylesheet">
<style>
:root{
--sign:#0d7a43; --sign-d:#0a5c34; --amber:#ffc233; --red:#ff5147;
--panel:#10161f; --line:#2c3a4d; --ink:#dfe8f2;
}
*{margin:0;padding:0;box-sizing:border-box;user-select:none;-webkit-user-select:none}
html,body{width:100%;height:100%;overflow:hidden;background:#1a2230;
font-family:'Noto Sans SC',sans-serif;color:var(--ink)}
canvas{display:block}
#c3d{position:fixed;inset:0}
.disp{font-family:'ZCOOL QingKe HuangYou','Noto Sans SC',sans-serif;letter-spacing:.04em}
/* ---------- HUD ---------- */
#hud{position:fixed;inset:0;pointer-events:none;z-index:10}
.panel{background:var(--panel);border:2px solid var(--line);border-radius:10px;
box-shadow:0 5px 0 rgba(0,0,0,.35);padding:10px 14px;pointer-events:auto}
#topbar{position:absolute;top:12px;left:12px;right:12px;display:flex;
justify-content:space-between;align-items:flex-start;gap:12px;flex-wrap:wrap}
#lvlName{font-size:20px;color:var(--amber)}
#topbar .row{display:flex;align-items:center;gap:10px;margin-top:6px}
#timer{font-size:26px;font-weight:900;font-variant-numeric:tabular-nums;min-width:86px}
#prog{width:170px;height:12px;background:#0a0f16;border:1px solid var(--line);border-radius:6px;overflow:hidden}
#progFill{height:100%;width:0%;background:linear-gradient(90deg,#2fd672,#8ff05a);transition:width .3s}
#progText{font-weight:700;font-size:13px;color:#9fb3c8;white-space:nowrap}
#pGauge{text-align:center;min-width:280px}
.lbl{font-size:12px;color:#8ea3ba;letter-spacing:.2em}
#gaugeBar{position:relative;width:240px;height:16px;margin:6px auto 2px;border-radius:8px;
background:linear-gradient(90deg,#22c55e 0%,#f59e0b 55%,#ef4444 85%);overflow:hidden;border:1px solid #000}
#gaugeCover{position:absolute;top:0;right:0;bottom:0;width:100%;background:#0a0f16;transition:width .25s}
#gaugeText{font-size:22px;font-weight:900;font-variant-numeric:tabular-nums}
#pMoney{text-align:right}
#money{display:block;font-size:30px;font-weight:900;color:var(--amber);font-variant-numeric:tabular-nums}
#money.shake{animation:shake .35s}
@keyframes shake{0%,100%{transform:translateX(0)}25%{transform:translateX(-5px)}75%{transform:translateX(5px)}}
#jamWarn{position:absolute;top:96px;left:50%;transform:translateX(-50%);display:none;
background:repeating-linear-gradient(45deg,#1c1c1c 0 14px,var(--amber) 14px 28px);
padding:4px;border-radius:8px;pointer-events:none}
#jamWarn span{display:block;background:#1c1c1c;color:var(--amber);font-weight:900;
padding:6px 18px;border-radius:5px;font-size:15px}
#toastWrap{position:absolute;top:150px;left:50%;transform:translateX(-50%);
display:flex;flex-direction:column;gap:8px;align-items:center;pointer-events:none}
.toast{background:linear-gradient(var(--sign),var(--sign-d));border:3px solid #fff;
outline:3px solid var(--sign-d);border-radius:10px;padding:8px 20px;font-weight:700;
color:#fff;box-shadow:0 6px 0 rgba(0,0,0,.35);animation:tin .3s ease-out}
.toast.bad{background:linear-gradient(#c73e36,#9c2d27);outline-color:#9c2d27}
@keyframes tin{from{transform:translateY(-16px);opacity:0}to{transform:none;opacity:1}}
/* ---------- 工具栏 ---------- */
#toolbar{position:absolute;bottom:14px;left:50%;transform:translateX(-50%);
display:flex;flex-direction:column;align-items:center;pointer-events:auto}
#toolRow{display:flex;gap:8px;flex-wrap:wrap;justify-content:center}
.tool{background:#1a2432;border:2px solid #35455c;border-radius:8px;color:var(--ink);
padding:9px 13px;font-size:14px;font-weight:700;cursor:pointer;box-shadow:0 3px 0 #05080c;
transition:transform .12s,border-color .12s,background .12s;font-family:inherit;display:flex;flex-direction:column;align-items:center;min-width:86px}
.tool small{font-weight:400;color:#8ea3ba;font-size:11px;margin-top:2px}
.tool:hover{transform:translateY(-2px);border-color:var(--amber)}
.tool.active{background:var(--amber);color:#141a22;border-color:#fff}
.tool.active small{color:#5c4a12}
.tgl{min-width:auto;flex-direction:row;gap:6px;padding:9px 12px}
.tgl.on{background:#22c55e;border-color:#fff;color:#06281a}
#stripe{width:100%;height:8px;margin-top:10px;border-radius:4px;
background:repeating-linear-gradient(45deg,#e9b93c 0 12px,#171717 12px 24px);opacity:.85}
#hint{position:absolute;bottom:16px;left:16px;font-size:12px;color:#7e93aa;
background:rgba(10,15,22,.7);padding:8px 12px;border-radius:8px;max-width:270px;line-height:1.7;pointer-events:none}
#hint b{color:var(--amber)}
#sideMinimap{position:absolute;right:14px;bottom:14px;pointer-events:auto}
#minimap{display:block;border-radius:6px;background:#0b111a}
#legend{display:flex;gap:10px;margin-top:8px;font-size:11px;color:#9fb3c8;align-items:center;flex-wrap:wrap}
.dot{display:inline-block;width:9px;height:9px;border-radius:2px;margin-right:4px;vertical-align:-1px}
#costTag{position:fixed;display:none;z-index:30;pointer-events:none;background:#141a22;
border:2px solid var(--amber);color:var(--amber);font-weight:900;padding:4px 10px;border-radius:8px;font-size:14px}
#costTag.bad{border-color:var(--red);color:var(--red)}
.float{position:fixe.........完整代码请登录后点击上方下载按钮下载查看















网友评论0