three实现三维街头咖啡飞车游戏代码
代码语言:html
所属分类:其他
代码由minimax-m3.1-flash ai生成,可能有错误,仅供参考:点击查看提示词
代码描述:三维街头咖啡飞车游戏
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no,viewport-fit=cover" />
<meta name="theme-color" content="#bfe9ff" />
<meta name="description" content="CAFÉ GANG · 街头咖啡飞车 —— Three.js 卡通描边风格驾驶小游戏" />
<title>CAFÉ GANG · 街头咖啡飞车</title>
<style>
/* ============================================================
CAFÉ GANG —— 漫画风 UI
============================================================ */
:root{
--ink:#1d1a22;
--cream:#fff6df;
--pink:#ffb3c7;
--mint:#a6e7cd;
--orange:#ffb45c;
--sky:#a8d9f2;
--yellow:#ffe27a;
--red:#ff6b6b;
--lav:#c9b6f2;
--teal:#5fc9c4;
--shadow: 5px 5px 0 var(--ink);
--shadow-sm: 3px 3px 0 var(--ink);
--font:"Comic Sans MS","Chalkboard SE","Comic Neue","PingFang SC","Hiragino Sans GB","Microsoft YaHei",system-ui,-apple-system,sans-serif;
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{margin:0;padding:0;height:100%;overflow:hidden;background:#bfe9ff;
font-family:var(--font);color:var(--ink);-webkit-user-select:none;user-select:none;touch-action:none}
#stage{position:fixed;inset:0}
canvas{display:block;width:100%;height:100%;outline:none}
/* 通用漫画面板 */
.panel{
background:var(--cream);
border:3px solid var(--ink);
border-radius:16px;
box-shadow:var(--shadow);
padding:10px 14px;
}
.btn{
font-family:var(--font);font-weight:700;font-size:15px;color:var(--ink);
background:var(--yellow);border:3px solid var(--ink);border-radius:12px;
padding:8px 14px;cursor:pointer;box-shadow:var(--shadow-sm);
transition:transform .06s ease,box-shadow .06s ease,background .15s ease;
line-height:1.1;
}
.btn:hover{filter:brightness(1.06)}
.btn:active{transform:translate(3px,3px);box-shadow:0 0 0 var(--ink)}
.btn.pink{background:var(--pink)}
.btn.mint{background:var(--mint)}
.btn.orange{background:var(--orange)}
.btn.sky{background:var(--sky)}
.btn:disabled{opacity:.5;cursor:not-allowed}
/* ---------- 顶栏 ---------- */
#topbar{position:fixed;top:0;left:0;right:0;display:flex;justify-content:space-between;
align-items:flex-start;padding:12px 14px;pointer-events:none;z-index:30;gap:8px}
.tb-group{display:flex;align-items:center;gap:8px;pointer-events:auto}
#brand{display:flex;align-items:center;gap:8px;background:var(--cream);
border:3px solid var(--ink);border-radius:16px;box-shadow:var(--shadow);padding:6px 14px 6px 8px}
#logo{width:38px;height:38px;border-radius:12px;background:var(--orange);
border:3px solid var(--ink);display:flex;align-items:center;justify-content:center;
font-size:20px;box-shadow:inset 0 -4px 0 rgba(0,0,0,.12)}
#brand h1{margin:0;font-size:22px;line-height:1;letter-spacing:.5px;
text-shadow:2px 2px 0 #ffd9e4,3px 3px 0 var(--ink)}
#brand .sub{display:block;font-size:11px;opacity:.75;letter-spacing:2px;margin-top:2px}
.iconbtn{width:42px;height:42px;border-radius:12px;display:flex;align-items:center;justify-content:center;
font-size:19px;background:var(--cream);border:3px solid var(--ink);box-shadow:var(--shadow-sm);
cursor:pointer;transition:transform .06s ease,box-shadow .06s ease}
.iconbtn:hover{filter:brightness(1.07)}
.iconbtn:active{transform:translate(3px,3px);box-shadow:0 0 0 var(--ink)}
.iconbtn.off{background:#ded9d2}
/* ---------- HUD ---------- */
#hud{position:fixed;inset:0;pointer-events:none;z-index:20}
#hud .panel{position:absolute;pointer-events:auto}
#speedPanel{left:14px;bottom:14px;min-width:186px}
#speedPanel .row{display:flex;align-items:flex-end;gap:10px}
#speedVal{font-size:46px;line-height:.9;font-weight:700;
text-shadow:2px 2px 0 #ffd9e4,3px 3px 0 var(--ink)}
#speedPanel .unit{font-size:13px;opacity:.7;padding-bottom:5px}
.gauge{position:relative;width:66px;height:66px;margin-left:auto;flex:none}
.gauge svg{position:absolute;inset:0;width:100%;height:100%}
#needle{position:absolute;left:50%;top:50%;width:4px;height:26px;background:var(--red);
border:2px solid var(--ink);border-radius:3px;transform-origin:50% 100%;
transform:translate(-50%,-100%) rotate(-120deg);transition:transform .08s linear}
.gauge .hub{position:absolute;left:50%;top:50%;width:12px;height:12px;background:var(--cream);
border:3px solid var(--ink);border-radius:50%;transform:translate(-50%,-50%)}
.gear-row{display:flex;align-items:center;gap:6px;margin-top:8px}
.gear-label{font-size:11px;opacity:.7}
.gears{display:flex;gap:4px}
.gears span{width:24px;height:24px;display:flex;align-items:center;justify-content:center;
font-size:13px;font-weight:700;border:2px solid var(--ink);border-radius:8px;background:#fff;opacity:.45}
.gears span.on{background:var(--yellow);opacity:1;box-shadow:2px 2px 0 var(--ink)}
.gear-bar{margin-top:7px;height:9px;background:#fff;border:2px solid var(--ink);border-radius:6px;overflow:hidden}
#gearFill{height:100%;width:0%;background:linear-gradient(90deg,var(--mint),var(--yellow),var(--red));
transition:width .1s linear}
#notePanel{right:14px;bottom:14px;min-width:150px;text-align:right}
#notePanel .np{display:flex;align-items:center;justify-content:flex-end;gap:6px}
#notePanel .ni{font-size:26px;color:#e8449a;text-shadow:2px 2px 0 var(--ink)}
#noteCount{font-size:34px;font-weight:700;text-shadow:2px 2px 0 #ffd9e4,3px 3px 0 var(--ink)}
#notePanel .combo{margin-top:4px;font-size:20px;font-weight:700;color:#e8449a;
text-shadow:2px 2px 0 var(--ink)}
.combo-bar{margin-top:5px;height:8px;background:#fff;border:2px solid var(--ink);border-radius:6px;overflow:hidden}
#comboFill{height:100%;width:0%;background:linear-gradient(90deg,var(--pink),var(--orange))}
#distPanel{position:fixed;left:50%;transform:translateX(-50%);bottom:14px;top:auto;
width:min(46vw,420px);
background:rgba(255,246,223,.92);border:3px solid var(--ink);border-radius:14px;
box-shadow:var(--shadow);padding:7px 12px 9px;pointer-events:none}
.dist-label{font-size:12px;text-align:center;letter-spacing:1px}
.dist-label b{font-size:16px}
.dist-bar{margin-top:5px;height:12px;background:#fff;border:2px solid var(--ink);border-radius:7px;position:relative;overflow:hidden}
#distFill{position:absolute;inset:0;width:0%;background:repeating-linear-gradient(45deg,var(--sky) 0 10px,var(--mint) 10px 20px)}
.dist-car{position:absolute;top:50%;left:0;transform:translate(-50%,-50%);font-size:15px;transition:left .12s linear}
/* ---------- 覆盖层 ---------- */
.overlay{position:fixed;inset:0;z-index:40;display:none;align-items:center;justify-content:center;
background:rgba(29,26,34,.55);backdrop-filter:blur(3px);padding:16px}
.overlay.show{display:flex}
.card{background:var(--cream);border:4px solid var(--ink);border-radius:24px;box-shadow:8px 8px 0 var(--ink);
padding:22px 26px;max-width:min(94vw,560px);width:100%;max-height:92vh;overflow:auto;text-align:center}
.card h2{margin:0 0 4px;font-size:30px;letter-spacing:1px;text-shadow:3px 3px 0 #ffd9e4}
.card p{margin:6px 0;line-height:1.5}
.badge{display:inline-block;background:var(--lav);border:3px solid var(--ink);border-radius:999px;
padding:3px 14px;font-size:12px;letter-spacing:2px;margin-bottom:10px}
.title-cafe{font-size:clamp(38px,9vw,68px);margin:4px 0 0;letter-spacing:2px;
color:#fff;text-shadow:4px 4px 0 #ff6b6b,8px 8px 0 var(--ink)}
.title-cafe .accent{color:var(--yellow)}
.sub-title{font-size:14px;letter-spacing:4px;opacity:.75;margin:2px 0 14px}
.keys{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:8px;margin:14px 0;text-align:left}
.keyrow{display:flex;align-items:center;gap:8px;background:#fff;border:2px solid var(--ink);
border-radius:10px;padding:6px 10px;font-size:13px}
.kbd{display:inline-flex;align-items:center;justify-content:center;min-width:26px;height:24px;padding:0 6px;
background:var(--yellow);border:2px solid var(--ink);border-radius:6px;font-size:12px;font-weight:700;
box-shadow:2px 2px 0 var(--ink)}
.big-btn{font-size:22px;padding:12px 30px;border-radius:16px;background:var(--red);color:#fff;
text-shadow:2px 2px 0 var(--ink);box-shadow:6px 6px 0 var(--ink)}
.big-btn:active{transform:translate(4px,4px);box-shadow:2px 2px 0 var(--ink)}
.tip{font-size:12px;opacity:.7;margin-top:12px}
/* ---------- 设置抽屉 ---------- */
#settings{position:fixed;top:0;right:0;bottom:0;width:min(88vw,330px);z-index:50;
background:var(--cream);border-left:4px solid var(--ink);box-shadow:-8px 0 0 rgba(29,26,34,.25);
transform:translateX(105%);transition:transform .28s cubic-bezier(.2,.9,.3,1.2);
display:flex;flex-direction:column}
#settings.open{transform:translateX(0)}
#settings header{display:flex;align-items:center;justify-content:space-between;padding:14px 16px 8px}
#settings h3{margin:0;font-size:19px;letter-spacing:1px}
#setBody{padding:6px 16px 20px;overflow-y:auto;flex:1}
.set-row{margin:14px 0}
.set-row label{display:flex;justify-content:space-between;font-size:13px;margin-bottom:7px}
.set-row label b{font-weight:700}
input[type=range]{-webkit-appearance:none;appearance:none;width:100%;height:14px;background:#fff;
border:3px solid var(--ink);border-radius:9px;outline:none}
input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:22px;height:22px;border-radius:50%;
background:var(--orange);border:3px solid var(--ink);cursor:pointer;box-shadow:2px 2px 0 var(--ink)}
input[type=range]::-moz-range-thumb{width:20px;height:20px;border-radius:50%;background:var(--orange);
border:3px solid var(--ink);cursor:pointer}
.seg{display:flex;gap:6px}
.seg button{flex:1;font-family:var(--font);font-weight:700;font-size:13px;padding:7px 0;cursor:pointer;
background:#fff;border:3px solid var(--ink);border-radius:10px;box-shadow:var(--sh.........完整代码请登录后点击上方下载按钮下载查看















网友评论0