@@ -0,0 +1,2487 @@
<!DOCTYPE html>
< html lang = "zh-CN" class = "dark" data-theme = "dark" >
< head >
< meta charset = "UTF-8" >
< meta name = "viewport" content = "width=device-width, initial-scale=1.0" >
< title > RedCircuit 红石回路 - 完整开发文档< / title >
< style id = "theme-vars" >
@import url('https://fonts.googleapis.com/css2?family=Press+Start+2P&family=JetBrains+Mono:wght@400; 500;600;700&family=Noto+Sans+SC:wght@400; 500;700;900&display=swap');
:root {
--rc-primary-50:#FEF2F2;--rc-primary-100:#FEE2E2;--rc-primary-200:#FECACA;--rc-primary-300:#FCA5A5;--rc-primary-400:#F87171;--rc-primary-500:#E83229;--rc-primary-600:#DC2626;--rc-primary-700:#B91C1C;--rc-primary-800:#991B1B;--rc-primary-900:#7F1D1D;
--rc-neutral-0:#FFFFFF;--rc-neutral-50:#F6F7F8;--rc-neutral-100:#E3E6EA;--rc-neutral-200:#C7CCD3;--rc-neutral-300:#9BA3AE;--rc-neutral-400:#6B7280;--rc-neutral-500:#4B5563;--rc-neutral-600:#374151;--rc-neutral-700:#2A3441;--rc-neutral-800:#1C2230;--rc-neutral-850:#161B22;--rc-neutral-900:#0E1116;--rc-neutral-950:#080B0F;
--state-success:#3FB950;--state-warning:#D29922;--state-error:#F85149;--state-info:#58A6FF;
--rc-radius-small:2px;--rc-radius-medium:8px;--rc-radius-large:12px;--rc-radius-full:9999px;
--rc-font-pixel:'Press Start 2P','JetBrains Mono',monospace;--rc-font-mono:'JetBrains Mono','Cascadia Code',Consolas,monospace;--rc-font-body:'Noto Sans SC',system-ui,-apple-system,'Segoe UI',sans-serif;
--rc-background:#F6F7F8;--rc-foreground:#0E1116;--rc-card:#FFFFFF;--rc-card-foreground:#0E1116;--rc-popover:#FFFFFF;--rc-popover-foreground:#0E1116;--rc-primary:#E83229;--rc-primary-foreground:#FFFFFF;--rc-muted:#E3E6EA;--rc-muted-foreground:#6B7280;--rc-border:#C7CCD3;--rc-input:#E3E6EA;--rc-ring:#E83229;
--rc-surface-1:#FFFFFF;--rc-surface-2:#F6F7F8;--rc-surface-3:#E3E6EA;
--rc-grid-line:rgba(42,52,65,0.08);--rc-grid-dot:rgba(42,52,65,0.12);--rc-trace:rgba(232,50,41,0.15);--rc-trace-glow:rgba(232,50,41,0.35);
}
.dark {
--rc-background:#0E1116;--rc-foreground:#E8EAED;--rc-card:#161B22;--rc-card-foreground:#E8EAED;--rc-popover:#1C2230;--rc-popover-foreground:#E8EAED;--rc-primary:#E83229;--rc-primary-foreground:#FFFFFF;--rc-muted:#1C2230;--rc-muted-foreground:#8B949E;--rc-border:#2A3441;--rc-input:#1C2230;--rc-ring:#E83229;
--rc-surface-1:#161B22;--rc-surface-2:#1C2230;--rc-surface-3:#2A3441;
--rc-grid-line:rgba(139,148,158,0.06);--rc-grid-dot:rgba(139,148,158,0.10);--rc-trace:rgba(232,50,41,0.12);--rc-trace-glow:rgba(232,50,41,0.30);
}
.font-pixel{font-family:var(--rc-font-pixel);letter-spacing:0.02em;line-height:1.4;}
.font-mono{font-family:var(--rc-font-mono);letter-spacing:-0.01em;}
.font-body{font-family:var(--rc-font-body);}
.text-pixel-lg{font-family:var(--rc-font-pixel);font-size:1.5rem;line-height:1.6;letter-spacing:0.02em;}
.text-pixel-sm{font-family:var(--rc-font-pixel);font-size:0.625rem;line-height:1.8;letter-spacing:0.05em;}
.text-mono{font-family:var(--rc-font-mono);font-size:0.8125rem;letter-spacing:-0.01em;}
.text-mono-sm{font-family:var(--rc-font-mono);font-size:0.6875rem;letter-spacing:0;}
.pixel-border{border:2px solid var(--rc-border);box-shadow:0 0 0 2px var(--rc-background),0 0 0 4px var(--rc-border);}
.pixel-corner{clip-path:polygon(0 4px,4px 4px,4px 0,calc(100% - 4px) 0,calc(100% - 4px) 4px,100% 4px,100% calc(100% - 4px),calc(100% - 4px) calc(100% - 4px),calc(100% - 4px) 100%,4px 100%,4px calc(100% - 4px),0 calc(100% - 4px));}
.circuit-grid{background-image:linear-gradient(var(--rc-grid-line) 1px,transparent 1px),linear-gradient(90deg,var(--rc-grid-line) 1px,transparent 1px);background-size:24px 24px;}
.circuit-grid-dots{background-image:radial-gradient(var(--rc-grid-dot) 1px,transparent 1px);background-size:16px 16px;}
.pcb-traces{background-image:linear-gradient(var(--rc-trace) 1px,transparent 1px),linear-gradient(90deg,var(--rc-trace) 1px,transparent 1px),radial-gradient(var(--rc-trace-glow) 1.5px,transparent 2px);background-size:48px 48px,48px 48px,48px 48px;background-position:0 0,0 0,24px 24px;}
.redstone-glow{box-shadow:0 0 8px var(--rc-trace-glow),0 0 16px rgba(232,50,41,0.15);}
.redstone-text-glow{text-shadow:0 0 8px rgba(232,50,41,0.4);}
.dark ::-webkit-scrollbar{width:8px;height:8px;}
.dark ::-webkit-scrollbar-track{background:var(--rc-neutral-900);}
.dark ::-webkit-scrollbar-thumb{background:var(--rc-neutral-700);border-radius:2px;}
.dark ::-webkit-scrollbar-thumb:hover{background:var(--rc-neutral-600);}
< / style >
< script src = "https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4.3.1/dist/index.global.js" > < / script >
< script src = "https://unpkg.com/lucide@1.8.0/dist/umd/lucide.min.js" > < / script >
< style type = "text/tailwindcss" >
@theme inline {
--color-background: var(--rc-background);
--color-foreground: var(--rc-foreground);
--color-card: var(--rc-card);
--color-card-foreground: var(--rc-card-foreground);
--color-popover: var(--rc-popover);
--color-popover-foreground: var(--rc-popover-foreground);
--color-primary: var(--rc-primary);
--color-primary-foreground: var(--rc-primary-foreground);
--color-muted: var(--rc-muted);
--color-muted-foreground: var(--rc-muted-foreground);
--color-border: var(--rc-border);
--color-input: var(--rc-input);
--color-ring: var(--rc-ring);
--radius-sm: var(--rc-radius-small);
--radius-md: var(--rc-radius-medium);
--radius-lg: var(--rc-radius-large);
}
@layer base {
body { background: var(--rc-background); color: var(--rc-foreground); }
td, th { @apply break-words; word-break: break-all; word-break: auto-phrase; }
th { @apply whitespace-nowrap; }
}
< / style >
< style id = "semantic-token-fallback" >
.bg-background{background-color:var(--rc-background);}.text-background{color:var(--rc-background);}.border-background{border-color:var(--rc-background);}.ring-background{--tw-ring-color:var(--rc-background);}
.bg-foreground{background-color:var(--rc-foreground);}.text-foreground{color:var(--rc-foreground);}.border-foreground{border-color:var(--rc-foreground);}.ring-foreground{--tw-ring-color:var(--rc-foreground);}
.bg-card{background-color:var(--rc-card);}.text-card{color:var(--rc-card);}.border-card{border-color:var(--rc-card);}.ring-card{--tw-ring-color:var(--rc-card);}
.bg-card-foreground{background-color:var(--rc-card-foreground);}.text-card-foreground{color:var(--rc-card-foreground);}.border-card-foreground{border-color:var(--rc-card-foreground);}.ring-card-foreground{--tw-ring-color:var(--rc-card-foreground);}
.bg-popover{background-color:var(--rc-popover);}.text-popover{color:var(--rc-popover);}.border-popover{border-color:var(--rc-popover);}.ring-popover{--tw-ring-color:var(--rc-popover);}
.bg-popover-foreground{background-color:var(--rc-popover-foreground);}.text-popover-foreground{color:var(--rc-popover-foreground);}.border-popover-foreground{border-color:var(--rc-popover-foreground);}.ring-popover-foreground{--tw-ring-color:var(--rc-popover-foreground);}
.bg-primary{background-color:var(--rc-primary);}.text-primary{color:var(--rc-primary);}.border-primary{border-color:var(--rc-primary);}.ring-primary{--tw-ring-color:var(--rc-primary);}
.bg-primary-foreground{background-color:var(--rc-primary-foreground);}.text-primary-foreground{color:var(--rc-primary-foreground);}.border-primary-foreground{border-color:var(--rc-primary-foreground);}.ring-primary-foreground{--tw-ring-color:var(--rc-primary-foreground);}
.bg-muted{background-color:var(--rc-muted);}.text-muted{color:var(--rc-muted);}.border-muted{border-color:var(--rc-muted);}.ring-muted{--tw-ring-color:var(--rc-muted);}
.bg-muted-foreground{background-color:var(--rc-muted-foreground);}.text-muted-foreground{color:var(--rc-muted-foreground);}.border-muted-foreground{border-color:var(--rc-muted-foreground);}.ring-muted-foreground{--tw-ring-color:var(--rc-muted-foreground);}
.bg-border{background-color:var(--rc-border);}.text-border{color:var(--rc-border);}.border-border{border-color:var(--rc-border);}.ring-border{--tw-ring-color:var(--rc-border);}
.bg-input{background-color:var(--rc-input);}.text-input{color:var(--rc-input);}.border-input{border-color:var(--rc-input);}.ring-input{--tw-ring-color:var(--rc-input);}
.bg-ring{background-color:var(--rc-ring);}.text-ring{color:var(--rc-ring);}.border-ring{border-color:var(--rc-ring);}.ring-ring{--tw-ring-color:var(--rc-ring);}
< / style >
< style >
.no-scrollbar::-webkit-scrollbar{display:none;}.no-scrollbar{-ms-overflow-style:none;scrollbar-width:none;}
[data-icon]{display:inline-flex;align-items:center;justify-content:center;-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:center;mask-position:center;background-color:currentColor;}
< / style >
< style id = "critical-layout" >
*{box-sizing:border-box;}
html{scroll-behavior:smooth;}
body{margin:0;font-family:var(--rc-font-body);background-color:var(--rc-background);color:var(--rc-foreground);overflow-x:hidden;}
.topbar{position:fixed;top:0;left:0;right:0;height:56px;z-index:200;display:flex;align-items:center;gap:16px;padding:0 20px;background-color:var(--rc-surface-2);border-bottom:1px solid var(--rc-border);}
.topbar-logo{font-family:var(--rc-font-pixel);font-size:0.75rem;color:var(--rc-primary);letter-spacing:0.02em;}
.topbar-meta{font-family:var(--rc-font-mono);font-size:0.75rem;color:var(--rc-muted-foreground);}
.topbar-spacer{flex:1;}
.topbar-back{display:inline-flex;align-items:center;gap:6px;font-family:var(--rc-font-mono);font-size:0.75rem;color:var(--rc-muted-foreground);text-decoration:none;padding:6px 12px;border:1px solid var(--rc-border);border-radius:var(--rc-radius-small);transition:color 0.15s ease,border-color 0.15s ease,background-color 0.15s ease;}
.topbar-back:hover{color:var(--rc-primary);border-color:var(--rc-primary);background-color:var(--rc-surface-3);}
.toc-sidebar{position:fixed;top:56px;left:0;width:260px;height:calc(100vh - 56px);overflow-y:auto;background-color:var(--rc-surface-1);border-right:1px solid var(--rc-border);padding:16px 0 40px;}
.toc-title{font-family:var(--rc-font-pixel);font-size:0.5625rem;color:var(--rc-muted-foreground);letter-spacing:0.05em;padding:0 20px 12px;}
.toc-link{display:block;padding:7px 20px;font-family:var(--rc-font-body);font-size:0.8125rem;color:var(--rc-muted-foreground);text-decoration:none;border-left:2px solid transparent;transition:color 0.15s ease,background-color 0.15s ease,border-color 0.15s ease;}
.toc-link:hover,.toc-link.active{color:var(--rc-primary);background-color:var(--rc-surface-2);border-left-color:var(--rc-primary);}
.toc-num{font-family:var(--rc-font-mono);font-size:0.6875rem;margin-right:6px;color:var(--rc-muted-foreground);}
.toc-link:hover .toc-num,.toc-link.active .toc-num{color:var(--rc-primary);}
.doc-main{margin-left:260px;padding-top:56px;}
.doc-container{max-width:900px;margin:0 auto;padding:40px 32px 80px;}
.doc-section{margin-bottom:64px;scroll-margin-top:72px;}
.section-eyebrow{font-family:var(--rc-font-pixel);font-size:0.5625rem;color:var(--rc-primary);letter-spacing:0.08em;margin-bottom:10px;text-transform:uppercase;}
.section-title{font-family:var(--rc-font-body);font-size:1.625rem;font-weight:900;margin:0 0 6px;color:var(--rc-foreground);line-height:1.3;}
.section-desc{color:var(--rc-muted-foreground);font-size:0.9rem;margin:0 0 24px;line-height:1.6;}
.subsection-title{font-family:var(--rc-font-body);font-size:1.125rem;font-weight:700;margin:32px 0 14px;color:var(--rc-foreground);display:flex;align-items:center;gap:10px;}
.subsection-title::before{content:'';width:4px;height:18px;background-color:var(--rc-primary);border-radius:var(--rc-radius-small);}
.body-text{font-size:0.9rem;line-height:1.75;color:var(--rc-foreground);margin:0 0 16px;}
.body-text strong{color:var(--rc-primary);font-weight:700;}
.table-wrap{overflow-x:auto;margin-bottom:24px;border-radius:var(--rc-radius-medium);}
table.doc-table{width:100%;border-collapse:collapse;background-color:var(--rc-card);border:1px solid var(--rc-border);font-size:0.8125rem;}
table.doc-table thead th{background-color:var(--rc-surface-3);color:var(--rc-foreground);text-align:left;padding:11px 14px;font-weight:700;font-family:var(--rc-font-mono);font-size:0.75rem;letter-spacing:0.02em;border-bottom:1px solid var(--rc-border);white-space:nowrap;}
table.doc-table tbody td{padding:10px 14px;border-bottom:1px solid var(--rc-border);color:var(--rc-foreground);vertical-align:top;}
table.doc-table tbody tr:last-child td{border-bottom:none;}
table.doc-table tbody tr{transition:background-color 0.15s ease;}
table.doc-table tbody tr:hover{background-color:var(--rc-surface-2);}
table.doc-table .num{font-family:var(--rc-font-mono);font-variant-numeric:tabular-nums;}
.pill{display:inline-block;font-family:var(--rc-font-mono);font-size:0.6875rem;padding:2px 8px;border-radius:var(--rc-radius-small);border:1px solid var(--rc-border);}
.pill-power{color:var(--state-error);border-color:var(--state-error);}
.pill-wire{color:var(--state-info);border-color:var(--state-info);}
.pill-switch{color:var(--state-warning);border-color:var(--state-warning);}
.pill-output{color:var(--state-success);border-color:var(--state-success);}
.pill-logic{color:var(--rc-primary);border-color:var(--rc-primary);}
.pill-special{color:var(--rc-muted-foreground);border-color:var(--rc-muted-foreground);}
pre.code-block{background-color:var(--rc-surface-2);border:1px solid var(--rc-border);border-radius:var(--rc-radius-medium);padding:18px 20px;overflow-x:auto;font-family:var(--rc-font-mono);font-size:0.78rem;line-height:1.65;color:var(--rc-foreground);margin:0 0 24px;}
pre.code-block .kw{color:var(--rc-primary);}
pre.code-block .fn{color:var(--state-info);}
pre.code-block .cm{color:var(--rc-muted-foreground);}
pre.code-block .st{color:var(--state-success);}
.info-card{background-color:var(--rc-card);border:1px solid var(--rc-border);border-radius:var(--rc-radius-medium);padding:20px;margin-bottom:24px;}
.info-card-title{font-family:var(--rc-font-mono);font-size:0.8125rem;font-weight:700;color:var(--rc-foreground);margin:0 0 12px;}
.kv-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:14px;}
.kv-item{background-color:var(--rc-surface-2);border:1px solid var(--rc-border);border-radius:var(--rc-radius-small);padding:12px 14px;}
.kv-label{font-family:var(--rc-font-mono);font-size:0.6875rem;color:var(--rc-muted-foreground);margin-bottom:4px;}
.kv-value{font-family:var(--rc-font-mono);font-size:0.875rem;font-weight:700;color:var(--rc-foreground);}
.arch-diagram{display:flex;flex-direction:column;align-items:center;gap:0;padding:28px 16px;background-color:var(--rc-card);border:1px solid var(--rc-border);border-radius:var(--rc-radius-medium);margin-bottom:24px;}
.arch-layer{display:flex;gap:12px;flex-wrap:wrap;justify-content:center;width:100%;}
.arch-node{background-color:var(--rc-surface-2);border:1px solid var(--rc-border);border-radius:var(--rc-radius-medium);padding:12px 16px;font-family:var(--rc-font-mono);font-size:0.75rem;text-align:center;min-width:130px;color:var(--rc-foreground);}
.arch-node.client{border-color:var(--rc-primary);background-color:var(--rc-surface-3);}
.arch-node.gateway{border-color:var(--state-info);}
.arch-node.data{border-color:var(--state-warning);}
.arch-node .arch-node-sub{display:block;font-size:0.625rem;color:var(--rc-muted-foreground);margin-top:3px;}
.arch-connector{display:flex;flex-direction:column;align-items:center;padding:6px 0;color:var(--rc-muted-foreground);}
.arch-connector .line{width:2px;height:14px;background-color:var(--rc-border);}
.arch-connector .label{font-family:var(--rc-font-mono);font-size:0.625rem;padding:1px 8px;}
.signal-atten{background-color:var(--rc-surface-2);border:1px solid var(--rc-border);border-radius:var(--rc-radius-medium);padding:20px;margin-bottom:24px;overflow-x:auto;}
.signal-atten-row{display:flex;align-items:center;gap:4px;flex-wrap:nowrap;font-family:var(--rc-font-mono);font-size:0.8125rem;min-width:max-content;}
.signal-atten-cell{padding:6px 10px;border:1px solid var(--rc-border);border-radius:var(--rc-radius-small);background-color:var(--rc-card);font-weight:700;}
.signal-atten-arrow{color:var(--rc-muted-foreground);}
.chain-flow{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:20px;background-color:var(--rc-card);border:1px solid var(--rc-border);border-radius:var(--rc-radius-medium);margin-bottom:24px;}
.chain-node{background-color:var(--rc-surface-2);border:1px solid var(--rc-border);border-radius:var(--rc-radius-small);padding:8px 12px;font-family:var(--rc-font-mono);font-size:0.75rem;}
.chain-arrow{color:var(--rc-primary);font-family:var(--rc-font-mono);font-weight:700;}
.formula-box{background-color:var(--rc-surface-2);border:1px solid var(--rc-border);border-left:3px solid var(--rc-primary);border-radius:var(--rc-radius-medium);padding:16px 20px;margin-bottom:24px;font-family:var(--rc-font-mono);font-size:0.8125rem;color:var(--rc-foreground);overflow-x:auto;}
.doc-footer{margin-left:260px;padding:32px;border-top:1px solid var(--rc-border);background-color:var(--rc-surface-1);text-align:center;}
.doc-footer p{font-family:var(--rc-font-mono);font-size:0.75rem;color:var(--rc-muted-foreground);margin:4px 0;}
.mobile-toggle{display:none;font-family:var(--rc-font-mono);font-size:0.75rem;color:var(--rc-foreground);background:transparent;border:1px solid var(--rc-border);border-radius:var(--rc-radius-small);padding:6px 10px;cursor:pointer;}
@media (max-width:960px){
.toc-sidebar{transform:translateX(-100%);transition:transform 0.25s ease;z-index:150;box-shadow:0 0 24px rgba(0,0,0,0.4);}
.toc-sidebar.open{transform:translateX(0);}
.doc-main{margin-left:0;}
.doc-footer{margin-left:0;}
.mobile-toggle{display:inline-flex;}
.doc-container{padding:28px 18px 60px;}
}
@media (prefers-reduced-motion:reduce){
*,*::before,*::after{animation-duration:0.001ms !important;animation-iteration-count:1 !important;transition-duration:0.001ms !important;scroll-behavior:auto !important;}
html{scroll-behavior:auto;}
}
< / style >
< / head >
< body class = "min-h-screen font-sans antialiased" >
< header class = "topbar" >
< button class = "mobile-toggle" id = "tocToggle" aria-label = "切换目录" > 目录< / button >
< span class = "topbar-logo redstone-text-glow" > RedCircuit< / span >
< span class = "topbar-meta" > 完整开发文档 v1.0< / span >
< span class = "topbar-spacer" > < / span >
< span class = "topbar-meta" > 2026-08-07< / span >
< a class = "topbar-back" href = "../pages/landing.html" data-dom-id = "btn-back-home" >
< svg width = "14" height = "14" viewBox = "0 0 24 24" fill = "none" stroke = "currentColor" stroke-width = "2" stroke-linecap = "round" stroke-linejoin = "round" > < path d = "M19 12H5" / > < path d = "M12 19l-7-7 7-7" / > < / svg >
返回首页
< / a >
< / header >
< aside class = "toc-sidebar" id = "tocSidebar" >
< p class = "toc-title" > 目录 / TABLE OF CONTENTS< / p >
< nav >
< a class = "toc-link" href = "#overview" > < span class = "toc-num" > 01< / span > 项目概述< / a >
< a class = "toc-link" href = "#architecture" > < span class = "toc-num" > 02< / span > 技术架构< / a >
< a class = "toc-link" href = "#tech-stack" > < span class = "toc-num" > 03< / span > 技术栈选型< / a >
< a class = "toc-link" href = "#database" > < span class = "toc-num" > 04< / span > 数据库设计< / a >
< a class = "toc-link" href = "#api" > < span class = "toc-num" > 05< / span > API设计< / a >
< a class = "toc-link" href = "#simulation" > < span class = "toc-num" > 06< / span > 信号仿真引擎< / a >
< a class = "toc-link" href = "#components" > < span class = "toc-num" > 07< / span > 元器件规格手册< / a >
< a class = "toc-link" href = "#game-modes" > < span class = "toc-num" > 08< / span > 游戏模式规则< / a >
< a class = "toc-link" href = "#economy" > < span class = "toc-num" > 09< / span > 货币与经济系统< / a >
< a class = "toc-link" href = "#user-system" > < span class = "toc-num" > 10< / span > 用户系统< / a >
< a class = "toc-link" href = "#milestones" > < span class = "toc-num" > 11< / span > 开发里程碑< / a >
< a class = "toc-link" href = "#deployment" > < span class = "toc-num" > 12< / span > 部署与运维< / a >
< a class = "toc-link" href = "#risks" > < span class = "toc-num" > 13< / span > 风险评估< / a >
< a class = "toc-link" href = "#sprint-plan" > < span class = "toc-num" > 15< / span > Sprint分解与排期< / a >
< a class = "toc-link" href = "#team" > < span class = "toc-num" > 16< / span > 团队组织与职责< / a >
< a class = "toc-link" href = "#client-modules" > < span class = "toc-num" > 17< / span > 客户端模块详设< / a >
< a class = "toc-link" href = "#server-services" > < span class = "toc-num" > 18< / span > 服务端微服务详设< / a >
< a class = "toc-link" href = "#relay-server" > < span class = "toc-num" > 18.5< / span > 联机中转站开发< / a >
< a class = "toc-link" href = "#testing" > < span class = "toc-num" > 19< / span > 测试与质量保障< / a >
< a class = "toc-link" href = "#performance" > < span class = "toc-num" > 20< / span > 性能优化方案< / a >
< a class = "toc-link" href = "#security" > < span class = "toc-num" > 21< / span > 安全实施方案< / a >
< a class = "toc-link" href = "#cicd" > < span class = "toc-num" > 22< / span > CI/CD流水线< / a >
< a class = "toc-link" href = "#budget" > < span class = "toc-num" > 23< / span > 预算与成本估算< / a >
< a class = "toc-link" href = "#rollout" > < span class = "toc-num" > 24< / span > 上线发布策略< / a >
< a class = "toc-link" href = "#appendix" > < span class = "toc-num" > 25< / span > 附录< / a >
< / nav >
< / aside >
< main class = "doc-main" >
< div class = "doc-container circuit-grid-dots" >
<!-- ===== Section 1 ===== -->
< section class = "doc-section" id = "overview" >
< p class = "section-eyebrow" > 01 / OVERVIEW< / p >
< h2 class = "section-title" > 项目概述< / h2 >
< p class = "section-desc" > RedCircuit · 红石回路是一款融合电路图、Minecraft 像素方块与红石逻辑的桌面客户端游戏,配备完整货币经济与用户体系。< / p >
< p class = "body-text" > RedCircuit 将< strong > 电路图工程< / strong > 的严谨性、< strong > 像素方块< / strong > 的视觉表现力与< strong > Minecraft 红石逻辑< / strong > 的创造性玩法结合为一款原生桌面客户端游戏。玩家在 PCB 风格的网格画布上放置元器件、搭建信号回路、解谜闯关、自动化生产,或在多人模式中与他人对战协作。游戏内置红石币与金币双货币体系,支持用户注册登录、等级成长与成就解锁。< / p >
< div class = "info-card" >
< p class = "info-card-title" > 核心定位< / p >
< div class = "kv-grid" >
< div class = "kv-item" > < div class = "kv-label" > 目标平台< / div > < div class = "kv-value" > Windows / macOS 桌面客户端< / div > < / div >
< div class = "kv-item" > < div class = "kv-label" > 发行渠道< / div > < div class = "kv-value" > 官网独立安装包 + 自动更新< / div > < / div >
< div class = "kv-item" > < div class = "kv-label" > 目标受众< / div > < div class = "kv-value" > 红石工程师 / 电路爱好者 / 解谜玩家< / div > < / div >
< div class = "kv-item" > < div class = "kv-label" > 商业模式< / div > < div class = "kv-value" > 免费游玩 + 内购 + 创意工坊分成< / div > < / div >
< / div >
< / div >
< h3 class = "subsection-title" > 核心价值主张< / h3 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 维度< / th > < th > 价值主张< / th > < th > 差异化优势< / th > < / tr > < / thead >
< tbody >
< tr > < td > 玩法深度< / td > < td > 完整还原红石信号强度、衰减、延迟与 BUD 更新机制< / td > < td > 市面同类产品多简化逻辑,本作保留硬核仿真< / td > < / tr >
< tr > < td > 视觉风格< / td > < td > PCB 电路板 × 像素方块混搭美学< / td > < td > 区别于纯像素或纯电路模拟器< / td > < / tr >
< tr > < td > 内容体量< / td > < td > 80 种元器件、240 个解谜关卡、4 大模式< / td > < td > 单机+联机兼顾,内容耐玩度高< / td > < / tr >
< tr > < td > 经济闭环< / td > < td > 红石币产出消耗平衡 + 金币充值 + 创意工坊交易< / td > < td > UGC 生态自循环,降低内容更新成本< / td > < / tr >
< tr > < td > 社交竞技< / td > < td > 多人对战排位赛季 + 协作建造 + 蓝图分享< / td > < td > 红石领域稀缺的竞技化设计< / td > < / tr >
< / tbody >
< / table >
< / div >
< h3 class = "subsection-title" > 关键指标目标< / h3 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 指标< / th > < th > 上线首月目标< / th > < th > 稳定期目标 (M12)< / th > < th > 说明< / th > < / tr > < / thead >
< tbody >
< tr > < td > DAU< / td > < td class = "num" > 15,000< / td > < td class = "num" > 60,000< / td > < td > 日活跃用户< / td > < / tr >
< tr > < td > MAU< / td > < td class = "num" > 80,000< / td > < td class = "num" > 300,000< / td > < td > 月活跃用户< / td > < / tr >
< tr > < td > 次日留存< / td > < td class = "num" > 42%< / td > < td class = "num" > 50%< / td > < td > 新手引导优化后提升< / td > < / tr >
< tr > < td > 七日留存< / td > < td class = "num" > 22%< / td > < td class = "num" > 30%< / td > < td > 关卡内容驱动< / td > < / tr >
< tr > < td > 付费率< / td > < td class = "num" > 3.5%< / td > < td class = "num" > 6%< / td > < td > 金币充值 + 创意工坊< / td > < / tr >
< tr > < td > ARPPU< / td > < td class = "num" > ¥28< / td > < td class = "num" > ¥45< / td > < td > 每付费用户平均收益< / td > < / tr >
< tr > < td > 蓝图上传量< / td > < td class = "num" > 2,000< / td > < td class = "num" > 20,000/月< / td > < td > UGC 生态健康度< / td > < / tr >
< / tbody >
< / table >
< / div >
< / section >
<!-- ===== Section 2 ===== -->
< section class = "doc-section" id = "architecture" >
< p class = "section-eyebrow" > 02 / ARCHITECTURE< / p >
< h2 class = "section-title" > 技术架构< / h2 >
< p class = "section-desc" > 客户端-服务端分离架构,桌面客户端负责渲染与本地仿真,服务端负责账户、经济、联机与内容分发。< / p >
< h3 class = "subsection-title" > 2.1 客户端架构< / h3 >
< p class = "body-text" > 客户端基于 < strong > Unity 2024 LTS (C#)< / strong > 构建,采用 2D 瓦片网格渲染器配合自定义红石信号辉光着色器。UI 层使用 Unity UI Toolkit (UXML/USS) 处理数据密集型界面(商店、背包、排行榜),编辑器画布使用 IMGUI 实现高性能即时绘制。电路仿真引擎为自定义基于 ECS 的信号传播系统,本地存储采用 SQLite 存档、蓝图与设置。< / p >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 模块< / th > < th > 技术方案< / th > < th > 职责< / th > < / tr > < / thead >
< tbody >
< tr > < td > 游戏引擎< / td > < td > Unity 2024 LTS (C#)< / td > < td > 主循环、渲染、资源管理、跨平台打包< / td > < / tr >
< tr > < td > 渲染层< / td > < td > 2D Tile 网格渲染器 + 自定义辉光 Shader< / td > < td > 方块绘制、红石信号高亮、粒子效果< / td > < / tr >
< tr > < td > UI 框架< / td > < td > Unity UI Toolkit (UXML/USS)< / td > < td > 商店、背包、排行榜等数据界面< / td > < / tr >
< tr > < td > 编辑器画布< / td > < td > IMGUI 即时模式< / td > < td > 电路编辑画布高频重绘< / td > < / tr >
< tr > < td > 仿真引擎< / td > < td > 自定义 ECS 信号传播系统< / td > < td > 红石信号强度、衰减、延迟、BUD 计算< / td > < / tr >
< tr > < td > 本地存储< / td > < td > SQLite< / td > < td > 存档、蓝图、设置、离线缓存< / td > < / tr >
< tr > < td > 网络层< / td > < td > Unity Netcode for GameObjects / Photon< / td > < td > 多人实时同步、房间管理< / td > < / tr >
< tr > < td > 反作弊< / td > < td > 客户端预测 + 服务端校验< / td > < td > 多人模式经济与比赛结果验证< / td > < / tr >
< / tbody >
< / table >
< / div >
< h3 class = "subsection-title" > 2.2 服务端架构< / h3 >
< p class = "body-text" > 服务端采用 < strong > Go (Gin 框架)< / strong > 构建 REST API 与 WebSocket 网关,按业务域拆分为五个微服务。主数据库使用 PostgreSQL 存储用户与交易数据,Redis 承担会话缓存、匹配队列与排行榜。文件存储使用 MinIO/S3 存放蓝图与回放,RabbitMQ 处理异步任务(经济结算、成就检查)。< / p >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 微服务< / th > < th > 职责< / th > < th > 主要依赖< / th > < / tr > < / thead >
< tbody >
< tr > < td > auth-service< / td > < td > 注册、登录、Token 签发与刷新、会话管理< / td > < td > PostgreSQL、Redis< / td > < / tr >
< tr > < td > economy-service< / td > < td > 红石币/金币余额、交易流水、商店购买、充值核销< / td > < td > PostgreSQL、RabbitMQ< / td > < / tr >
< tr > < td > blueprint-service< / td > < td > 蓝图上传、检索、购买、下载、评分、分类< / td > < td > PostgreSQL、MinIO< / td > < / tr >
< tr > < td > match-service< / td > < td > 多人匹配、房间状态、对局结果、赛季排位< / td > < td > Redis、RabbitMQ< / td > < / tr >
< tr > < td > social-service< / td > < td > 好友、聊天、公会、成就、动态< / td > < td > PostgreSQL、Redis< / td > < / tr >
< / tbody >
< / table >
< / div >
< h3 class = "subsection-title" > 2.3 网络协议< / h3 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 协议< / th > < th > 数据格式< / th > < th > 适用场景< / th > < / tr > < / thead >
< tbody >
< tr > < td > REST API< / td > < td > JSON< / td > < td > 用户认证、商店、蓝图 CRUD、排行榜查询< / td > < / tr >
< tr > < td > WebSocket< / td > < td > JSON 帧< / td > < td > 多人实时同步、聊天、在线状态< / td > < / tr >
< tr > < td > 二进制协议< / td > < td > Protobuf< / td > < td > 电路编辑器实时协作(增量 Delta 同步)< / td > < / tr >
< tr > < td > 消息队列< / td > < td > AMQP (RabbitMQ)< / td > < td > 经济结算、成就检查等异步任务< / td > < / tr >
< / tbody >
< / table >
< / div >
< h3 class = "subsection-title" > 2.4 系统架构图< / h3 >
< div class = "arch-diagram" >
< div class = "arch-layer" >
< div class = "arch-node client" > 桌面客户端 (Unity 2024 LTS)< span class = "arch-node-sub" > 渲染 / 本地仿真 / 离线存档< / span > < / div >
< / div >
< div class = "arch-connector" > < span class = "line" > < / span > < span class = "label" > HTTPS / WSS< / span > < span class = "line" > < / span > < / div >
< div class = "arch-layer" >
< div class = "arch-node gateway" > API 网关 (Go / Gin)< span class = "arch-node-sub" > 鉴权 / 路由 / 限流< / span > < / div >
< / div >
< div class = "arch-connector" > < span class = "line" > < / span > < span class = "label" > gRPC / 内部调用< / span > < span class = "line" > < / span > < / div >
< div class = "arch-layer" >
< div class = "arch-node" > auth-service< span class = "arch-node-sub" > 认证< / span > < / div >
< div class = "arch-node" > economy-service< span class = "arch-node-sub" > 经济< / span > < / div >
< div class = "arch-node" > blueprint-service< span class = "arch-node-sub" > 蓝图< / span > < / div >
< div class = "arch-node" > match-service< span class = "arch-node-sub" > 匹配< / span > < / div >
< div class = "arch-node" > social-service< span class = "arch-node-sub" > 社交< / span > < / div >
< / div >
< div class = "arch-connector" > < span class = "line" > < / span > < span class = "label" > 持久化 / 缓存 / 对象存储 / 异步< / span > < span class = "line" > < / span > < / div >
< div class = "arch-layer" >
< div class = "arch-node data" > PostgreSQL< span class = "arch-node-sub" > 用户 / 交易< / span > < / div >
< div class = "arch-node data" > Redis< span class = "arch-node-sub" > 会话 / 排行< / span > < / div >
< div class = "arch-node data" > MinIO / S3< span class = "arch-node-sub" > 蓝图 / 回放< / span > < / div >
< div class = "arch-node data" > RabbitMQ< span class = "arch-node-sub" > 异步任务< / span > < / div >
< / div >
< / div >
< h3 class = "subsection-title" > 分层职责总览< / h3 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 层级< / th > < th > 技术< / th > < th > 职责< / th > < / tr > < / thead >
< tbody >
< tr > < td > 表现层< / td > < td > Unity 2024 LTS + UI Toolkit< / td > < td > 渲染、交互、本地仿真展示< / td > < / tr >
< tr > < td > 网关层< / td > < td > Go / Gin + Nginx< / td > < td > 请求路由、JWT 鉴权、限流熔断< / td > < / tr >
< tr > < td > 服务层< / td > < td > 5 个 Go 微服务< / td > < td > 业务逻辑处理、事务编排< / td > < / tr >
< tr > < td > 存储层< / td > < td > PostgreSQL + Redis + MinIO< / td > < td > 持久化、缓存、对象存储< / td > < / tr >
< tr > < td > 消息层< / td > < td > RabbitMQ< / td > < td > 异步解耦、事件驱动< / td > < / tr >
< / tbody >
< / table >
< / div >
< / section >
<!-- ===== Section 3 ===== -->
< section class = "doc-section" id = "tech-stack" >
< p class = "section-eyebrow" > 03 / TECH STACK< / p >
< h2 class = "section-title" > 技术栈选型< / h2 >
< p class = "section-desc" > 各技术领域的选型方案、版本、选型理由与替代方案对照。< / p >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 领域< / th > < th > 技术选型< / th > < th > 版本< / th > < th > 选型理由< / th > < th > 替代方案< / th > < / tr > < / thead >
< tbody >
< tr > < td > 游戏引擎< / td > < td > Unity< / td > < td class = "num" > 2024 LTS< / td > < td > 生态成熟、跨平台打包、Asset Store 资源丰富、C# 开发效率高< / td > < td > Godot 4.x< / td > < / tr >
< tr > < td > 客户端语言< / td > < td > C#< / td > < td class = "num" > 12< / td > < td > Unity 原生语言、强类型、性能优良< / td > < td > GDScript (Godot)< / td > < / tr >
< tr > < td > UI 框架< / td > < td > Unity UI Toolkit< / td > < td class = "num" > 2.0< / td > < td > 类 Web 的 UXML/USS 体系、适合数据密集界面< / td > < td > UGUI、IMGUI< / td > < / tr >
< tr > < td > 后端语言< / td > < td > Go< / td > < td class = "num" > 1.22< / td > < td > 高并发、编译快、内存占用低、适合微服务< / td > < td > Rust、Java< / td > < / tr >
< tr > < td > 后端框架< / td > < td > Gin< / td > < td class = "num" > 1.10< / td > < td > 轻量高性能、中间件生态完善< / td > < td > Echo、Fiber< / td > < / tr >
< tr > < td > 数据库< / td > < td > PostgreSQL< / td > < td class = "num" > 16< / td > < td > 事务可靠、JSONB 支持、扩展性强< / td > < td > MySQL、CockroachDB< / td > < / tr >
< tr > < td > 缓存< / td > < td > Redis< / td > < td class = "num" > 7.2< / td > < td > 低延迟、排行榜 ZSET、会话存储< / td > < td > Valkey、Memcached< / td > < / tr >
< tr > < td > 消息队列< / td > < td > RabbitMQ< / td > < td class = "num" > 3.13< / td > < td > 可靠投递、路由灵活、异步任务解耦< / td > < td > Kafka、NATS< / td > < / tr >
< tr > < td > 文件存储< / td > < td > MinIO / S3< / td > < td class = "num" > -< / td > < td > 兼容 S3 协议、可自托管或上云、成本低< / td > < td > Ceph、阿里云 OSS< / td > < / tr >
< tr > < td > CI/CD< / td > < td > GitHub Actions< / td > < td class = "num" > -< / td > < td > 与代码仓库集成、矩阵构建、自托管 Runner< / td > < td > GitLab CI、Jenkins< / td > < / tr >
< tr > < td > 监控< / td > < td > Prometheus + Grafana< / td > < td class = "num" > 2.50 / 11< / td > < td > 指标采集可视化、告警规则灵活< / td > < td > Datadog、Zabbix< / td > < / tr >
< tr > < td > 错误追踪< / td > < td > Sentry< / td > < td class = "num" > 24< / td > < td > 客户端崩溃与服务端异常统一收集< / td > < td > Bugsnag、Crashlytics< / td > < / tr >
< tr > < td > 数据分析< / td > < td > 自建埋点 + ClickHouse< / td > < td class = "num" > 24< / td > < td > 玩家行为分析、留存漏斗、低成本海量查询< / td > < td > Mixpanel、Amplitude< / td > < / tr >
< / tbody >
< / table >
< / div >
< / section >
<!-- ===== Section 4 ===== -->
< section class = "doc-section" id = "database" >
< p class = "section-eyebrow" > 04 / DATABASE< / p >
< h2 class = "section-title" > 数据库设计< / h2 >
< p class = "section-desc" > 核心实体表结构定义,字段类型、约束与说明。< / p >
< h3 class = "subsection-title" > users · 用户表< / h3 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 字段名< / th > < th > 类型< / th > < th > 约束< / th > < th > 说明< / th > < / tr > < / thead >
< tbody >
< tr > < td > id< / td > < td > BIGSERIAL< / td > < td > PK< / td > < td > 用户主键< / td > < / tr >
< tr > < td > username< / td > < td > VARCHAR(32)< / td > < td > UNIQUE NOT NULL< / td > < td > 用户名< / td > < / tr >
< tr > < td > email< / td > < td > VARCHAR(128)< / td > < td > UNIQUE NOT NULL< / td > < td > 邮箱< / td > < / tr >
< tr > < td > password_hash< / td > < td > VARCHAR(255)< / td > < td > NOT NULL< / td > < td > bcrypt 哈希< / td > < / tr >
< tr > < td > created_at< / td > < td > TIMESTAMPTZ< / td > < td > DEFAULT NOW()< / td > < td > 注册时间< / td > < / tr >
< tr > < td > level< / td > < td > INT< / td > < td > DEFAULT 1< / td > < td > 玩家等级< / td > < / tr >
< tr > < td > exp< / td > < td > INT< / td > < td > DEFAULT 0< / td > < td > 经验值< / td > < / tr >
< tr > < td > redstone_coins< / td > < td > BIGINT< / td > < td > DEFAULT 0< / td > < td > 红石币余额< / td > < / tr >
< tr > < td > gold_coins< / td > < td > INT< / td > < td > DEFAULT 0< / td > < td > 金币余额< / td > < / tr >
< tr > < td > avatar< / td > < td > VARCHAR(255)< / td > < td > NULL< / td > < td > 头像 URL< / td > < / tr >
< tr > < td > status< / td > < td > SMALLINT< / td > < td > DEFAULT 1< / td > < td > 状态 1正常 0封禁< / td > < / tr >
< / tbody >
< / table >
< / div >
< h3 class = "subsection-title" > circuits · 电路表< / h3 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 字段名< / th > < th > 类型< / th > < th > 约束< / th > < th > 说明< / th > < / tr > < / thead >
< tbody >
< tr > < td > id< / td > < td > BIGSERIAL< / td > < td > PK< / td > < td > 电路主键< / td > < / tr >
< tr > < td > user_id< / td > < td > BIGINT< / td > < td > FK -> users.id< / td > < td > 所属用户< / td > < / tr >
< tr > < td > name< / td > < td > VARCHAR(64)< / td > < td > NOT NULL< / td > < td > 电路名称< / td > < / tr >
< tr > < td > data_json< / td > < td > JSONB< / td > < td > NOT NULL< / td > < td > 元件布局与连线数据< / td > < / tr >
< tr > < td > grid_size< / td > < td > VARCHAR(16)< / td > < td > NOT NULL< / td > < td > 画布尺寸 如 64x64< / td > < / tr >
< tr > < td > cost< / td > < td > INT< / td > < td > DEFAULT 0< / td > < td > 元件总成本< / td > < / tr >
< tr > < td > mode< / td > < td > VARCHAR(16)< / td > < td > NOT NULL< / td > < td > 模式 creative/puzzle/auto< / td > < / tr >
< tr > < td > created_at< / td > < td > TIMESTAMPTZ< / td > < td > DEFAULT NOW()< / td > < td > 创建时间< / td > < / tr >
< tr > < td > updated_at< / td > < td > TIMESTAMPTZ< / td > < td > DEFAULT NOW()< / td > < td > 更新时间< / td > < / tr >
< tr > < td > is_public< / td > < td > BOOLEAN< / td > < td > DEFAULT FALSE< / td > < td > 是否公开< / td > < / tr >
< / tbody >
< / table >
< / div >
< h3 class = "subsection-title" > blueprints · 蓝图表< / h3 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 字段名< / th > < th > 类型< / th > < th > 约束< / th > < th > 说明< / th > < / tr > < / thead >
< tbody >
< tr > < td > id< / td > < td > BIGSERIAL< / td > < td > PK< / td > < td > 蓝图主键< / td > < / tr >
< tr > < td > circuit_id< / td > < td > BIGINT< / td > < td > FK -> circuits.id< / td > < td > 关联电路< / td > < / tr >
< tr > < td > author_id< / td > < td > BIGINT< / td > < td > FK -> users.id< / td > < td > 作者< / td > < / tr >
< tr > < td > title< / td > < td > VARCHAR(64)< / td > < td > NOT NULL< / td > < td > 蓝图标题< / td > < / tr >
< tr > < td > description< / td > < td > TEXT< / td > < td > NULL< / td > < td > 蓝图描述< / td > < / tr >
< tr > < td > price< / td > < td > INT< / td > < td > DEFAULT 0< / td > < td > 售价(红石币)< / td > < / tr >
< tr > < td > download_count< / td > < td > INT< / td > < td > DEFAULT 0< / td > < td > 下载数< / td > < / tr >
< tr > < td > rating< / td > < td > NUMERIC(3,2)< / td > < td > DEFAULT 0< / td > < td > 评分 0-5< / td > < / tr >
< tr > < td > category< / td > < td > VARCHAR(32)< / td > < td > NOT NULL< / td > < td > 分类< / td > < / tr >
< tr > < td > created_at< / td > < td > TIMESTAMPTZ< / td > < td > DEFAULT NOW()< / td > < td > 发布时间< / td > < / tr >
< / tbody >
< / table >
< / div >
< h3 class = "subsection-title" > transactions · 交易流水表< / h3 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 字段名< / th > < th > 类型< / th > < th > 约束< / th > < th > 说明< / th > < / tr > < / thead >
< tbody >
< tr > < td > id< / td > < td > BIGSERIAL< / td > < td > PK< / td > < td > 流水主键< / td > < / tr >
< tr > < td > user_id< / td > < td > BIGINT< / td > < td > FK -> users.id< / td > < td > 用户< / td > < / tr >
< tr > < td > type< / td > < td > VARCHAR(16)< / td > < td > NOT NULL< / td > < td > 类型 earn/spend/recharge< / td > < / tr >
< tr > < td > item< / td > < td > VARCHAR(64)< / td > < td > NOT NULL< / td > < td > 项目说明< / td > < / tr >
< tr > < td > amount< / td > < td > BIGINT< / td > < td > NOT NULL< / td > < td > 金额< / td > < / tr >
< tr > < td > currency< / td > < td > VARCHAR(8)< / td > < td > NOT NULL< / td > < td > 货币 redstone/gold< / td > < / tr >
< tr > < td > balance_after< / td > < td > BIGINT< / td > < td > NOT NULL< / td > < td > 交易后余额< / td > < / tr >
< tr > < td > created_at< / td > < td > TIMESTAMPTZ< / td > < td > DEFAULT NOW()< / td > < td > 交易时间< / td > < / tr >
< / tbody >
< / table >
< / div >
< h3 class = "subsection-title" > puzzle_levels · 解谜关卡表< / h3 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 字段名< / th > < th > 类型< / th > < th > 约束< / th > < th > 说明< / th > < / tr > < / thead >
< tbody >
< tr > < td > id< / td > < td > BIGSERIAL< / td > < td > PK< / td > < td > 关卡主键< / td > < / tr >
< tr > < td > chapter< / td > < td > SMALLINT< / td > < td > NOT NULL< / td > < td > 章节 1-6< / td > < / tr >
< tr > < td > level_num< / td > < td > SMALLINT< / td > < td > NOT NULL< / td > < td > 关卡序号< / td > < / tr >
< tr > < td > title< / td > < td > VARCHAR(64)< / td > < td > NOT NULL< / td > < td > 关卡标题< / td > < / tr >
< tr > < td > description< / td > < td > TEXT< / td > < td > NULL< / td > < td > 关卡描述< / td > < / tr >
< tr > < td > target_json< / td > < td > JSONB< / td > < td > NOT NULL< / td > < td > 通关目标条件< / td > < / tr >
< tr > < td > constraints_json< / td > < td > JSONB< / td > < td > NOT NULL< / td > < td > 限制规则< / td > < / tr >
< tr > < td > star_cost< / td > < td > SMALLINT< / td > < td > NOT NULL< / td > < td > 成本星条件< / td > < / tr >
< tr > < td > star_delay< / td > < td > SMALLINT< / td > < td > NOT NULL< / td > < td > 延迟星条件< / td > < / tr >
< tr > < td > reward< / td > < td > INT< / td > < td > NOT NULL< / td > < td > 通关奖励红石币< / td > < / tr >
< / tbody >
< / table >
< / div >
< h3 class = "subsection-title" > multiplayer_matches · 多人对局表< / h3 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 字段名< / th > < th > 类型< / th > < th > 约束< / th > < th > 说明< / th > < / tr > < / thead >
< tbody >
< tr > < td > id< / td > < td > BIGSERIAL< / td > < td > PK< / td > < td > 对局主键< / td > < / tr >
< tr > < td > mode< / td > < td > VARCHAR(16)< / td > < td > NOT NULL< / td > < td > 对战模式< / td > < / tr >
< tr > < td > status< / td > < td > VARCHAR(16)< / td > < td > NOT NULL< / td > < td > 状态 waiting/playing/ended< / td > < / tr >
< tr > < td > players_json< / td > < td > JSONB< / td > < td > NOT NULL< / td > < td > 玩家列表与分数< / td > < / tr >
< tr > < td > result_json< / td > < td > JSONB< / td > < td > NULL< / td > < td > 对局结果< / td > < / tr >
< tr > < td > started_at< / td > < td > TIMESTAMPTZ< / td > < td > NULL< / td > < td > 开始时间< / td > < / tr >
< tr > < td > ended_at< / td > < td > TIMESTAMPTZ< / td > < td > NULL< / td > < td > 结束时间< / td > < / tr >
< / tbody >
< / table >
< / div >
< h3 class = "subsection-title" > achievements · 成就表< / h3 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 字段名< / th > < th > 类型< / th > < th > 约束< / th > < th > 说明< / th > < / tr > < / thead >
< tbody >
< tr > < td > id< / td > < td > BIGSERIAL< / td > < td > PK< / td > < td > 记录主键< / td > < / tr >
< tr > < td > user_id< / td > < td > BIGINT< / td > < td > FK -> users.id< / td > < td > 用户< / td > < / tr >
< tr > < td > achievement_id< / td > < td > VARCHAR(32)< / td > < td > NOT NULL< / td > < td > 成就标识< / td > < / tr >
< tr > < td > unlocked_at< / td > < td > TIMESTAMPTZ< / td > < td > DEFAULT NOW()< / td > < td > 解锁时间< / td > < / tr >
< / tbody >
< / table >
< / div >
< / section >
<!-- ===== Section 5 ===== -->
< section class = "doc-section" id = "api" >
< p class = "section-eyebrow" > 05 / API DESIGN< / p >
< h2 class = "section-title" > API设计< / h2 >
< p class = "section-desc" > REST API 端点清单,涵盖认证、用户、电路、蓝图、商店、解谜、多人与排行榜。< / p >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 方法< / th > < th > 路径< / th > < th > 说明< / th > < th > 鉴权< / th > < / tr > < / thead >
< tbody >
< tr > < td > POST< / td > < td class = "num" > /api/auth/register< / td > < td > 用户注册< / td > < td > 否< / td > < / tr >
< tr > < td > POST< / td > < td class = "num" > /api/auth/login< / td > < td > 用户登录< / td > < td > 否< / td > < / tr >
< tr > < td > POST< / td > < td class = "num" > /api/auth/logout< / td > < td > 退出登录< / td > < td > 是< / td > < / tr >
< tr > < td > POST< / td > < td class = "num" > /api/auth/refresh< / td > < td > 刷新 Token< / td > < td > 是< / td > < / tr >
< tr > < td > GET< / td > < td class = "num" > /api/user/profile< / td > < td > 获取个人资料< / td > < td > 是< / td > < / tr >
< tr > < td > GET< / td > < td class = "num" > /api/user/balance< / td > < td > 查询货币余额< / td > < td > 是< / td > < / tr >
< tr > < td > GET< / td > < td class = "num" > /api/user/achievements< / td > < td > 查询成就列表< / td > < td > 是< / td > < / tr >
< tr > < td > GET< / td > < td class = "num" > /api/circuits< / td > < td > 获取电路列表< / td > < td > 是< / td > < / tr >
< tr > < td > POST< / td > < td class = "num" > /api/circuits< / td > < td > 新建电路存档< / td > < td > 是< / td > < / tr >
< tr > < td > GET< / td > < td class = "num" > /api/circuits/:id< / td > < td > 获取电路详情< / td > < td > 是< / td > < / tr >
< tr > < td > PUT< / td > < td class = "num" > /api/circuits/:id< / td > < td > 更新电路< / td > < td > 是< / td > < / tr >
< tr > < td > DELETE< / td > < td class = "num" > /api/circuits/:id< / td > < td > 删除电路< / td > < td > 是< / td > < / tr >
< tr > < td > POST< / td > < td class = "num" > /api/circuits/:id/share< / td > < td > 分享电路为蓝图< / td > < td > 是< / td > < / tr >
< tr > < td > GET< / td > < td class = "num" > /api/blueprints< / td > < td > 浏览蓝图列表< / td > < td > 是< / td > < / tr >
< tr > < td > POST< / td > < td class = "num" > /api/blueprints< / td > < td > 上传蓝图< / td > < td > 是< / td > < / tr >
< tr > < td > POST< / td > < td class = "num" > /api/blueprints/:id/buy< / td > < td > 购买蓝图< / td > < td > 是< / td > < / tr >
< tr > < td > GET< / td > < td class = "num" > /api/blueprints/:id/download< / td > < td > 下载蓝图文件< / td > < td > 是< / td > < / tr >
< tr > < td > POST< / td > < td class = "num" > /api/blueprints/:id/rate< / td > < td > 评分< / td > < td > 是< / td > < / tr >
< tr > < td > GET< / td > < td class = "num" > /api/shop/items< / td > < td > 商店商品列表< / td > < td > 是< / td > < / tr >
< tr > < td > POST< / td > < td class = "num" > /api/shop/buy< / td > < td > 购买商品< / td > < td > 是< / td > < / tr >
< tr > < td > GET< / td > < td class = "num" > /api/shop/history< / td > < td > 购买历史< / td > < td > 是< / td > < / tr >
< tr > < td > GET< / td > < td class = "num" > /api/puzzle/levels< / td > < td > 解谜关卡列表< / td > < td > 是< / td > < / tr >
< tr > < td > POST< / td > < td class = "num" > /api/puzzle/:id/submit< / td > < td > 提交关卡答案< / td > < td > 是< / td > < / tr >
< tr > < td > GET< / td > < td class = "num" > /api/puzzle/progress< / td > < td > 关卡进度< / td > < td > 是< / td > < / tr >
< tr > < td > POST< / td > < td class = "num" > /api/multiplayer/match< / td > < td > 发起匹配< / td > < td > 是< / td > < / tr >
< tr > < td > POST< / td > < td class = "num" > /api/multiplayer/join< / td > < td > 加入房间< / td > < td > 是< / td > < / tr >
< tr > < td > POST< / td > < td class = "num" > /api/multiplayer/result< / td > < td > 提交对局结果< / td > < td > 是< / td > < / tr >
< tr > < td > GET< / td > < td class = "num" > /api/leaderboard< / td > < td > 排行榜< / td > < td > 是< / td > < / tr >
< / tbody >
< / table >
< / div >
< / section >
<!-- ===== Section 6 ===== -->
< section class = "doc-section" id = "simulation" >
< p class = "section-eyebrow" > 06 / SIMULATION< / p >
< h2 class = "section-title" > 信号仿真引擎< / h2 >
< p class = "section-desc" > 基于 ECS 的红石信号传播系统,完整还原强度衰减、延迟、BUD 更新等机制。< / p >
< h3 class = "subsection-title" > 仿真流程< / h3 >
< p class = "body-text" > 仿真引擎每个 Tick 执行以下步骤:收集电源、重置信号网格、按强度优先级 BFS 传播、应用元件规则、处理延迟队列、更新输出元件、发射渲染事件。< / p >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 步骤< / th > < th > 操作< / th > < th > 说明< / th > < / tr > < / thead >
< tbody >
< tr > < td class = "num" > 1< / td > < td > 收集电源< / td > < td > 查询所有 PowerSourceComponent 且处于激活态的元件< / td > < / tr >
< tr > < td class = "num" > 2< / td > < td > 重置网格< / td > < td > 将所有格子信号归零、标记未更新< / td > < / tr >
< tr > < td class = "num" > 3< / td > < td > 优先级入队< / td > < td > 按信号强度降序将电源推入优先级队列< / td > < / tr >
< tr > < td class = "num" > 4< / td > < td > BFS 传播< / td > < td > 从队列取出格子,向邻居传播衰减后信号< / td > < / tr >
< tr > < td class = "num" > 5< / td > < td > 元件规则< / td > < td > 对火把/中继器/比较器等应用特殊逻辑< / td > < / tr >
< tr > < td class = "num" > 6< / td > < td > 延迟处理< / td > < td > 处理中继器等延迟元件的跨 Tick 输出< / td > < / tr >
< tr > < td class = "num" > 7< / td > < td > 输出更新< / td > < td > 更新灯、活塞、门等输出元件状态< / td > < / tr >
< tr > < td class = "num" > 8< / td > < td > 渲染事件< / td > < td > 向渲染系统发射变更差量,触发重绘< / td > < / tr >
< / tbody >
< / table >
< / div >
< h3 class = "subsection-title" > 信号更新优先级< / h3 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 优先级< / th > < th > 元件类型< / th > < th > 更新顺序< / th > < th > 说明< / th > < / tr > < / thead >
< tbody >
< tr > < td class = "num" > P0< / td > < td > 电源类< / td > < td > 最先计算< / td > < td > 拉杆、按钮、压力板等直接设定信号源< / td > < / tr >
< tr > < td class = "num" > P1< / td > < td > 红石火把< / td > < td > 电源之后< / td > < td > 反相输出,依赖输入端状态< / td > < / tr >
< tr > < td class = "num" > P2< / td > < td > 比较器< / td > < td > 火把之后< / td > < td > 比较/减法模式,需两侧输入< / td > < / tr >
< tr > < td class = "num" > P3< / td > < td > 中继器< / td > < td > 比较器之后< / td > < td > 延迟输出,受锁定信号影响< / td > < / tr >
< tr > < td class = "num" > P4< / td > < td > 红石粉< / td > < td > 主动元件之后< / td > < td > 按强度衰减传播,BFS 遍历< / td > < / tr >
< tr > < td class = "num" > P5< / td > < td > 输出类< / td > < td > 最后更新< / td > < td > 灯、活塞、门读取最终信号< / td > < / tr >
< / tbody >
< / table >
< / div >
< h3 class = "subsection-title" > 信号属性< / h3 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 属性< / th > < th > 取值范围< / th > < th > 说明< / th > < / tr > < / thead >
< tbody >
< tr > < td > type< / td > < td > redstone / analog< / td > < td > 红石数字信号或模拟比较信号< / td > < / tr >
< tr > < td > strength< / td > < td class = "num" > 0 - 15< / td > < td > 信号强度,15 为满强度< / td > < / tr >
< tr > < td > speed< / td > < td class = "num" > 1 tick / 格< / td > < td > 红石粉每格传播延迟 1 tick< / td > < / tr >
< tr > < td > direction< / td > < td > N / E / S / W / UP / DOWN< / td > < td > 信号传播方向,支持六向< / td > < / tr >
< / tbody >
< / table >
< / div >
< h3 class = "subsection-title" > 特殊规则< / h3 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 规则< / th > < th > 触发条件< / th > < th > 行为< / th > < / tr > < / thead >
< tbody >
< tr > < td > 火把反相< / td > < td > 火把附着方块被激活< / td > < td > 火把熄灭,停止输出信号(NOT 门)< / td > < / tr >
< tr > < td > 中继器锁定< / td > < td > 侧面输入信号< / td > < td > 中继器锁定当前输出值,不再响应输入变化< / td > < / tr >
< tr > < td > 比较器检测< / td > < td > 后方容器有物品< / td > < td > 输出与物品填充率成正比的模拟信号< / td > < / tr >
< tr > < td > 活塞链< / td > < td > 活塞推动含活塞的方块< / td > < td > 按顺序级联推动,最多 12 格< / td > < / tr >
< tr > < td > BUD 更新< / td > < td > 方块状态变化未直接触发< / td > < td > 观察者检测邻接变更并发出脉冲< / td > < / tr >
< / tbody >
< / table >
< / div >
< h3 class = "subsection-title" > 仿真循环伪代码< / h3 >
< pre class = "code-block" > < span class = "cm" > // Redstone Signal Simulation Loop (ECS-based)< / span >
< span class = "kw" > function< / span > < span class = "fn" > simulateTick< / span > (world):
< span class = "cm" > // 1. Collect all power sources< / span >
powerSources = < span class = "fn" > query< / span > (world, PowerSourceComponent)
< span class = "cm" > // 2. Reset signal grid< / span >
< span class = "kw" > for< / span > each cell < span class = "kw" > in< / span > grid:
cell.signal = < span class = "st" > 0< / span >
cell.updated = < span class = "kw" > false< / span >
< span class = "cm" > // 3. BFS propagation from sources (priority queue by strength)< / span >
queue = < span class = "fn" > PriorityQueue< / span > (descending < span class = "kw" > by< / span > strength)
< span class = "kw" > for< / span > source < span class = "kw" > in< / span > powerSources:
< span class = "kw" > if< / span > source.active:
queue.< span class = "fn" > push< / span > (source.cell, source.strength)
< span class = "cm" > // 4. Propagate signals< / span >
< span class = "kw" > while< / span > queue not empty:
(cell, strength) = queue.< span class = "fn" > pop< / span > ()
< span class = "kw" > if< / span > cell.signal >= strength: < span class = "kw" > continue< / span > < span class = "cm" > // already stronger< / span >
cell.signal = strength
cell.updated = < span class = "kw" > true< / span >
< span class = "cm" > // Apply component-specific rules< / span >
< span class = "kw" > switch< / span > cell.component.type:
< span class = "kw" > case< / span > WIRE: < span class = "fn" > propagateToNeighbors< / span > (cell, strength - < span class = "st" > 1< / span > )
< span class = "kw" > case< / span > TORCH: < span class = "fn" > invertAndPropagate< / span > (cell, MAX_STRENGTH)
< span class = "kw" > case< / span > REPEATER:
< span class = "kw" > if< / span > cell.locked: < span class = "kw" > break< / span >
< span class = "fn" > scheduleDelay< / span > (cell, strength, < span class = "st" > 1< / span > tick)
< span class = "kw" > case< / span > COMPARATOR:
output = < span class = "fn" > compare< / span > (cell, strength)
< span class = "fn" > propagateForward< / span > (cell, output)
< span class = "kw" > case< / span > PISTON: < span class = "fn" > triggerPiston< / span > (cell, strength > < span class = "st" > 0< / span > )
< span class = "cm" > // BUD (Block Update Detector) check< / span >
< span class = "kw" > if< / span > cell.component.budSensitive:
< span class = "fn" > notifyObservers< / span > (cell)
< span class = "cm" > // 5. Resolve scheduled delays (repeaters, etc.)< / span >
< span class = "fn" > processDelayedQueue< / span > (world)
< span class = "cm" > // 6. Update outputs (lamps, pistons, doors)< / span >
< span class = "fn" > updateOutputComponents< / span > (world)
< span class = "cm" > // 7. Emit update events to render system< / span >
< span class = "fn" > emitRenderUpdates< / span > (world)< / pre >
< / section >
<!-- ===== Section 7 ===== -->
< section class = "doc-section" id = "components" >
< p class = "section-eyebrow" > 07 / COMPONENTS< / p >
< h2 class = "section-title" > 元器件规格手册< / h2 >
< p class = "section-desc" > 全部分类元件的编号、成本、信号强度与特殊属性规格,共 8 大类 80 种元件。< / p >
< h3 class = "subsection-title" > 7.1 电源类 POWER< / h3 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 编号< / th > < th > 元件名< / th > < th > 成本(红石币)< / th > < th > 信号强度< / th > < th > 特殊属性< / th > < / tr > < / thead >
< tbody >
< tr > < td class = "num" > P-01< / td > < td > < span class = "pill pill-power" > POWER< / span > 红石火把< / td > < td class = "num" > 50< / td > < td class = "num" > 15< / td > < td > 反相输出,可被附着方块熄灭< / td > < / tr >
< tr > < td class = "num" > P-02< / td > < td > < span class = "pill pill-power" > POWER< / span > 红石块< / td > < td class = "num" > 100< / td > < td class = "num" > 15< / td > < td > 恒定满强度,不可关闭< / td > < / tr >
< tr > < td class = "num" > P-03< / td > < td > < span class = "pill pill-power" > POWER< / span > 拉杆< / td > < td class = "num" > 30< / td > < td class = "num" > 15< / td > < td > 手动开关,双稳态< / td > < / tr >
< tr > < td class = "num" > P-04< / td > < td > < span class = "pill pill-power" > POWER< / span > 按钮< / td > < td class = "num" > 40< / td > < td class = "num" > 15< / td > < td > 瞬时脉冲,自动复位< / td > < / tr >
< tr > < td class = "num" > P-05< / td > < td > < span class = "pill pill-power" > POWER< / span > 压力板< / td > < td class = "num" > 35< / td > < td class = "num" > 15< / td > < td > 实体踩踏触发,离开复位< / td > < / tr >
< tr > < td class = "num" > P-06< / td > < td > < span class = "pill pill-power" > POWER< / span > 阳光探测器< / td > < td class = "num" > 90< / td > < td class = "num" > 0-15< / td > < td > 输出随光照强度变化< / td > < / tr >
< tr > < td class = "num" > P-07< / td > < td > < span class = "pill pill-power" > POWER< / span > 阳光探测器(夜)< / td > < td class = "num" > 90< / td > < td class = "num" > 0-15< / td > < td > 反向模式,夜间满强度< / td > < / tr >
< tr > < td class = "num" > P-08< / td > < td > < span class = "pill pill-power" > POWER< / span > 探测铁轨< / td > < td class = "num" > 70< / td > < td class = "num" > 15< / td > < td > 矿车经过时触发脉冲< / td > < / tr >
< tr > < td class = "num" > P-09< / td > < td > < span class = "pill pill-power" > POWER< / span > 直流电源< / td > < td class = "num" > 40< / td > < td class = "num" > 0-15< / td > < td > 可调稳压输出,输出强度旋钮 0-15 自由设定;适合精密电路调试供电< / td > < / tr >
< tr > < td class = "num" > P-10< / td > < td > < span class = "pill pill-power" > POWER< / span > 电池组< / td > < td class = "num" > 85< / td > < td class = "num" > 15< / td > < td > 便携式移动电源,信号强度 15 恒定;可被活塞推动实现移动供电电路;电量有限需充电< / td > < / tr >
< / tbody >
< / table >
< / div >
< h3 class = "subsection-title" > 7.2 传输类 WIRE< / h3 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 编号< / th > < th > 元件名< / th > < th > 成本(红石币)< / th > < th > 信号强度< / th > < th > 特殊属性< / th > < / tr > < / thead >
< tbody >
< tr > < td class = "num" > W-01< / td > < td > < span class = "pill pill-wire" > WIRE< / span > 红石粉< / td > < td class = "num" > 5< / td > < td class = "num" > 15->0< / td > < td > 每格衰减 1,可爬升 1 格< / td > < / tr >
< tr > < td class = "num" > W-02< / td > < td > < span class = "pill pill-wire" > WIRE< / span > 红石中继器< / td > < td class = "num" > 80< / td > < td class = "num" > 15< / td > < td > 恢复满强度,1-4 档延迟< / td > < / tr >
< tr > < td class = "num" > W-03< / td > < td > < span class = "pill pill-wire" > WIRE< / span > 红石比较器< / td > < td class = "num" > 120< / td > < td class = "num" > 0-15< / td > < td > 比较/减法模式,可测容器< / td > < / tr >
< tr > < td class = "num" > W-04< / td > < td > < span class = "pill pill-wire" > WIRE< / span > 绝缘导线< / td > < td class = "num" > 15< / td > < td class = "num" > 15->0< / td > < td > 不与交叉导线串扰,衰减同红石粉< / td > < / tr >
< tr > < td class = "num" > W-05< / td > < td > < span class = "pill pill-wire" > WIRE< / span > 信号桥< / td > < td class = "num" > 25< / td > < td class = "num" > 15< / td > < td > 跨层传输信号,不衰减< / td > < / tr >
< tr > < td class = "num" > W-06< / td > < td > < span class = "pill pill-wire" > WIRE< / span > 铜导线< / td > < td class = "num" > 12< / td > < td class = "num" > 15->0< / td > < td > 低电阻传输,每格仅衰减 0.5(每 2 格衰减 1);成本高于红石粉但传输距离翻倍< / td > < / tr >
< tr > < td class = "num" > W-07< / td > < td > < span class = "pill pill-wire" > WIRE< / span > 跳线< / td > < td class = "num" > 18< / td > < td class = "num" > 15< / td > < td > 跨格架空连接,可跨越 1 格间隙直接连通两个元件;不与下方交叉导线串扰< / td > < / tr >
< / tbody >
< / table >
< / div >
< h3 class = "subsection-title" > 信号衰减示意< / h3 >
< div class = "signal-atten" >
< div class = "signal-atten-row" >
< span class = "signal-atten-cell" style = "color:var(--rc-primary)" > 15< / span >
< span class = "signal-atten-arrow" > -> < / span >
< span class = "signal-atten-cell" style = "opacity:0.93" > 14< / span >
< span class = "signal-atten-arrow" > -> < / span >
< span class = "signal-atten-cell" style = "opacity:0.86" > 13< / span >
< span class = "signal-atten-arrow" > -> < / span >
< span class = "signal-atten-cell" style = "opacity:0.79" > 12< / span >
< span class = "signal-atten-arrow" > -> < / span >
< span class = "signal-atten-cell" style = "opacity:0.72" > 11< / span >
< span class = "signal-atten-arrow" > -> < / span >
< span class = "signal-atten-cell" style = "opacity:0.65" > 10< / span >
< span class = "signal-atten-arrow" > -> < / span >
< span class = "signal-atten-cell" style = "opacity:0.58" > 9< / span >
< span class = "signal-atten-arrow" > -> < / span >
< span class = "signal-atten-cell" style = "opacity:0.51" > 8< / span >
< span class = "signal-atten-arrow" > -> < / span >
< span class = "signal-atten-cell" style = "opacity:0.44" > 7< / span >
< span class = "signal-atten-arrow" > -> < / span >
< span class = "signal-atten-cell" style = "opacity:0.37" > 6< / span >
< span class = "signal-atten-arrow" > -> < / span >
< span class = "signal-atten-cell" style = "opacity:0.30" > 5< / span >
< span class = "signal-atten-arrow" > -> < / span >
< span class = "signal-atten-cell" style = "opacity:0.23" > 4< / span >
< span class = "signal-atten-arrow" > -> < / span >
< span class = "signal-atten-cell" style = "opacity:0.16" > 3< / span >
< span class = "signal-atten-arrow" > -> < / span >
< span class = "signal-atten-cell" style = "opacity:0.09" > 2< / span >
< span class = "signal-atten-arrow" > -> < / span >
< span class = "signal-atten-cell" style = "opacity:0.05" > 1< / span >
< span class = "signal-atten-arrow" > -> < / span >
< span class = "signal-atten-cell" style = "opacity:0.02" > 0< / span >
< / div >
< p style = "font-family:var(--rc-font-mono);font-size:0.6875rem;color:var(--rc-muted-foreground);margin:12px 0 0;" > 红石粉每传播 1 格衰减 1 点强度,中继器可恢复至满强度 15。< / p >
< / div >
< h3 class = "subsection-title" > 7.3 开关/控制类 SWITCH< / h3 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 编号< / th > < th > 元件名< / th > < th > 成本(红石币)< / th > < th > 信号强度< / th > < th > 特殊属性< / th > < / tr > < / thead >
< tbody >
< tr > < td class = "num" > S-01< / td > < td > < span class = "pill pill-switch" > SWITCH< / span > 按钮木质< / td > < td class = "num" > 40< / td > < td class = "num" > 15< / td > < td > 脉冲持续 1.5s< / td > < / tr >
< tr > < td class = "num" > S-02< / td > < td > < span class = "pill pill-switch" > SWITCH< / span > 按钮石质< / td > < td class = "num" > 40< / td > < td class = "num" > 15< / td > < td > 脉冲持续 1s< / td > < / tr >
< tr > < td class = "num" > S-03< / td > < td > < span class = "pill pill-switch" > SWITCH< / span > 拉杆< / td > < td class = "num" > 30< / td > < td class = "num" > 15< / td > < td > 双稳态手动开关< / td > < / tr >
< tr > < td class = "num" > S-04< / td > < td > < span class = "pill pill-switch" > SWITCH< / span > 压力板木质< / td > < td class = "num" > 35< / td > < td class = "num" > 15< / td > < td > 所有实体触发< / td > < / tr >
< tr > < td class = "num" > S-05< / td > < td > < span class = "pill pill-switch" > SWITCH< / span > 压力板铁质< / td > < td class = "num" > 50< / td > < td class = "num" > 15< / td > < td > 仅玩家触发< / td > < / tr >
< tr > < td class = "num" > S-06< / td > < td > < span class = "pill pill-switch" > SWITCH< / span > 压力板金质< / td > < td class = "num" > 80< / td > < td class = "num" > 15< / td > < td > 仅玩家触发,信号更长< / td > < / tr >
< tr > < td class = "num" > S-07< / td > < td > < span class = "pill pill-switch" > SWITCH< / span > 绊线钩< / td > < td class = "num" > 45< / td > < td class = "num" > 15< / td > < td > 绊线被触碰时触发< / td > < / tr >
< tr > < td class = "num" > S-08< / td > < td > < span class = "pill pill-switch" > SWITCH< / span > 阳光探测器< / td > < td class = "num" > 90< / td > < td class = "num" > 0-15< / td > < td > 光照强度模拟输出< / td > < / tr >
< tr > < td class = "num" > S-09< / td > < td > < span class = "pill pill-switch" > SWITCH< / span > 观察者< / td > < td class = "num" > 150< / td > < td class = "num" > 15< / td > < td > 检测前方方块变更,BUD 脉冲< / td > < / tr >
< tr > < td class = "num" > S-10< / td > < td > < span class = "pill pill-switch" > SWITCH< / span > 标靶< / td > < td class = "num" > 60< / td > < td class = "num" > 0-15< / td > < td > 箭矢命中精度决定强度< / td > < / tr >
< tr > < td class = "num" > S-11< / td > < td > < span class = "pill pill-switch" > SWITCH< / span > 拨动开关< / td > < td class = "num" > 25< / td > < td class = "num" > 15< / td > < td > 机械双稳态拨动开关,手动切换开/关;比拉杆更紧凑,可密集排列组成 DIP 开关阵列< / td > < / tr >
< tr > < td class = "num" > S-12< / td > < td > < span class = "pill pill-switch" > SWITCH< / span > 继电器< / td > < td class = "num" > 120< / td > < td class = "num" > 15< / td > < td > 电磁开关,线圈通电吸合触点;支持常开/常闭双触点输出,实现电路隔离与跨域信号传递< / td > < / tr >
< / tbody >
< / table >
< / div >
< h3 class = "subsection-title" > 7.4 输出类 OUTPUT< / h3 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 编号< / th > < th > 元件名< / th > < th > 成本(红石币)< / th > < th > 信号强度< / th > < th > 特殊属性< / th > < / tr > < / thead >
< tbody >
< tr > < td class = "num" > O-01< / td > < td > < span class = "pill pill-output" > OUTPUT< / span > 红石灯< / td > < td class = "num" > 60< / td > < td class = "num" > >=1< / td > < td > 接收信号即点亮< / td > < / tr >
< tr > < td class = "num" > O-02< / td > < td > < span class = "pill pill-output" > OUTPUT< / span > 活塞< / td > < td class = "num" > 150< / td > < td class = "num" > >=1< / td > < td > 推出方块,断电收回< / td > < / tr >
< tr > < td class = "num" > O-03< / td > < td > < span class = "pill pill-output" > OUTPUT< / span > 粘性活塞< / td > < td class = "num" > 200< / td > < td class = "num" > >=1< / td > < td > 推出并拉回方块< / td > < / tr >
< tr > < td class = "num" > O-04< / td > < td > < span class = "pill pill-output" > OUTPUT< / span > 发射器< / td > < td class = "num" > 180< / td > < td class = "num" > >=1< / td > < td > 脉冲触发发射物品< / td > < / tr >
< tr > < td class = "num" > O-05< / td > < td > < span class = "pill pill-output" > OUTPUT< / span > 投掷器< / td > < td class = "num" > 120< / td > < td class = "num" > >=1< / td > < td > 脉冲触发掉落物品< / td > < / tr >
< tr > < td class = "num" > O-06< / td > < td > < span class = "pill pill-output" > OUTPUT< / span > 漏斗< / td > < td class = "num" > 100< / td > < td class = "num" > -< / td > < td > 信号锁定时停止传输< / td > < / tr >
< tr > < td class = "num" > O-07< / td > < td > < span class = "pill pill-output" > OUTPUT< / span > 音符盒< / td > < td class = "num" > 70< / td > < td class = "num" > >=1< / td > < td > 脉冲触发播放音符< / td > < / tr >
< tr > < td class = "num" > O-08< / td > < td > < span class = "pill pill-output" > OUTPUT< / span > TNT< / td > < td class = "num" > 300< / td > < td class = "num" > >=1< / td > < td > 信号触发引爆< / td > < / tr >
< tr > < td class = "num" > O-09< / td > < td > < span class = "pill pill-output" > OUTPUT< / span > 门(铁)< / td > < td class = "num" > 80< / td > < td class = "num" > >=1< / td > < td > 信号开启,铁门仅受信号控制< / td > < / tr >
< tr > < td class = "num" > O-10< / td > < td > < span class = "pill pill-output" > OUTPUT< / span > 门(木)< / td > < td class = "num" > 50< / td > < td class = "num" > >=1< / td > < td > 信号开启,也可手动开关< / td > < / tr >
< tr > < td class = "num" > O-11< / td > < td > < span class = "pill pill-output" > OUTPUT< / span > 活板门< / td > < td class = "num" > 60< / td > < td class = "num" > >=1< / td > < td > 信号开启翻板< / td > < / tr >
< tr > < td class = "num" > O-12< / td > < td > < span class = "pill pill-output" > OUTPUT< / span > 灯笼< / td > < td class = "num" > 55< / td > < td class = "num" > -< / td > < td > 常亮光源,不受信号控制< / td > < / tr >
< tr > < td class = "num" > O-13< / td > < td > < span class = "pill pill-output" > OUTPUT< / span > LED< / td > < td class = "num" > 15< / td > < td class = "num" > >=1< / td > < td > 低功耗指示灯,多色可选(红/绿/蓝/黄);信号强度决定亮度,体积仅 0.5 格< / td > < / tr >
< tr > < td class = "num" > O-14< / td > < td > < span class = "pill pill-output" > OUTPUT< / span > 蜂鸣器< / td > < td class = "num" > 35< / td > < td class = "num" > >=1< / td > < td > 信号触发鸣响,频率随信号强度变化;可串联实现旋律播放,替代音符盒的精密方案< / td > < / tr >
< tr > < td class = "num" > O-15< / td > < td > < span class = "pill pill-output" > OUTPUT< / span > 数码管< / td > < td class = "num" > 90< / td > < td class = "num" > 0-15< / td > < td > 7 段数码显示管,直接显示输入信号强度数值 0-15;可级联实现多位数字显示< / td > < / tr >
< / tbody >
< / table >
< / div >
< h3 class = "subsection-title" > 7.5 逻辑门类 LOGIC< / h3 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 编号< / th > < th > 元件名< / th > < th > 成本(红石币)< / th > < th > 信号强度< / th > < th > 特殊属性< / th > < / tr > < / thead >
< tbody >
< tr > < td class = "num" > L-01< / td > < td > < span class = "pill pill-logic" > LOGIC< / span > NOT< / td > < td class = "num" > 150< / td > < td class = "num" > 15< / td > < td > 输入反相,单输入门< / td > < / tr >
< tr > < td class = "num" > L-02< / td > < td > < span class = "pill pill-logic" > LOGIC< / span > AND< / td > < td class = "num" > 200< / td > < td class = "num" > 15< / td > < td > 双输入全高才输出< / td > < / tr >
< tr > < td class = "num" > L-03< / td > < td > < span class = "pill pill-logic" > LOGIC< / span > OR< / td > < td class = "num" > 200< / td > < td class = "num" > 15< / td > < td > 任一输入高即输出< / td > < / tr >
< tr > < td class = "num" > L-04< / td > < td > < span class = "pill pill-logic" > LOGIC< / span > NAND< / td > < td class = "num" > 220< / td > < td class = "num" > 15< / td > < td > AND 后取反< / td > < / tr >
< tr > < td class = "num" > L-05< / td > < td > < span class = "pill pill-logic" > LOGIC< / span > NOR< / td > < td class = "num" > 220< / td > < td class = "num" > 15< / td > < td > OR 后取反< / td > < / tr >
< tr > < td class = "num" > L-06< / td > < td > < span class = "pill pill-logic" > LOGIC< / span > XOR< / td > < td class = "num" > 250< / td > < td class = "num" > 15< / td > < td > 输入不同才输出< / td > < / tr >
< tr > < td class = "num" > L-07< / td > < td > < span class = "pill pill-logic" > LOGIC< / span > XNOR< / td > < td class = "num" > 250< / td > < td class = "num" > 15< / td > < td > 输入相同才输出< / td > < / tr >
< tr > < td class = "num" > L-08< / td > < td > < span class = "pill pill-logic" > LOGIC< / span > 中继器逻辑< / td > < td class = "num" > 100< / td > < td class = "num" > 15< / td > < td > 延迟+缓冲,可级联< / td > < / tr >
< tr > < td class = "num" > L-09< / td > < td > < span class = "pill pill-logic" > LOGIC< / span > RS 锁存器< / td > < td class = "num" > 350< / td > < td class = "num" > 15< / td > < td > 置位/复位双稳态存储< / td > < / tr >
< tr > < td class = "num" > L-10< / td > < td > < span class = "pill pill-logic" > LOGIC< / span > D 触发器< / td > < td class = "num" > 400< / td > < td class = "num" > 15< / td > < td > 边沿触发数据锁存< / td > < / tr >
< tr > < td class = "num" > L-11< / td > < td > < span class = "pill pill-logic" > LOGIC< / span > 计数器< / td > < td class = "num" > 500< / td > < td class = "num" > 0-15< / td > < td > 脉冲计数,溢出进位< / td > < / tr >
< / tbody >
< / table >
< / div >
< h3 class = "subsection-title" > 逻辑门组合规则< / h3 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 组合< / th > < th > 等效逻辑< / th > < th > 说明< / th > < / tr > < / thead >
< tbody >
< tr > < td > NOT + NOT< / td > < td > 缓冲器< / td > < td > 无逻辑变化,仅作延迟/隔离< / td > < / tr >
< tr > < td > AND + NOT< / td > < td > NAND< / td > < td > 通用门,可组合出任一逻辑< / td > < / tr >
< tr > < td > OR + NOT< / td > < td > NOR< / td > < td > 通用门,可组合出任一逻辑< / td > < / tr >
< tr > < td > NAND + NAND< / td > < td > AND< / td > < td > 双重否定还原与门< / td > < / tr >
< tr > < td > NOR + NOR< / td > < td > OR< / td > < td > 双重否定还原或门< / td > < / tr >
< tr > < td > RS 锁存器 x N< / td > < td > 寄存器< / td > < td > 多 Bit 并行存储,构成数据总线< / td > < / tr >
< / tbody >
< / table >
< / div >
< h3 class = "subsection-title" > 7.6 特殊元件类 SPECIAL< / h3 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 编号< / th > < th > 元件名< / th > < th > 成本(红石币)< / th > < th > 信号强度< / th > < th > 特殊属性< / th > < / tr > < / thead >
< tbody >
< tr > < td class = "num" > X-01< / td > < td > < span class = "pill pill-special" > SPECIAL< / span > 命令方块< / td > < td class = "num" > 1000< / td > < td class = "num" > -< / td > < td > 执行预设指令,仅创意/编辑模式< / td > < / tr >
< tr > < td class = "num" > X-02< / td > < td > < span class = "pill pill-special" > SPECIAL< / span > 结构方块< / td > < td class = "num" > 800< / td > < td class = "num" > -< / td > < td > 保存/加载区域结构,蓝图核心< / td > < / tr >
< tr > < td class = "num" > X-03< / td > < td > < span class = "pill pill-special" > SPECIAL< / span > 信号示波器< / td > < td class = "num" > 300< / td > < td class = "num" > 0-15< / td > < td > 实时显示信号波形与延迟< / td > < / tr >
< tr > < td class = "num" > X-04< / td > < td > < span class = "pill pill-special" > SPECIAL< / span > 信号延迟器< / td > < td class = "num" > 150< / td > < td class = "num" > 15< / td > < td > 可调 1-16 tick 精确延迟< / td > < / tr >
< tr > < td class = "num" > X-05< / td > < td > < span class = "pill pill-special" > SPECIAL< / span > 信号分配器< / td > < td class = "num" > 120< / td > < td class = "num" > 15< / td > < td > 一入多出,不衰减分路< / td > < / tr >
< tr > < td class = "num" > X-06< / td > < td > < span class = "pill pill-special" > SPECIAL< / span > 物品过滤器< / td > < td class = "num" > 250< / td > < td class = "num" > -< / td > < td > 按物品类型筛选传输路径< / td > < / tr >
< tr > < td class = "num" > X-07< / td > < td > < span class = "pill pill-special" > SPECIAL< / span > 物品分类器< / td > < td class = "num" > 400< / td > < td class = "num" > -< / td > < td > 多通道自动分拣,自动化核心< / td > < / tr >
< tr > < td class = "num" > X-08< / td > < td > < span class = "pill pill-special" > SPECIAL< / span > ADC 模数转换器< / td > < td class = "num" > 450< / td > < td class = "num" > 0-15< / td > < td > 将模拟信号(连续强度)转为数字信号(二进制 4-bit 输出);连接模拟电路与数字逻辑的桥梁< / td > < / tr >
< tr > < td class = "num" > X-09< / td > < td > < span class = "pill pill-special" > SPECIAL< / span > DAC 数模转换器< / td > < td class = "num" > 450< / td > < td class = "num" > 0-15< / td > < td > 将 4-bit 数字信号转为模拟信号强度 0-15 输出;用于驱动模拟负载或生成可变亮度< / td > < / tr >
< tr > < td class = "num" > X-10< / td > < td > < span class = "pill pill-special" > SPECIAL< / span > 555 定时器< / td > < td class = "num" > 350< / td > < td class = "num" > 15< / td > < td > 支持单稳态(定时器)、双稳态(锁存)、无稳态(方波振荡器)三种工作模式;外接电阻电容可调频率与占空比< / td > < / tr >
< / tbody >
< / table >
< / div >
< h3 class = "subsection-title" > 7.7 模拟元件类 ANALOG< / h3 >
< p class = "body-text" > 真实模拟电子元件,引入连续信号与线性电路概念,支持更贴近现实电路的设计体验。需在 Lv.15 解锁。< / p >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 编号< / th > < th > 元件名< / th > < th > 成本(红石币)< / th > < th > 信号规则< / th > < th > 特殊属性< / th > < / tr > < / thead >
< tbody >
< tr > < td class = "num" > A-01< / td > < td > < span class = "pill pill-special" > ANALOG< / span > 电阻< / td > < td class = "num" > 20< / td > < td class = "num" > 衰减可调< / td > < td > 串联在导线中,可调阻值 1-15,按比例衰减信号强度;用于限流保护和信号分压< / td > < / tr >
< tr > < td class = "num" > A-02< / td > < td > < span class = "pill pill-special" > ANALOG< / span > 电容< / td > < td class = "num" > 60< / td > < td class = "num" > 充放电< / td > < td > 存储信号能量,输入断开后延迟释放(容量可调 1-8 tick);用于平滑脉冲、延时开关、去抖< / td > < / tr >
< tr > < td class = "num" > A-03< / td > < td > < span class = "pill pill-special" > ANALOG< / span > 电感< / td > < td class = "num" > 70< / td > < td class = "num" > 磁能存储< / td > < td > 阻碍电流突变,信号突变时产生反电动势;与电容组合可构建 LC 振荡、滤波器;延迟特性与电容互补< / td > < / tr >
< tr > < td class = "num" > A-04< / td > < td > < span class = "pill pill-special" > ANALOG< / span > 二极管< / td > < td class = "num" > 45< / td > < td class = "num" > 单向导通< / td > < td > 仅允许信号正向通过、反向截止;等效红石中继器但无延迟、无放大;防信号回流< / td > < / tr >
< tr > < td class = "num" > A-05< / td > < td > < span class = "pill pill-special" > ANALOG< / span > 稳压管< / td > < td class = "num" > 55< / td > < td class = "num" > 钳位< / td > < td > 反向击穿后将信号钳位在固定强度(可调 1-15);用于稳压保护、电压基准源、限幅电路< / td > < / tr >
< tr > < td class = "num" > A-06< / td > < td > < span class = "pill pill-special" > ANALOG< / span > NPN 三极管< / td > < td class = "num" > 180< / td > < td class = "num" > 电流控制< / td > < td > 三端元件(C/B/E);B 有信号时 C->E 导通,B 无信号时截止;可用作信号开关或放大器< / td > < / tr >
< tr > < td class = "num" > A-07< / td > < td > < span class = "pill pill-special" > ANALOG< / span > PNP 三极管< / td > < td class = "num" > 180< / td > < td class = "num" > 电流控制< / td > < td > 与 NPN 互补;B 无信号时 C->E 导通,B 有信号时截止;适合高边开关设计,与 NPN 组合可搭建推挽电路< / td > < / tr >
< tr > < td class = "num" > A-08< / td > < td > < span class = "pill pill-special" > ANALOG< / span > 运算放大器< / td > < td class = "num" > 280< / td > < td class = "num" > 线性放大< / td > < td > 高增益差分放大器,支持反相/同相/差分/积分/微分五种工作模式;外接电阻设定增益倍数;模拟计算核心< / td > < / tr >
< tr > < td class = "num" > A-09< / td > < td > < span class = "pill pill-special" > ANALOG< / span > 光耦< / td > < td class = "num" > 160< / td > < td class = "num" > 光电隔离< / td > < td > 输入端 LED 驱动光敏管输出,实现电气隔离传输;抗干扰、防地线环路;高压与低压电路安全桥接< / td > < / tr >
< / tbody >
< / table >
< / div >
< h4 class = "subsection-title" style = "font-size:0.95rem;margin-top:24px" > 运算放大器工作模式< / h4 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 模式< / th > < th > 接法< / th > < th > 输出< / th > < th > 典型用途< / th > < / tr > < / thead >
< tbody >
< tr > < td > 反相放大< / td > < td > 输入接反相端,同相端接地,Rf/R1 设定增益< / td > < td > Vout = -Vin * (Rf/R1)< / td > < td > 信号反相放大、加法器< / td > < / tr >
< tr > < td > 同相放大< / td > < td > 输入接同相端,反相端分压反馈< / td > < td > Vout = Vin * (1 + Rf/R1)< / td > < td > 信号同相放大、缓冲器< / td > < / tr >
< tr > < td > 差分放大< / td > < td > 双端输入,差模放大共模抑制< / td > < td > Vout = (V+ - V-) * Gain< / td > < td > 传感器信号放大、噪声抑制< / td > < / tr >
< tr > < td > 积分器< / td > < td > 反馈回路用电容替代电阻< / td > < td > Vout = -1/RC * ∫ Vin dt< / td > < td > 波形变换、斜坡发生器< / td > < / tr >
< tr > < td > 比较器< / td > < td > 开环工作,无反馈< / td > < td > Vout = +Vcc if V+ > V- else -Vcc< / td > < td > 阈值检测、过零比较< / td > < / tr >
< / tbody >
< / table >
< / div >
< h4 class = "subsection-title" style = "font-size:0.95rem;margin-top:24px" > 三极管组合应用< / h4 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 组合< / th > < th > 结构< / th > < th > 功能< / th > < / tr > < / thead >
< tbody >
< tr > < td > 推挽输出< / td > < td > NPN + PNP 对管,基极共连< / td > < td > 双向驱动,可拉高也可拉低,替代活塞推拉逻辑< / td > < / tr >
< tr > < td > 达林顿管< / td > < td > 两级 NPN 级联< / td > < td > 超高增益,极弱信号可驱动大负载< / td > < / tr >
< tr > < td > 差分对< / td > < td > 双 NPN 共发射极< / td > < td > 比较两路信号差值,运放输入级的基础结构< / td > < / tr >
< / tbody >
< / table >
< / div >
< h3 class = "subsection-title" > 7.8 功率器件类 POWER DEVICE< / h3 >
< p class = "body-text" > 高功率半导体器件,用于大电流驱动与功率控制场景。需在 Lv.20 解锁。适合自动化生产线和大型机械驱动。< / p >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 编号< / th > < th > 元件名< / th > < th > 成本(红石币)< / th > < th > 信号规则< / th > < th > 特殊属性< / th > < / tr > < / thead >
< tbody >
< tr > < td class = "num" > PD-01< / td > < td > < span class = "pill pill-special" > POWER_DEVICE< / span > 单向可控硅 SCR< / td > < td class = "num" > 220< / td > < td class = "num" > 触发导通< / td > < td > 门极脉冲触发后持续导通,直至电流降至零才关断;用于整流功率控制、过压保护;半控型器件< / td > < / tr >
< tr > < td class = "num" > PD-02< / td > < td > < span class = "pill pill-special" > POWER_DEVICE< / span > 双向可控硅 TRIAC< / td > < td class = "num" > 280< / td > < td class = "num" > 双向触发< / td > < td > 双方向均可触发导通,等效两个 SCR 反并联;交流功率控制核心元件;调光、调速、温控< / td > < / tr >
< tr > < td class = "num" > PD-03< / td > < td > < span class = "pill pill-special" > POWER_DEVICE< / span > IGBT< / td > < td class = "num" > 420< / td > < td class = "num" > 电压驱动< / td > < td > 结合 MOS 管高输入阻抗与三极管大电流能力;高压大电流开关核心;逆变器、电机驱动首选< / td > < / tr >
< tr > < td class = "num" > PD-04< / td > < td > < span class = "pill pill-special" > POWER_DEVICE< / span > MOS 管< / td > < td class = "num" > 200< / td > < td class = "num" > 电压控制< / td > < td > 电压驱动型场效应管,导通电阻极低;开关速度快,高频功率应用核心;可并联扩流< / td > < / tr >
< tr > < td class = "num" > PD-05< / td > < td > < span class = "pill pill-special" > POWER_DEVICE< / span > 达林顿管< / td > < td class = "num" > 300< / td > < td class = "num" > 高增益驱动< / td > < td > 两级三极管复合封装,电流增益达 1000+;微弱信号即可驱动大功率负载;步进电机/继电器阵列驱动< / td > < / tr >
< tr > < td class = "num" > PD-06< / td > < td > < span class = "pill pill-special" > POWER_DEVICE< / span > 继电器模组< / td > < td class = "num" > 250< / td > < td class = "num" > 多路隔离< / td > < td > 4 路独立继电器集成模组,每路常开+常闭双触点;可同时控制 4 路独立高功率负载;工业自动化标配< / td > < / tr >
< / tbody >
< / table >
< / div >
< h4 class = "subsection-title" style = "font-size:0.95rem;margin-top:24px" > 555 定时器工作模式(X-10) < / h4 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 模式< / th > < th > 接法< / th > < th > 输出< / th > < th > 典型用途< / th > < / tr > < / thead >
< tbody >
< tr > < td > 单稳态< / td > < td > 触发端输入脉冲,外接 R+C 定时< / td > < td > 固定宽度高电平脉冲< / td > < td > 延时开关、脉冲展宽、防抖< / td > < / tr >
< tr > < td > 双稳态< / td > < td > 触发端置位,复位端清零< / td > < td > 锁存当前状态< / td > < td > RS 锁存器替代、记忆电路< / td > < / tr >
< tr > < td > 无稳态< / td > < td > 两电阻 + 电容构成振荡回路< / td > < td > 连续方波信号< / td > < td > 时钟发生器、PWM 调制、闪烁灯< / td > < / tr >
< / tbody >
< / table >
< / div >
< / section >
<!-- ===== Section 8 ===== -->
< section class = "doc-section" id = "game-modes" >
< p class = "section-eyebrow" > 08 / GAME MODES< / p >
< h2 class = "section-title" > 游戏模式规则< / h2 >
< p class = "section-desc" > 四大游戏模式的规则、限制与奖励机制定义。< / p >
< h3 class = "subsection-title" > 8.1 自由搭建模式 Creative< / h3 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 规则项< / th > < th > 设定< / th > < th > 说明< / th > < / tr > < / thead >
< tbody >
< tr > < td > 资源< / td > < td > 无限< / td > < td > 所有元件免费无限使用< / td > < / tr >
< tr > < td > 成本< / td > < td > 不计< / td > < td > 不消耗红石币< / td > < / tr >
< tr > < td > 画布尺寸< / td > < td class = "num" > 256x256< / td > < td > 最大单电路画布< / td > < / tr >
< tr > < td > 存档槽位< / td > < td class = "num" > 20< / td > < td > 本地+云端各 20 个< / td > < / tr >
< tr > < td > 仿真< / td > < td > 实时< / td > < td > 放置即仿真,可暂停单步< / td > < / tr >
< tr > < td > 分享< / td > < td > 允许< / td > < td > 可发布为蓝图供他人下载< / td > < / tr >
< tr > < td > 目标< / td > < td > 无< / td > < td > 纯创造,无强制目标< / td > < / tr >
< / tbody >
< / table >
< / div >
< h3 class = "subsection-title" > 8.2 解谜关卡模式 Puzzle< / h3 >
< p class = "body-text" > 解谜模式提供 6 种关卡类型,通过 3 星评级衡量通关质量,每章节难度递增,共 6 章 240 关。< / p >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 关卡类型< / th > < th > 玩法说明< / th > < th > 示例目标< / th > < / tr > < / thead >
< tbody >
< tr > < td > 信号路由< / td > < td > 将信号从起点传至终点< / td > < td > 点亮指定红石灯< / td > < / tr >
< tr > < td > 逻辑运算< / td > < td > 搭建满足真值表的逻辑电路< / td > < td > 实现 XOR 门< / td > < / tr >
< tr > < td > 时序控制< / td > < td > 按顺序触发多个输出< / td > < td > 三盏灯依次点亮< / td > < / tr >
< tr > < td > 计数挑战< / td > < td > 统计脉冲数并输出< / td > < td > 计满 10 次触发< / td > < / tr >
< tr > < td > 资源优化< / td > < td > 在元件数限制内通关< / td > < td > 不超过 15 个元件< / td > < / tr >
< tr > < td > 延迟竞速< / td > < td > 在延迟上限内完成< / td > < td > 总延迟不超过 20 tick< / td > < / tr >
< / tbody >
< / table >
< / div >
< h3 class = "subsection-title" > 三星评级系统< / h3 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 星级< / th > < th > 条件< / th > < th > 奖励< / th > < / tr > < / thead >
< tbody >
< tr > < td > 一星< / td > < td > 完成通关目标< / td > < td class = "num" > 基础红石币奖励< / td > < / tr >
< tr > < td > 二星< / td > < td > 成本不超过 star_cost 上限< / td > < td class = "num" > 1.5x 红石币 + 经验< / td > < / tr >
< tr > < td > 三星< / td > < td > 成本达标且延迟不超过 star_delay< / td > < td class = "num" > 2x 红石币 + 成就进度< / td > < / tr >
< / tbody >
< / table >
< / div >
< h3 class = "subsection-title" > 限制规则< / h3 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 限制类型< / th > < th > 说明< / th > < / tr > < / thead >
< tbody >
< tr > < td > 元件禁用< / td > < td > 部分关卡禁用高级元件(如命令方块、结构方块)< / td > < / tr >
< tr > < td > 元件上限< / td > < td > 限制可放置元件总数< / td > < / tr >
< tr > < td > 画布缩放< / td > < td > 缩小可用画布区域增加难度< / td > < / tr >
< tr > < td > 预设锁定< / td > < td > 部分元件位置固定不可移动< / td > < / tr >
< / tbody >
< / table >
< / div >
< h3 class = "subsection-title" > 章节分布 (共 240 关)< / h3 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 章节< / th > < th > 主题< / th > < th > 关卡数< / th > < th > 难度< / th > < / tr > < / thead >
< tbody >
< tr > < td > 第 1 章< / td > < td > 基础电路入门< / td > < td class = "num" > 30< / td > < td > 简单< / td > < / tr >
< tr > < td > 第 2 章< / td > < td > 逻辑门与运算< / td > < td class = "num" > 40< / td > < td > 普通< / td > < / tr >
< tr > < td > 第 3 章< / td > < td > 时序与锁存< / td > < td class = "num" > 50< / td > < td > 中等< / td > < / tr >
< tr > < td > 第 4 章< / td > < td > 复杂自动化< / td > < td class = "num" > 60< / td > < td > 困难< / td > < / tr >
< tr > < td > 第 5 章< / td > < td > 高级电路设计< / td > < td class = "num" > 40< / td > < td > 专家< / td > < / tr >
< tr > < td > 第 6 章< / td > < td > 极限挑战< / td > < td class = "num" > 20< / td > < td > 大师< / td > < / tr >
< tr > < td > 合计< / td > < td > -< / td > < td class = "num" > 240< / td > < td > -< / td > < / tr >
< / tbody >
< / table >
< / div >
< h3 class = "subsection-title" > 8.3 自动化生产模式 Automation< / h3 >
< p class = "body-text" > 玩家搭建生产线,将原料加工为成品出售赚取红石币。生产链从采集到精炼逐级加工。< / p >
< div class = "chain-flow" >
< span class = "chain-node" > 矿石采集< / span >
< span class = "chain-arrow" > -> < / span >
< span class = "chain-node" > 粉碎机< / span >
< span class = "chain-arrow" > -> < / span >
< span class = "chain-node" > 精炼炉< / span >
< span class = "chain-arrow" > -> < / span >
< span class = "chain-node" > 合成台< / span >
< span class = "chain-arrow" > -> < / span >
< span class = "chain-node" > 成品仓库< / span >
< span class = "chain-arrow" > -> < / span >
< span class = "chain-node" > 出售获利< / span >
< / div >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 资源类型< / th > < th > 采购价< / th > < th > 用途< / th > < / tr > < / thead >
< tbody >
< tr > < td > 原矿石< / td > < td class = "num" > 5< / td > < td > 基础原料,粉碎后得矿粉< / td > < / tr >
< tr > < td > 矿粉< / td > < td class = "num" > 12< / td > < td > 精炼原料,可熔炼为锭< / td > < / tr >
< tr > < td > 金属锭< / td > < td class = "num" > 30< / td > < td > 合成元件壳体的核心材料< / td > < / tr >
< tr > < td > 红石粉原料< / td > < td class = "num" > 8< / td > < td > 提纯为可用红石粉< / td > < / tr >
< tr > < td > 红石结晶< / td > < td class = "num" > 80< / td > < td > 高级逻辑门核心材料< / td > < / tr >
< tr > < td > 硅片< / td > < td class = "num" > 45< / td > < td > 集成电路板基材< / td > < / tr >
< tr > < td > 电路板< / td > < td class = "num" > 120< / td > < td > 成品元件必备组件< / td > < / tr >
< tr > < td > 能量核< / td > < td class = "num" > 200< / td > < td > 特殊元件能源供给< / td > < / tr >
< / tbody >
< / table >
< / div >
< div class = "formula-box" >
效率公式:E = (成品数量 / 总耗时) x 100< br >
成本回收:R = 成品售价 - (原料成本 + 元件磨损 + 电力消耗)< br >
净利润:P = R x E x 运行时长
< / div >
< h3 class = "subsection-title" > 8.4 多人对战/协作模式 Multiplayer< / h3 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 对战模式< / th > < th > 人数< / th > < th > 规则< / th > < / tr > < / thead >
< tbody >
< tr > < td > 电路竞速< / td > < td class = "num" > 2-4< / td > < td > 最先完成指定电路搭建者获胜< / td > < / tr >
< tr > < td > 信号攻防< / td > < td class = "num" > 2< / td > < td > 一方搭建防御电路,另一方破解< / td > < / tr >
< tr > < td > 资源争夺< / td > < td class = "num" > 2-4< / td > < td > 争夺有限元件资源搭建最优电路< / td > < / tr >
< tr > < td > 蓝图复刻< / td > < td class = "num" > 2-4< / td > < td > 看图复原电路,最快最准者胜< / td > < / tr >
< / tbody >
< / table >
< / div >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 协作模式< / th > < th > 人数< / th > < th > 规则< / th > < / tr > < / thead >
< tbody >
< tr > < td > 联合建造< / td > < td class = "num" > 2-4< / td > < td > 共同完成大型电路工程< / td > < / tr >
< tr > < td > 分工流水线< / td > < td class = "num" > 2-4< / td > < td > 各负责生产链一环,协同产出< / td > < / tr >
< tr > < td > 解谜协作< / td > < td class = "num" > 2-4< / td > < td > 合力攻克高难度解谜关卡< / td > < / tr >
< / tbody >
< / table >
< / div >
< h3 class = "subsection-title" > 匹配与赛季规则< / h3 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 规则项< / th > < th > 设定< / th > < th > 说明< / th > < / tr > < / thead >
< tbody >
< tr > < td > 匹配机制< / td > < td > MMR 段位< / td > < td > 基于隐藏分匹配相近水平玩家< / td > < / tr >
< tr > < td > 匹配超时< / td > < td class = "num" > 60s< / td > < td > 超时后放宽段位范围< / td > < / tr >
< tr > < td > 赛季周期< / td > < td class = "num" > 4 周< / td > < td > 每月一个赛季,结算发放奖励< / td > < / tr >
< tr > < td > 段位< / td > < td class = "num" > 7 级< / td > < td > 青铜至宗师,每级 3 小段< / td > < / tr >
< tr > < td > 赛季奖励< / td > < td > 蓝图+金币< / td > < td > 按最终段位发放限定蓝图与金币< / td > < / tr >
< / tbody >
< / table >
< / div >
< / section >
<!-- ===== Section 9 ===== -->
< section class = "doc-section" id = "economy" >
< p class = "section-eyebrow" > 09 / ECONOMY< / p >
< h2 class = "section-title" > 货币与经济系统< / h2 >
< p class = "section-desc" > 双货币体系设计,红石币为软货币贯穿玩法循环,金币为硬货币用于增值消费。< / p >
< h3 class = "subsection-title" > 9.1 货币类型< / h3 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 属性< / th > < th > 红石币 (软货币)< / th > < th > 金币 (硬货币)< / th > < / tr > < / thead >
< tbody >
< tr > < td > 获取方式< / td > < td > 解谜通关、自动化生产、每日任务< / td > < td > 人民币充值、赛季奖励、成就< / td > < / tr >
< tr > < td > 主要用途< / td > < td > 购买元件、解锁关卡、购买蓝图< / td > < td > 购买稀有皮肤、加速、高级蓝图< / td > < / tr >
< tr > < td > 可交易性< / td > < td > 不可直接交易,仅通过蓝图间接流通< / td > < td > 不可交易< / td > < / tr >
< tr > < td > 上限< / td > < td class = "num" > 9,999,999< / td > < td class = "num" > 99,999< / td > < / tr >
< tr > < td > 汇率参考< / td > < td class = "num" > 1000 红石币 ≈ ¥1< / td > < td class = "num" > 10 金币 = ¥1< / td > < / tr >
< / tbody >
< / table >
< / div >
< h3 class = "subsection-title" > 9.2 产出与消耗平衡< / h3 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 产出渠道< / th > < th > 日预估产出< / th > < th > 说明< / th > < / tr > < / thead >
< tbody >
< tr > < td > 解谜通关< / td > < td class = "num" > 800-1500< / td > < td > 首次通关奖励高,重复递减< / td > < / tr >
< tr > < td > 自动化生产< / td > < td class = "num" > 500-2000< / td > < td > 取决于生产线效率与在线时长< / td > < / tr >
< tr > < td > 每日任务< / td > < td class = "num" > 300< / td > < td > 固定日任务奖励< / td > < / tr >
< tr > < td > 蓝图销售分成< / td > < td class = "num" > 0-5000< / td > < td > 他人购买作者蓝图,作者获 70%< / td > < / tr >
< tr > < td > 多人对战奖励< / td > < td class = "num" > 100-600< / td > < td > 按胜负与段位< / td > < / tr >
< / tbody >
< / table >
< / div >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 消耗渠道< / th > < th > 单次消耗< / th > < th > 说明< / th > < / tr > < / thead >
< tbody >
< tr > < td > 购买元件(单价)< / td > < td class = "num" > 5-1000< / td > < td > 按元件类型差异定价< / td > < / tr >
< tr > < td > 解锁关卡章节< / td > < td class = "num" > 2000-8000< / td > < td > 逐章递增< / td > < / tr >
< tr > < td > 购买蓝图< / td > < td class = "num" > 0-3000< / td > < td > 作者定价,平台抽成 30%< / td > < / tr >
< tr > < td > 商店道具< / td > < td class = "num" > 100-500< / td > < td > 消耗品与装饰品< / td > < / tr >
< tr > < td > 自动化原料采购< / td > < td class = "num" > 5-200< / td > < td > 生产链原料采购成本< / td > < / tr >
< / tbody >
< / table >
< / div >
< h3 class = "subsection-title" > 9.3 充值档位< / h3 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 档位< / th > < th > 价格< / th > < th > 金币< / th > < th > 额外赠送< / th > < / tr > < / thead >
< tbody >
< tr > < td > 新手包< / td > < td class = "num" > ¥6< / td > < td class = "num" > 60< / td > < td > 首充双倍 + 新手元件包< / td > < / tr >
< tr > < td > 标准包< / td > < td class = "num" > ¥30< / td > < td class = "num" > 300< / td > < td > 30 金币 + 限定皮肤< / td > < / tr >
< tr > < td > 超值包< / td > < td class = "num" > ¥68< / td > < td class = "num" > 680< / td > < td > 120 金币 + 赛季通行证< / td > < / tr >
< tr > < td > 豪华包< / td > < td class = "num" > ¥168< / td > < td class = "num" > 1680< / td > < td > 400 金币 + 专属称号< / td > < / tr >
< / tbody >
< / table >
< / div >
< / section >
<!-- ===== Section 10 ===== -->
< section class = "doc-section" id = "user-system" >
< p class = "section-eyebrow" > 10 / USER SYSTEM< / p >
< h2 class = "section-title" > 用户系统< / h2 >
< p class = "section-desc" > 注册登录、账号安全、新手引导、等级解锁与成就系统。< / p >
< h3 class = "subsection-title" > 10.1 注册登录< / h3 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 规则项< / th > < th > 要求< / th > < th > 说明< / th > < / tr > < / thead >
< tbody >
< tr > < td > 用户名< / td > < td > 3-32 字符< / td > < td > 字母数字下划线,唯一< / td > < / tr >
< tr > < td > 邮箱< / td > < td > 有效邮箱< / td > < td > 用于找回密码与通知< / td > < / tr >
< tr > < td > 密码< / td > < td > 8-64 字符< / td > < td > 需含大小写字母与数字,bcrypt 加密< / td > < / tr >
< tr > < td > 第三方登录< / td > < td > Google / GitHub / Discord< / td > < td > 支持 OAuth2 快捷登录< / td > < / tr >
< tr > < td > 验证方式< / td > < td > 邮箱验证码< / td > < td > 注册与找回密码需验证< / td > < / tr >
< / tbody >
< / table >
< / div >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 安全措施< / th > < th > 说明< / th > < / tr > < / thead >
< tbody >
< tr > < td > 密码加密< / td > < td > bcrypt 哈希存储,不存明文< / td > < / tr >
< tr > < td > JWT Token< / td > < td > 双 Token 机制,Access 短期 + Refresh 长期< / td > < / tr >
< tr > < td > 异地登录检测< / td > < td > 新设备登录需邮箱二次验证< / td > < / tr >
< tr > < td > 登录频率限制< / td > < td > 5 次失败锁定 15 分钟< / td > < / tr >
< tr > < td > 数据传输加密< / td > < td > 全站 HTTPS / WSS< / td > < / tr >
< / tbody >
< / table >
< / div >
< h3 class = "subsection-title" > 新手引导流程< / h3 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 步骤< / th > < th > 内容< / th > < th > 奖励< / th > < / tr > < / thead >
< tbody >
< tr > < td class = "num" > 1< / td > < td > 创建账号与角色< / td > < td class = "num" > 100 红石币< / td > < / tr >
< tr > < td class = "num" > 2< / td > < td > 基础元件放置教学< / td > < td class = "num" > 150 红石币< / td > < / tr >
< tr > < td class = "num" > 3< / td > < td > 完成首个教程关卡< / td > < td class = "num" > 200 红石币 + 经验< / td > < / tr >
< tr > < td class = "num" > 4< / td > < td > 商店购买教学< / td > < td class = "num" > 拉杆元件 x5< / td > < / tr >
< tr > < td class = "num" > 5< / td > < td > 分享首个电路< / td > < td class = "num" > 300 红石币 + 成就< / td > < / tr >
< / tbody >
< / table >
< / div >
< h3 class = "subsection-title" > 10.2 等级与解锁< / h3 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 等级段< / th > < th > 等级范围< / th > < th > 经验要求< / th > < th > 解锁内容< / th > < / tr > < / thead >
< tbody >
< tr > < td > 新手< / td > < td class = "num" > 1-10< / td > < td class = "num" > 0-5,000< / td > < td > 基础元件、第 1-2 章、自由搭建< / td > < / tr >
< tr > < td > 进阶< / td > < td class = "num" > 11-25< / td > < td class = "num" > 5,000-30,000< / td > < td > 逻辑门元件、第 3-4 章、自动化< / td > < / tr >
< tr > < td > 高级< / td > < td class = "num" > 26-50< / td > < td class = "num" > 30,000-120,000< / td > < td > 特殊元件、第 5-6 章、多人模式< / td > < / tr >
< tr > < td > 大师< / td > < td class = "num" > 51+< / td > < td class = "num" > 120,000+< / td > < td > 全部解锁、蓝图上传、赛季排位< / td > < / tr >
< / tbody >
< / table >
< / div >
< h3 class = "subsection-title" > 10.3 成就系统< / h3 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 成就< / th > < th > 解锁条件< / th > < th > 奖励< / th > < / tr > < / thead >
< tbody >
< tr > < td > 初出茅庐< / td > < td > 完成新手引导< / td > < td class = "num" > 300 红石币< / td > < / tr >
< tr > < td > 电路学徒< / td > < td > 通关 10 个解谜关卡< / td > < td class = "num" > 500 红石币 + 经验< / td > < / tr >
< tr > < td > 逻辑大师< / td > < td > 用逻辑门完成 50 个关卡< / td > < td class = "num" > 1000 红石币 + 称号< / td > < / tr >
< tr > < td > 满星达人< / td > < td > 累计获得 100 颗星< / td > < td class = "num" > 800 金币 + 限定皮肤< / td > < / tr >
< tr > < td > 蓝图创作者< / td > < td > 上传首个蓝图< / td > < td class = "num" > 200 红石币< / td > < / tr >
< tr > < td > 人气作者< / td > < td > 蓝图累计下载 1000 次< / td > < td class = "num" > 2000 红石币 + 称号< / td > < / tr >
< tr > < td > 赛季冠军< / td > < td > 达到宗师段位< / td > < td class = "num" > 5000 金币 + 限定蓝图< / td > < / tr >
< / tbody >
< / table >
< / div >
< / section >
<!-- ===== Section 11 ===== -->
< section class = "doc-section" id = "milestones" >
< p class = "section-eyebrow" > 11 / MILESTONES< / p >
< h2 class = "section-title" > 开发里程碑< / h2 >
< p class = "section-desc" > 从原型到运营的五阶段开发计划与交付物定义。< / p >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 阶段< / th > < th > 时间< / th > < th > 交付物< / th > < th > 团队规模< / th > < / tr > < / thead >
< tbody >
< tr > < td > Phase 1 原型期< / td > < td > M1-M2< / td > < td > 核心仿真引擎、基础编辑器、5 种元件原型< / td > < td class = "num" > 4 人< / td > < / tr >
< tr > < td > Phase 2 Alpha< / td > < td > M3-M5< / td > < td > 全部 4 模式、经济系统、用户认证、前 3 章关卡< / td > < td class = "num" > 8 人< / td > < / tr >
< tr > < td > Phase 3 Beta< / td > < td > M6-M8< / td > < td > 多人联机、蓝图工坊、商店、全 240 关、UI 打磨< / td > < td class = "num" > 12 人< / td > < / tr >
< tr > < td > Phase 4 发布< / td > < td > M9< / td > < td > 官网上线、监控告警、热修复管线、客服系统< / td > < td class = "num" > 12 人< / td > < / tr >
< tr > < td > Phase 5 运营< / td > < td > M10+< / td > < td > 赛季内容、限时活动、平衡性补丁、数据分析< / td > < td class = "num" > 10 人< / td > < / tr >
< / tbody >
< / table >
< / div >
< / section >
<!-- ===== Section 12 ===== -->
< section class = "doc-section" id = "deployment" >
< p class = "section-eyebrow" > 12 / DEPLOYMENT< / p >
< h2 class = "section-title" > 部署与运维< / h2 >
< p class = "section-desc" > 服务端容器化部署、客户端分发、CI/CD 流水线与监控体系。< / p >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 领域< / th > < th > 方案< / th > < th > 说明< / th > < / tr > < / thead >
< tbody >
< tr > < td > 服务端部署< / td > < td > Docker + Kubernetes< / td > < td > 容器化微服务,HPA 自动伸缩,滚动更新< / td > < / tr >
< tr > < td > 客户端分发< / td > < td > 官网安装包 + 自动更新服务< / td > < td > 官网提供 Windows/macOS 安装包,内置增量更新客户端< / td > < / tr >
< tr > < td > CI/CD< / td > < td > GitHub Actions< / td > < td > 推送触发自动构建、单元测试、集成测试、部署< / td > < / tr >
< tr > < td > 服务端监控< / td > < td > Prometheus + Grafana< / td > < td > CPU/内存/QPS/延迟指标,告警规则推送到钉钉< / td > < / tr >
< tr > < td > 错误追踪< / td > < td > Sentry< / td > < td > 客户端崩溃报告与服务端异常堆栈统一收集< / td > < / tr >
< tr > < td > CDN< / td > < td > 蓝图文件 + 更新补丁< / td > < td > 静态资源与增量更新包走 CDN 加速分发< / td > < / tr >
< tr > < td > 日志收集< / td > < td > ELK Stack< / td > < td > Elasticsearch + Logstash + Kibana 日志检索< / td > < / tr >
< tr > < td > 备份策略< / td > < td > 每日全量 + 实时 WAL< / td > < td > PostgreSQL 每日全量备份,WAL 实时归档< / td > < / tr >
< / tbody >
< / table >
< / div >
< / section >
<!-- ===== Section 13 ===== -->
< section class = "doc-section" id = "risks" >
< p class = "section-eyebrow" > 13 / RISKS< / p >
< h2 class = "section-title" > 风险评估< / h2 >
< p class = "section-desc" > 技术、市场、运营与安全维度的风险识别与缓解措施。< / p >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 风险项< / th > < th > 类别< / th > < th > 概率< / th > < th > 影响< / th > < th > 缓解措施< / th > < / tr > < / thead >
< tbody >
< tr > < td > 大规模电路仿真性能瓶颈< / td > < td > 技术< / td > < td > 中< / td > < td > 高< / td > < td > ECS 优化、分块加载、LOD 降级、多线程< / td > < / tr >
< tr > < td > 红石逻辑还原度不足< / td > < td > 技术< / td > < td > 低< / td > < td > 高< / td > < td > 对照 MC 原版行为单元测试,社区反馈迭代< / td > < / tr >
< tr > < td > 多人同步延迟与一致性< / td > < td > 技术< / td > < td > 中< / td > < td > 中< / td > < td > 客户端预测+服务端权威,Delta 压缩同步< / td > < / tr >
< tr > < td > 同类竞品挤压市场< / td > < td > 市场< / td > < td > 中< / td > < td > 高< / td > < td > 差异化双货币+UGC 生态,社区运营前置< / td > < / tr >
< tr > < td > 玩家留存不及预期< / td > < td > 市场< / td > < td > 中< / td > < td > 高< / td > < td > 数据驱动关卡调优,限时活动促活< / td > < / tr >
< tr > < td > UGC 内容审核滞后< / td > < td > 运营< / td > < td > 中< / td > < td > 中< / td > < td > 机审+人审双通道,举报快速响应机制< / td > < / tr >
< tr > < td > 服务器成本超预算< / td > < td > 运营< / td > < td > 低< / td > < td > 中< / td > < td > HPA 弹性伸缩,闲时缩容,预留缓存层< / td > < / tr >
< tr > < td > 经济系统通胀失控< / td > < td > 运营< / td > < td > 中< / td > < td > 高< / td > < td > 产出消耗动态监控,定期平衡性补丁< / td > < / tr >
< tr > < td > 账号盗号与黑产刷币< / td > < td > 安全< / td > < td > 中< / td > < td > 高< / td > < td > 异地登录验证、行为风控、交易限额< / td > < / tr >
< tr > < td > 客户端被逆向破解< / td > < td > 安全< / td > < td > 低< / td > < td > 中< / td > < td > 代码混淆、关键逻辑服务端校验、反调试< / td > < / tr >
< / tbody >
< / table >
< / div >
< / section >
<!-- ===== Section 15 ===== -->
< section class = "doc-section" id = "sprint-plan" >
< p class = "section-eyebrow" > 15 / SPRINT PLAN< / p >
< h2 class = "section-title" > Sprint 分解与排期< / h2 >
< p class = "section-desc" > 以 2 周为一个 Sprint,从 M1 到 M9 共 18 个 Sprint,每个 Sprint 明确交付物和验收标准。< / p >
< h3 class = "subsection-title" > Phase 1 原型期 (M1-M2, Sprint 1-4)< / h3 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > Sprint< / th > < th > 周期< / th > < th > 交付物< / th > < th > 验收标准< / th > < / tr > < / thead >
< tbody >
< tr > < td > S1< / td > < td > W1-2< / td > < td > 项目骨架搭建:Unity 工程初始化、Go 项目骨架、CI 基础流水线、Git 仓库与代码规范< / td > < td > Unity 可编译运行空场景;Go 服务可启动并返回 health check;CI 可自动构建< / td > < / tr >
< tr > < td > S2< / td > < td > W3-4< / td > < td > 网格画布渲染器 + 元件放置系统:16x16 网格、元件拖放放置、基础 8 种元件数据结构< / td > < td > 可在画布上放置/删除/移动元件;网格坐标正确;元件数据 JSON 序列化通过< / td > < / tr >
< tr > < td > S3< / td > < td > W5-6< / td > < td > 信号仿真引擎 v1:红石粉信号传播、衰减计算、电源->导线->输出基本链路< / td > < td > 红石火把->红石粉->红石灯 链路可点亮;信号强度衰减正确;1 tick = 0.1s 时序正确< / td > < / tr >
< tr > < td > S4< / td > < td > W7-8< / td > < td > 仿真引擎 v2 + 工具栏 UI:中继器/比较器/逻辑门仿真、保存/加载/运行/暂停按钮、成本计算< / td > < td > 逻辑门输出正确(真值表验证);电路可保存为 JSON 并重新加载;成本实时计算< / td > < / tr >
< / tbody >
< / table >
< / div >
< h3 class = "subsection-title" > Phase 2 Alpha (M3-M5, Sprint 5-10)< / h3 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > Sprint< / th > < th > 周期< / th > < th > 交付物< / th > < th > 验收标准< / th > < / tr > < / thead >
< tbody >
< tr > < td > S5< / td > < td > W9-10< / td > < td > 用户认证系统:注册/登录 API、JWT Token、SQLite 本地存档、PostgreSQL 用户表< / td > < td > 注册->登录->获取Token->访问受保护接口 全链路通过;密码 bcrypt 加密;Token 过期自动刷新< / td > < / tr >
< tr > < td > S6< / td > < td > W11-12< / td > < td > 解谜关卡系统 v1:关卡数据结构、关卡加载器、前 30 关(第一章)、三星评级算法< / td > < td > 30 关可游玩;输入/输出验证正确;三星评级按成本和延迟计算< / td > < / tr >
< tr > < td > S7< / td > < td > W13-14< / td > < td > 自由搭建模式 + 画布扩展至 128x128 + 全部 80 种元件数据填充< / td > < td > 128x128 画布流畅运行(>30fps);80 种元件均可放置和仿真;无限资源模式< / td > < / tr >
< tr > < td > S8< / td > < td > W15-16< / td > < td > 货币系统 + 商店 UI:红石币/金币数据库表、交易流水、商店 4 标签页、购买逻辑< / td > < td > 解谜通关奖励红石币正确入账;商店购买扣费正确;交易流水可追溯< / td > < / tr >
< tr > < td > S9< / td > < td > W17-18< / td > < td > 自动化生产模式 v1:资源采集->传输->加工->出售 链路、效率计算、8 种资源< / td > < td > 自动农场可运行产出资源;资源出售获得红石币;效率系数 0.5x-2.0x 正确< / td > < / tr >
< tr > < td > S10< / td > < td > W19-20< / td > < td > 解谜第二章 40 关 + 第三章前 25 关 + 成就系统 v1 + 等级系统< / td > < td > 累计 95 关可游玩;等级升级正确解锁元件;7 个成就可触发< / td > < / tr >
< / tbody >
< / table >
< / div >
< h3 class = "subsection-title" > Phase 3 Beta (M6-M8, Sprint 11-16)< / h3 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > Sprint< / th > < th > 周期< / th > < th > 交付物< / th > < th > 验收标准< / th > < / tr > < / thead >
< tbody >
< tr > < td > S11< / td > < td > W21-22< / td > < td > 多人联机核心:WebSocket 网关、客户端预测+服务端校验、实时画布同步< / td > < td > 2 人同时编辑同一画布延迟 < 200ms ; 冲突解决正确 ; 断线重连恢复 < / td > < / tr >
< tr > < td > S12< / td > < td > W23-24< / td > < td > 多人对战模式:电路竞速、成本竞速、匹配系统、积分排行< / td > < td > 4 人匹配对局可完整进行;排行榜实时更新;积分增减正确< / td > < / tr >
< tr > < td > S13< / td > < td > W25-26< / td > < td > 蓝图工坊:蓝图上传/下载/评分/搜索、MinIO 文件存储、蓝图市场 UI< / td > < td > 蓝图可上传并下载复现;评分系统正常;搜索可按名称/作者/标签过滤< / td > < / tr >
< tr > < td > S14< / td > < td > W27-28< / td > < td > 解谜第三至第五章共 150 关 + 多人协作模式 + 信号攻防模式< / td > < td > 累计 245 关可游玩;协作模式 4 人共建正常;信号攻防 2v2 可进行< / td > < / tr >
< tr > < td > S15< / td > < td > W29-30< / td > < td > 全 UI 打磨:动效系统、暗色/亮色主题、响应式适配、无障碍优化< / td > < td > Lighthouse 评分 >85;动效 60fps; prefers-reduced-motion 生效;键盘可操作< / td > < / tr >
< tr > < td > S16< / td > < td > W31-32< / td > < td > 第五章剩余 + 第六章 20 关大师关 + 性能优化 + Bug 修复 + 封闭 Beta 测试< / td > < td > 240 关全部可游玩;512x512 画布 >30fps; P0 Bug 清零;封闭 Beta 500 人测试< / td > < / tr >
< / tbody >
< / table >
< / div >
< h3 class = "subsection-title" > Phase 4 发布 (M9, Sprint 17-18)< / h3 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > Sprint< / th > < th > 周期< / th > < th > 交付物< / th > < th > 验收标准< / th > < / tr > < / thead >
< tbody >
< tr > < td > S17< / td > < td > W33-34< / td > < td > 开放 Beta + 压力测试 + 热修复管线 + 客服系统 + 数据分析埋点< / td > < td > 5000 并发用户稳定;P0 Bug 24h 内修复;数据分析看板可查看 DAU/留存< / td > < / tr >
< tr > < td > S18< / td > < td > W35-36< / td > < td > 正式发布 + 监控告警 + 运营活动配置系统 + 赛季系统上线< / td > < td > 正式环境运行稳定;告警 < 5min 响应 ; 第一赛季可正常运行 ; 首周留存 > 35%< / td > < / tr >
< / tbody >
< / table >
< / div >
< / section >
<!-- ===== Section 16 ===== -->
< section class = "doc-section" id = "team" >
< p class = "section-eyebrow" > 16 / TEAM< / p >
< h2 class = "section-title" > 团队组织与职责< / h2 >
< p class = "section-desc" > 按阶段递进的团队配置,明确角色、职责与协作流程。< / p >
< h3 class = "subsection-title" > 团队配置阶段表< / h3 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 阶段< / th > < th > 人数< / th > < th > 角色构成< / th > < th > 关键职责< / th > < / tr > < / thead >
< tbody >
< tr > < td > Phase 1< / td > < td class = "num" > 4< / td > < td > 技术主策 1 + 客户端 1 + 服务端 1 + 美术 1< / td > < td > 核心引擎原型、美术风格验证< / td > < / tr >
< tr > < td > Phase 2< / td > < td class = "num" > 8< / td > < td > + 客户端 2 + 服务端 1 + 策划 1 + QA 1< / td > < td > 全模式开发、经济系统、认证系统< / td > < / tr >
< tr > < td > Phase 3< / td > < td class = "num" > 12< / td > < td > + 客户端 1 + 服务端 1 + 美术 1 + QA 1< / td > < td > 多人联机、蓝图工坊、全关卡、UI 打磨< / td > < / tr >
< tr > < td > Phase 4-5< / td > < td class = "num" > 10-12< / td > < td > 稳定团队 + 运营 1 + 数据分析 1< / td > < td > 发布运维、赛季内容、平衡性调优< / td > < / tr >
< / tbody >
< / table >
< / div >
< h3 class = "subsection-title" > 角色职责矩阵< / h3 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 角色< / th > < th > 核心职责< / th > < th > 技术栈要求< / th > < th > 产出物< / th > < / tr > < / thead >
< tbody >
< tr > < td > 技术主策 / Tech Lead< / td > < td > 架构决策、技术选型、代码审查、跨端协调< / td > < td > Unity C# + Go + 系统设计< / td > < td > 架构文档、技术方案、Code Review 记录< / td > < / tr >
< tr > < td > 客户端工程师 x4< / td > < td > Unity 渲染、UI Toolkit、仿真引擎客户端、网络层< / td > < td > Unity 2024 LTS, C#, UI Toolkit< / td > < td > 客户端模块代码、性能报告< / td > < / tr >
< tr > < td > 服务端工程师 x2< / td > < td > Go 微服务、数据库设计、WebSocket 网关、反作弊< / td > < td > Go, Gin, PostgreSQL, Redis< / td > < td > API 服务代码、数据库 Migration、接口文档< / td > < / tr >
< tr > < td > 游戏策划 x1< / td > < td > 关卡设计、数值平衡、经济系统调优、赛季规划< / td > < td > Excel/Python 数据分析、关卡编辑器< / td > < td > 关卡数据 JSON、数值表、策划案< / td > < / tr >
< tr > < td > UI/UX 美术 x2< / td > < td > UI 设计、像素元件图标、特效、主题< / td > < td > Figma, Aseprite, Unity Shader< / td > < td > UI 切图、图标素材、特效预设< / td > < / tr >
< tr > < td > QA 测试 x2< / td > < td > 功能测试、自动化测试、性能测试、Bug 管理< / td > < td > Python, Selenium, Unity Test Framework< / td > < td > 测试用例、Bug 报告、自动化脚本< / td > < / tr >
< tr > < td > 运营 / 数据 x1< / td > < td > 活动配置、数据分析、社区运营、赛季管理< / td > < td > SQL, Tableau, 社区工具< / td > < td > 运营报告、活动配置、数据看板< / td > < / tr >
< / tbody >
< / table >
< / div >
< h3 class = "subsection-title" > 协作流程< / h3 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 流程< / th > < th > 工具< / th > < th > 规则< / th > < / tr > < / thead >
< tbody >
< tr > < td > 代码管理< / td > < td > Git + GitHub< / td > < td > main 分支保护;feature/* 分支开发;PR 至少 1 人 Review 后合并;Sprint 结束打 tag< / td > < / tr >
< tr > < td > 任务管理< / td > < td > GitHub Projects / Jira< / td > < td > Sprint Backlog 拆分至 2 人日以内;每日 Standup 15 分钟;Sprint Review + Retro< / td > < / tr >
< tr > < td > 文档管理< / td > < td > Notion / Confluence< / td > < td > API 文档 Swagger 自动生成;设计文档 PR 附带;会议纪要 24h 内归档< / td > < / tr >
< tr > < td > CI/CD< / td > < td > GitHub Actions< / td > < td > PR 触发自动构建+测试;main 分支自动部署 Staging; Tag 发布 Production< / td > < / tr >
< tr > < td > 沟通< / td > < td > 飞书 / Discord< / td > < td > 技术讨论频道;紧急问题电话优先;每周技术分享 1 小时< / td > < / tr >
< tr > < td > Bug 追踪< / td > < td > GitHub Issues< / td > < td > P0 当日修复;P1 当 Sprint 修复;P2 排入 Backlog; Bug 复现步骤必填< / td > < / tr >
< / tbody >
< / table >
< / div >
< / section >
<!-- ===== Section 17 ===== -->
< section class = "doc-section" id = "client-modules" >
< p class = "section-eyebrow" > 17 / CLIENT MODULES< / p >
< h2 class = "section-title" > 客户端模块详设< / h2 >
< p class = "section-desc" > Unity 客户端的模块拆分、核心脚本职责与数据流设计。< / p >
< h3 class = "subsection-title" > 17.1 模块总览< / h3 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 模块< / th > < th > 命名空间< / th > < th > 职责< / th > < th > 核心脚本< / th > < / tr > < / thead >
< tbody >
< tr > < td > GridRenderer< / td > < td > RedCircuit.Grid< / td > < td > 网格画布渲染、视口裁剪、LOD< / td > < td > GridCanvas.cs, ChunkManager.cs, TileRenderer.cs< / td > < / tr >
< tr > < td > SimulationEngine< / td > < td > RedCircuit.Simulation< / td > < td > 信号传播、元件仿真、tick 循环< / td > < td > SimulationLoop.cs, SignalPropagator.cs, ComponentBehavior.cs< / td > < / tr >
< tr > < td > ComponentSystem< / td > < td > RedCircuit.Components< / td > < td > 80 种元件数据定义、放置/删除/旋转< / td > < td > ComponentRegistry.cs, PlacementController.cs, ComponentData.cs< / td > < / tr >
< tr > < td > UISystem< / td > < td > RedCircuit.UI< / td > < td > UI Toolkit 界面、工具栏、面板、弹窗< / td > < td > EditorWindow.cs, ToolbarController.cs, PalettePanel.cs, InspectorPanel.cs< / td > < / tr >
< tr > < td > NetworkClient< / td > < td > RedCircuit.Net< / td > < td > REST 请求、WebSocket 连接、delta 同步< / td > < td > ApiClient.cs, WsClient.cs, SyncManager.cs< / td > < / tr >
< tr > < td > SaveSystem< / td > < td > RedCircuit.Save< / td > < td > 本地 SQLite 存档、云端同步、蓝图导出< / td > < td > SaveManager.cs, LocalDatabase.cs, CloudSync.cs< / td > < / tr >
< tr > < td > AudioSystem< / td > < td > RedCircuit.Audio< / td > < td > 音符盒/蜂鸣器音效、UI 音效、BGM< / td > < td > AudioManager.cs, NotePlayer.cs< / td > < / tr >
< tr > < td > AuthSystem< / td > < td > RedCircuit.Auth< / td > < td > 登录注册、Token 管理、第三方 OAuth< / td > < td > AuthManager.cs, TokenStore.cs, OAuthClient.cs< / td > < / tr >
< / tbody >
< / table >
< / div >
< h3 class = "subsection-title" > 17.2 仿真引擎核心数据结构< / h3 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 类名< / th > < th > 字段< / th > < th > 说明< / th > < / tr > < / thead >
< tbody >
< tr > < td > GridCell< / td > < td > int x, y; Component component; int signalStrength; List< GridCell> neighbors< / td > < td > 网格单元,记录坐标、元件实例、当前信号强度、四邻连接< / td > < / tr >
< tr > < td > Component< / td > < td > ComponentType type; int rotation; Dictionary< string, int> properties; bool isPowered< / td > < td > 元件实例,类型、朝向、可调属性(阻值/延迟/模式等)、通电状态< / td > < / tr >
< tr > < td > SignalUpdate< / td > < td > GridCell target; int newStrength; int tick; SignalSource source< / td > < td > 信号更新事件,BFS 队列元素,记录目标格、新强度、tick 序号、来源< / td > < / tr >
< tr > < td > CircuitGraph< / td > < td > Dictionary< Vector2Int, GridCell> cells; Queue< SignalUpdate> updateQueue; HashSet< Vector2Int> dirtyCells< / td > < td > 电路图数据,全格字典 + 信号更新队列 + 脏标记集合< / td > < / tr >
< tr > < td > SimulationConfig< / td > < td > float tickDuration; int maxGridSize; bool enableShortCircuitDetection; bool stepMode< / td > < td > 仿真配置,tick 时长、最大画布、短路检测开关、步进模式< / td > < / tr >
< / tbody >
< / table >
< / div >
< h3 class = "subsection-title" > 17.3 渲染性能策略< / h3 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 策略< / th > < th > 实现方式< / th > < th > 目标< / th > < / tr > < / thead >
< tbody >
< tr > < td > 分块加载< / td > < td > 画布按 16x16 分 Chunk,视口内 Chunk 才实例化 GameObject< / td > < td > 512x512 画布内存占用 < 512MB < / td > < / tr >
< tr > < td > 对象池< / td > < td > 元件 GameObject 预生成 500 个池化,放置时取用而非 Instantiate< / td > < td > 消除 GC Spike,放置延迟 < 16ms < / td > < / tr >
< tr > < td > GPU Instancing< / td > < td > 同类型元件使用 GPU Instancing 批量渲染< / td > < td > 1000+ 元件同帧 Draw Call < 50 < / td > < / tr >
< tr > < td > 信号轨迹 Shader< / td > < td > 红石信号轨迹用自定义 Shader 绘制,非逐格 GameObject< / td > < td > 信号动画 60fps,不随电路规模增长< / td > < / tr >
< tr > < td > LOD 降级< / td > < td > 缩放 < 50 % 时元件图标降级为纯色方块 , 不渲染细节 < / td > < td > 全景浏览 512x512 保持 >30fps< / td > < / tr >
< tr > < td > 仿真分帧< / td > < td > 大电路仿真 BFS 分帧执行,每帧最多处理 2000 格更新< / td > < td > 避免大电路导致主线程卡顿< / td > < / tr >
< / tbody >
< / table >
< / div >
< h3 class = "subsection-title" > 17.4 电路数据 JSON 格式< / h3 >
< pre class = "code-block" > {
"version": "1.0",
"canvasSize": { "width": 128, "height": 128 },
"components": [
{
"id": "comp_001",
"type": "REDSTONE_TORCH",
"x": 10, "y": 20,
"rotation": 0,
"properties": {}
},
{
"id": "comp_002",
"type": "REDSTONE_DUST",
"x": 11, "y": 20,
"rotation": 0,
"properties": {}
},
{
"id": "comp_003",
"type": "AND_GATE",
"x": 15, "y": 20,
"rotation": 0,
"properties": { "inputCount": 2 }
},
{
"id": "comp_004",
"type": "RESISTOR",
"x": 12, "y": 20,
"rotation": 0,
"properties": { "resistance": 5 }
}
],
"wires": [
{ "from": "comp_001", "to": "comp_002" },
{ "from": "comp_002", "to": "comp_004" },
{ "from": "comp_004", "to": "comp_003", "inputIndex": 0 }
],
"metadata": {
"author": "CircuitMaster",
"createdAt": "2026-08-07T12:00:00Z",
"cost": 280,
"componentCount": 4,
"wireCount": 3
}
}< / pre >
< / section >
<!-- ===== Section 18 ===== -->
< section class = "doc-section" id = "server-services" >
< p class = "section-eyebrow" > 18 / SERVER SERVICES< / p >
< h2 class = "section-title" > 服务端微服务详设< / h2 >
< p class = "section-desc" > 5 个微服务的职责边界、核心接口、数据归属与通信协议。< / p >
< h3 class = "subsection-title" > 18.1 微服务总览< / h3 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 服务< / th > < th > 语言/框架< / th > < th > 端口< / th > < th > 数据库< / th > < th > 核心职责< / th > < / tr > < / thead >
< tbody >
< tr > < td > auth-service< / td > < td > Go / Gin< / td > < td > 8081< / td > < td > PostgreSQL(users)< / td > < td > 注册/登录/JWT/第三方OAuth/Token刷新< / td > < / tr >
< tr > < td > economy-service< / td > < td > Go / Gin< / td > < td > 8082< / td > < td > PostgreSQL(transactions) + Redis(balance cache)< / td > < td > 货币余额/交易流水/商店购买/充值回调< / td > < / tr >
< tr > < td > blueprint-service< / td > < td > Go / Gin< / td > < td > 8083< / td > < td > PostgreSQL(blueprints) + MinIO(files)< / td > < td > 蓝图CRUD/评分/搜索/下载/分类< / td > < / tr >
< tr > < td > match-service< / td > < td > Go + WebSocket< / td > < td > 8084< / td > < td > Redis(matchmaking) + PostgreSQL(matches)< / td > < td > 匹配/房间管理/实时同步/对战结算< / td > < / tr >
< tr > < td > social-service< / td > < td > Go / Gin< / td > < td > 8085< / td > < td > PostgreSQL(achievements) + Redis(leaderboard)< / td > < td > 成就/排行榜/好友/赛季/活动< / td > < / tr >
< / tbody >
< / table >
< / div >
< h3 class = "subsection-title" > 18.2 auth-service 核心接口< / h3 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 接口< / th > < th > 请求< / th > < th > 响应< / th > < th > 备注< / th > < / tr > < / thead >
< tbody >
< tr > < td > POST /register< / td > < td > { username, email, password }< / td > < td > { userId, token, refreshToken }< / td > < td > 密码 bcrypt;发送验证邮件< / td > < / tr >
< tr > < td > POST /login< / td > < td > { username, password }< / td > < td > { userId, token, refreshToken, profile }< / td > < td > 5 次错误锁定 15min< / td > < / tr >
< tr > < td > POST /refresh< / td > < td > { refreshToken }< / td > < td > { token, refreshToken }< / td > < td > 旧 Token 黑名单< / td > < / tr >
< tr > < td > POST /oauth/callback< / td > < td > { provider, code }< / td > < td > { userId, token, refreshToken }< / td > < td > Google/GitHub/Discord< / td > < / tr >
< tr > < td > GET /profile< / td > < td > Header: Authorization< / td > < td > { userId, username, email, level, exp, balance }< / td > < td > 聚合 economy-service 余额< / td > < / tr >
< / tbody >
< / table >
< / div >
< h3 class = "subsection-title" > 18.3 economy-service 交易事务< / h3 >
< pre class = "code-block" > // 购买流程伪代码 - 保证原子性和一致性
func PurchaseItem(userID string, itemID string) error {
// 1. 开启数据库事务
tx := db.Begin()
// 2. 查询商品价格 (行锁)
var item ShopItem
tx.Clauses(clause.Locking{Strength: "UPDATE"}).
First(& item, itemID)
// 3. 查询用户余额 (行锁)
var balance UserBalance
tx.Clauses(clause.Locking{Strength: "UPDATE"}).
First(& balance, "user_id = ?", userID)
// 4. 校验余额
if balance.RedstoneCoins < item.Price {
tx.Rollback()
return ErrInsufficientBalance
}
// 5. 扣减余额
balance.RedstoneCoins -= item.Price
tx.Save(& balance)
// 6. 写入交易流水
tx.Create(& Transaction{
UserID: userID,
Type: "purchase",
Item: item.Name,
Amount: -item.Price,
Currency: "redstone",
BalanceAfter: balance.RedstoneCoins,
})
// 7. 发放商品 (调用对应服务)
if item.Type == "component_pack" {
// 发放元件包到用户库存
} else if item.Type == "blueprint" {
// 标记蓝图为已购买
}
// 8. 提交事务
return tx.Commit().Error
}< / pre >
< h3 class = "subsection-title" > 18.4 数据库索引策略< / h3 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 表< / th > < th > 索引< / th > < th > 类型< / th > < th > 查询场景< / th > < / tr > < / thead >
< tbody >
< tr > < td > users< / td > < td > idx_users_username< / td > < td > UNIQUE B-Tree< / td > < td > 登录时按用户名查询< / td > < / tr >
< tr > < td > users< / td > < td > idx_users_email< / td > < td > UNIQUE B-Tree< / td > < td > 邮箱验证/找回密码< / td > < / tr >
< tr > < td > circuits< / td > < td > idx_circuits_user_id< / td > < td > B-Tree< / td > < td > 查询用户所有电路< / td > < / tr >
< tr > < td > circuits< / td > < td > idx_circuits_updated< / td > < td > B-Tree DESC< / td > < td > 按更新时间排序< / td > < / tr >
< tr > < td > blueprints< / td > < td > idx_bp_author< / td > < td > B-Tree< / td > < td > 作者蓝图列表< / td > < / tr >
< tr > < td > blueprints< / td > < td > idx_bp_category_rating< / td > < td > Composite B-Tree< / td > < td > 分类+评分排序< / td > < / tr >
< tr > < td > transactions< / td > < td > idx_tx_user_created< / td > < td > Composite B-Tree DESC< / td > < td > 用户交易历史分页< / td > < / tr >
< tr > < td > puzzle_levels< / td > < td > idx_puzzle_chapter_level< / td > < td > Composite B-Tree< / td > < td > 章节+关卡序号排序< / td > < / tr >
< tr > < td > multiplayer_matches< / td > < td > idx_match_status_started< / td > < td > Composite B-Tree< / td > < td > 按状态+时间查询对局< / td > < / tr >
< / tbody >
< / table >
< / div >
< / section >
<!-- ===== Section 18.5 ===== -->
< section class = "doc-section" id = "relay-server" >
< p class = "section-eyebrow" > 18.5 / RELAY SERVER< / p >
< h2 class = "section-title" > 联机服务器中转站开发< / h2 >
< p class = "section-desc" > 独立于业务微服务的联机中转网关,负责 P2P 打洞辅助、房间管理、实时消息路由与断线重连。< / p >
< h3 class = "subsection-title" > 架构定位< / h3 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 维度< / th > < th > 说明< / th > < / tr > < / thead >
< tbody >
< tr > < td > 服务名称< / td > < td > relay-server (Go 1.22 + gorilla/websocket)< / td > < / tr >
< tr > < td > 端口< / td > < td > TCP 8084 (WebSocket) / UDP 8086 (STUN/TURN)< / td > < / tr >
< tr > < td > 部署形态< / td > < td > 独立进程,不与 auth/economy 等业务服务混部;可水平扩展多节点 + 负载均衡< / td > < / tr >
< tr > < td > 核心职责< / td > < td > 房间生命周期管理 / WebSocket 长连接维护 / 消息路由转发 / P2P 打洞辅助 / TURN 中继兜底 / 断线重连状态恢复< / td > < / tr >
< tr > < td > 不负责< / td > < td > 用户认证(由 auth-service 签发 Token, relay 仅校验) / 货币结算 / 蓝图存储< / td > < / tr >
< tr > < td > 设计目标< / td > < td > 单节点支持 5000 并发 WebSocket 连接 / 200 个活跃房间 / 消息转发延迟 P99 < 50ms < / td > < / tr >
< / tbody >
< / table >
< / div >
< h3 class = "subsection-title" > 连接拓扑< / h3 >
< pre class = "code-block" >
┌──────────┐ ┌──────────────┐ ┌──────────┐
│ Player A │◄───────►│ Relay Server │◄───────►│ Player B │
│ (Client) │ WSS │ (Go + WS) │ WSS │ (Client) │
└──────────┘ └──────┬───────┘ └──────────┘
│
┌──────┴───────┐
│ Room Manager │
│ (内存状态机) │
└──────┬───────┘
│
┌─────────────┼─────────────┐
│ │ │
┌─────▼─────┐ ┌────▼────┐ ┌─────▼─────┐
│ STUN/TURN │ │ Redis │ │ Kafka │
│ (UDP) │ │ (状态) │ │ (事件) │
└───────────┘ └─────────┘ └───────────┘
连接模式优先级:
1. P2P 直连 (STUN 打洞成功) -> relay 仅做信令交换
2. TURN 中继 (打洞失败) -> relay 转发所有游戏数据
3. WebSocket 中转 (兜底) -> relay 中心化转发< / pre >
< h3 class = "subsection-title" > 消息协议定义 (Protobuf)< / h3 >
< pre class = "code-block" > syntax = "proto3";
package relay;
// 客户端 -> Relay 消息
message ClientMessage {
string msg_id = 1; // 消息唯一 ID (UUID)
int32 msg_type = 2; // 消息类型枚举
string room_id = 3; // 目标房间
string user_id = 4; // 发送者
bytes payload = 5; // 业务载荷 (电路 delta / 聊天 / 状态)
int64 timestamp = 6; // 客户端时间戳 (ms)
}
// Relay -> 客户端消息
message ServerMessage {
string msg_id = 1;
int32 msg_type = 2;
string from_user = 3; // 消息来源用户
bytes payload = 4;
int64 server_ts = 5; // 服务端时间戳
int32 seq = 6; // 房间内序号 (用于排序)
}
// 消息类型枚举
enum MessageType {
MSG_JOIN_ROOM = 0; // 加入房间
MSG_LEAVE_ROOM = 1; // 离开房间
MSG_CIRCUIT_DELTA = 2; // 电路增量同步
MSG_CIRCUIT_FULL = 3; // 电路全量同步
MSG_CHAT = 4; // 聊天消息
MSG_PRESENCE = 5; // 在线状态
MSG_CURSOR = 6; // 光标位置同步
MSG_ACTION = 7; // 游戏操作 (放置/删除元件)
MSG_GAME_STATE = 8; // 游戏状态变更 (开始/暂停/结束)
MSG_RECONNECT = 9; // 断线重连
MSG_HEARTBEAT = 10; // 心跳
MSG_KICK = 11; // 踢出
MSG_ERROR = 12; // 错误
}< / pre >
< h3 class = "subsection-title" > 房间状态机< / h3 >
< pre class = "code-block" >
┌─────────┐ create ┌──────────┐ all ready ┌─────────┐
│ CREATED │─────────►│ WAITING │────────────►│ PLAYING │
└─────────┘ └────┬─────┘ └────┬────┘
│ leave │ end
┌──────▼──────┐ ┌──────▼──────┐
│ ABANDONED │ │ FINISHED │
└─────────────┘ └─────────────┘
房间状态流转规则:
- CREATED -> WAITING: 创建者进入,等待其他玩家
- WAITING -> PLAYING: 所有玩家就绪,房主点击开始
- WAITING -> ABANDONED: 所有玩家离开
- PLAYING -> FINISHED: 游戏结束 (计时到/目标达成/房主终止)
- PLAYING -> WAITING: 回到等待 (仅协作模式)
- 任意状态 -> ABANDONED: 超时无活动 30min< / pre >
< h3 class = "subsection-title" > 核心数据结构 (Go)< / h3 >
< pre class = "code-block" > // Room 房间结构
type Room struct {
ID string `json:"id"`
Mode GameMode `json:"mode"` // free_build/puzzle/multiplayer
Status RoomStatus `json:"status"` // created/waiting/playing/finished
HostUserID string `json:"host_user_id"`
MaxPlayers int `json:"max_players"`
Players map[string]*Player `json:"players"` // userID -> Player
CircuitData []byte `json:"circuit_data"` // 当前电路快照 (全量)
DeltaQueue chan CircuitDelta `json:"-"` // 增量更新队列
SeqCounter int64 `json:"seq_counter"` // 消息序号计数器
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
mu sync.RWMutex `json:"-"`
}
// Player 玩家连接
type Player struct {
UserID string `json:"user_id"`
Username string `json:"username"`
Conn *websocket.Conn `json:"-"` // WebSocket 连接
IsReady bool `json:"is_ready"`
Cursor struct {
X int `json:"x"`
Y int `json:"y"`
} `json:"cursor"`
JoinedAt time.Time `json:"joined_at"`
LastActive time.Time `json:"last_active"`
SendQueue chan []byte `json:"-"` // 发送队列 (异步写)
}
// CircuitDelta 电路增量更新
type CircuitDelta struct {
PlayerID string `json:"player_id"`
OpType DeltaOpType `json:"op_type"` // place/delete/move/rotate/wire
Component *ComponentData `json:"component,omitempty"`
Wire *WireData `json:"wire,omitempty"`
Position *Position `json:"position,omitempty"`
Tick int64 `json:"tick"`
Seq int64 `json:"seq"`
}
// RelayServer 中转服务器
type RelayServer struct {
Rooms map[string]*Room // roomID -> Room
Players map[string]*Player // userID -> Player (全局索引)
Register chan *Player // 注册通道
Unregister chan *Player // 注销通道
Broadcast chan *BroadcastMsg // 广播通道
Redis *redis.Client // Redis (持久化房间状态)
Logger *zap.Logger
mu sync.RWMutex
}< / pre >
< h3 class = "subsection-title" > 核心处理流程伪代码< / h3 >
< pre class = "code-block" > // === WebSocket 连接处理 ===
func (s *RelayServer) HandleConnection(conn *websocket.Conn, userID string, roomID string) {
player := & Player{
UserID: userID,
Conn: conn,
SendQueue: make(chan []byte, 256),
JoinedAt: time.Now(),
}
// 1. 注册玩家
s.Register < - player
// 2. 加入房间
room := s.GetOrCreateRoom(roomID)
room.AddPlayer(player)
// 3. 通知房间内其他玩家
room.BroadcastExcept(userID, MSG_PRESENCE, & PresencePayload{
UserID: userID, Status: "joined"
})
// 4. 向新玩家发送当前电路全量快照
player.Send(MSG_CIRCUIT_FULL, room.CircuitData)
// 5. 启动读写 goroutine
go s.writePump(player)
s.readPump(player, room)
}
// === 读取客户端消息 ===
func (s *RelayServer) readPump(player *Player, room *Room) {
defer func() {
s.Unregister < - player
room.RemovePlayer(player.UserID)
room.BroadcastExcept(player.UserID, MSG_PRESENCE, & PresencePayload{
UserID: player.UserID, Status: "left"
})
player.Conn.Close()
}()
for {
_, message, err := player.Conn.ReadMessage()
if err != nil {
break // 连接断开
}
var msg ClientMessage
proto.Unmarshal(message, & msg)
switch msg.MsgType {
case MSG_CIRCUIT_DELTA:
// 应用增量到房间电路快照
delta := parseDelta(msg.Payload)
room.ApplyDelta(delta)
// 广播给房间内其他玩家
room.BroadcastExcept(msg.UserId, MSG_CIRCUIT_DELTA, msg.Payload)
case MSG_CHAT:
room.BroadcastAll(MSG_CHAT, msg.Payload)
case MSG_CURSOR:
room.BroadcastExcept(msg.UserId, MSG_CURSOR, msg.Payload)
case MSG_ACTION:
// 游戏操作需服务端校验 (多人对战模式)
if room.Mode == GameModeMultiplayer {
if !s.ValidateAction(room, msg) {
player.Send(MSG_ERROR, & ErrorPayload{Code: "invalid_action"})
continue
}
}
room.BroadcastAll(MSG_ACTION, msg.Payload)
case MSG_HEARTBEAT:
player.LastActive = time.Now()
player.Send(MSG_HEARTBEAT, & HeartbeatPayload{ServerTs: time.Now().UnixMilli()})
}
}
}
// === 断线重连 ===
func (s *RelayServer) HandleReconnect(userID string, roomID string, conn *websocket.Conn) {
room, ok := s.Rooms[roomID]
if !ok {
// 房间已不存在
conn.WriteMessage(MSG_ERROR, encodeError("room_not_found"))
return
}
player, ok := room.Players[userID]
if ok {
// 旧连接还存在,关闭旧连接
oldConn := player.Conn
player.Conn = conn
close(player.SendQueue)
player.SendQueue = make(chan []byte, 256)
oldConn.Close()
} else {
// 玩家已被清理,重新加入
player = & Player{
UserID: userID, Conn: conn,
SendQueue: make(chan []byte, 256),
}
room.AddPlayer(player)
}
// 发送重连成功 + 当前全量快照 + 最近 50 条消息
player.Send(MSG_RECONNECT, & ReconnectPayload{
Success: true,
CircuitSnapshot: room.CircuitData,
RecentMsgs: room.GetRecentMessages(50),
Players: room.GetPlayerList(),
})
go s.writePump(player)
go s.readPump(player, room)
}
// === 房间广播 ===
func (r *Room) BroadcastExcept(userID string, msgType MessageType, payload []byte) {
r.mu.RLock()
defer r.mu.RUnlock()
r.SeqCounter++
msg := & ServerMessage{
MsgType: int32(msgType),
Payload: payload,
ServerTs: time.Now().UnixMilli(),
Seq: r.SeqCounter,
}
data, _ := proto.Marshal(msg)
for _, player := range r.Players {
if player.UserID == userID {
continue
}
select {
case player.SendQueue < - data:
default:
// 队列满,关闭连接
close(player.SendQueue)
delete(r.Players, player.UserID)
}
}
}< / pre >
< h3 class = "subsection-title" > P2P 打洞与 TURN 中继< / h3 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 阶段< / th > < th > 行为< / th > < th > 协议< / th > < th > 超时< / th > < / tr > < / thead >
< tbody >
< tr > < td > 1. ICE 候选收集< / td > < td > 客户端收集本地/反射/中继候选地址< / td > < td > STUN (UDP)< / td > < td > 5s< / td > < / tr >
< tr > < td > 2. 候选交换< / td > < td > 通过 relay-server WebSocket 交换 SDP 和 ICE 候选< / td > < td > WebSocket< / td > < td > 3s< / td > < / tr >
< tr > < td > 3. 连接检查< / td > < td > ICE 对每对候选地址进行连通性检查< / td > < td > STUN Binding< / td > < td > 10s< / td > < / tr >
< tr > < td > 4a. P2P 直连成功< / td > < td > 后续游戏数据走 P2P 通道,relay 仅维持信令< / td > < td > UDP (P2P)< / td > < td > -< / td > < / tr >
< tr > < td > 4b. P2P 失败 -> TURN< / td > < td > 分配 TURN 中继地址,所有数据经 TURN 转发< / td > < td > TURN (UDP)< / td > < td > -< / td > < / tr >
< tr > < td > 4c. TURN 失败 -> WSS< / td > < td > 回退到 WebSocket 中心化转发< / td > < td > WebSocket< / td > < td > -< / td > < / tr >
< tr > < td > 5. 心跳保活< / td > < td > P2P 模式每 15s 发 STUN Binding 保活;WSS 模式 30s 心跳< / td > < td > STUN / WS< / td > < td > 60s 无响应断开< / td > < / tr >
< / tbody >
< / table >
< / div >
< h3 class = "subsection-title" > 断线重连策略< / h3 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 断线时长< / th > < th > 客户端行为< / th > < th > 服务端行为< / th > < th > 恢复方式< / th > < / tr > < / thead >
< tbody >
< tr > < td > < 5s < / td > < td > 自动重连,缓存消息< / td > < td > 保留房间和玩家状态< / td > < td > WebSocket 重连 + 增量同步< / td > < / tr >
< tr > < td > 5-30s< / td > < td > 显示"重连中..."UI< / td > < td > 标记玩家为"暂离",保留位置< / td > < td > 重连 + 全量快照 + 最近 50 条消息< / td > < / tr >
< tr > < td > 30s-3min< / td > < td > 重试退避 (1s/2s/4s/8s)< / td > < td > 保留房间,玩家标记"掉线"< / td > < td > 重连 + 全量快照< / td > < / tr >
< tr > < td > 3-30min< / td > < td > 提示"连接超时"< / td > < td > 房间保留,玩家可手动重连< / td > < td > 重新加入房间< / td > < / tr >
< tr > < td > >30min< / td > < td > -< / td > < td > 房间超时回收,玩家移除< / td > < td > 需重新创建/加入房间< / td > < / tr >
< / tbody >
< / table >
< / div >
< h3 class = "subsection-title" > 水平扩展方案< / h3 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 组件< / th > < th > 方案< / th > < th > 说明< / th > < / tr > < / thead >
< tbody >
< tr > < td > 负载均衡< / td > < td > L4 TCP 负载均衡 (HAProxy / Nginx stream)< / td > < td > WebSocket 长连接用最少连接策略;sticky session by userID< / td > < / tr >
< tr > < td > 跨节点消息< / td > < td > Redis Pub/Sub< / td > < td > 房间内玩家可能连在不同 relay 节点;消息先发 Redis channel,各节点订阅自己管理的房间< / td > < / tr >
< tr > < td > 房间状态持久化< / td > < td > Redis Hash (room:{id})< / td > < td > 房间元数据 + 玩家列表持久化,节点故障后可恢复< / td > < / tr >
< tr > < td > 电路快照存储< / td > < td > Redis (热) + MinIO (冷)< / td > < td > 活跃房间电路快照存 Redis;房间结束后归档 MinIO< / td > < / tr >
< tr > < td > 连接亲和性< / td > < td > Consistent Hash by roomID< / td > < td > 同一房间的玩家尽量路由到同一 relay 节点,减少跨节点转发< / td > < / tr >
< tr > < td > 优雅缩容< / td > < td > drain 模式< / td > < td > 节点标记 draining 后拒绝新连接,等现有连接自然结束或迁移< / td > < / tr >
< / tbody >
< / table >
< / div >
< h3 class = "subsection-title" > 监控指标< / h3 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 指标< / th > < th > Prometheus Metric< / th > < th > 告警阈值< / th > < / tr > < / thead >
< tbody >
< tr > < td > 在线 WebSocket 连接数< / td > < td > relay_connections_total< / td > < td > >4500 (单节点)< / td > < / tr >
< tr > < td > 活跃房间数< / td > < td > relay_rooms_active< / td > < td > >180< / td > < / tr >
< tr > < td > 消息转发延迟 P99< / td > < td > relay_msg_latency_seconds (histogram)< / td > < td > >50ms< / td > < / tr >
< tr > < td > 消息丢失率< / td > < td > relay_msg_drop_rate< / td > < td > >0.1%< / td > < / tr >
< tr > < td > P2P 打洞成功率< / td > < td > relay_p2p_success_rate< / td > < td > < 70 % < / td > < / tr >
< tr > < td > TURN 中继流量< / td > < td > relay_turn_bytes_total (counter)< / td > < td > 月预算阈值告警< / td > < / tr >
< tr > < td > 断线重连成功率< / td > < td > relay_reconnect_success_rate< / td > < td > < 90 % < / td > < / tr >
< tr > < td > goroutine 数量< / td > < td > go_goroutines< / td > < td > >10000< / td > < / tr >
< / tbody >
< / table >
< / div >
< h3 class = "subsection-title" > 开发任务分解< / h3 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 任务< / th > < th > Sprint< / th > < th > 人日< / th > < th > 依赖< / th > < / tr > < / thead >
< tbody >
< tr > < td > WebSocket 连接管理 + 读写 goroutine + 心跳< / td > < td > S11< / td > < td class = "num" > 3< / td > < td > 无< / td > < / tr >
< tr > < td > 房间状态机 + 玩家管理 + 广播机制< / td > < td > S11< / td > < td class = "num" > 4< / td > < td > WS 连接管理< / td > < / tr >
< tr > < td > Protobuf 消息协议定义 + 编解码< / td > < td > S11< / td > < td class = "num" > 2< / td > < td > 无< / td > < / tr >
< tr > < td > 电路增量同步 (delta apply + broadcast)< / td > < td > S11< / td > < td class = "num" > 4< / td > < td > 房间管理< / td > < / tr >
< tr > < td > 断线重连 + 全量快照恢复< / td > < td > S12< / td > < td class = "num" > 3< / td > < td > 增量同步< / td > < / tr >
< tr > < td > STUN/TURN 服务集成 + ICE 候选交换< / td > < td > S12< / td > < td class = "num" > 5< / td > < td > WS 连接管理< / td > < / tr >
< tr > < td > Redis Pub/Sub 跨节点消息< / td > < td > S12< / td > < td class = "num" > 3< / td > < td > 房间管理< / td > < / tr >
< tr > < td > 游戏操作服务端校验 (多人对战)< / td > < td > S12< / td > < td class = "num" > 3< / td > < td > 增量同步< / td > < / tr >
< tr > < td > Prometheus 指标埋点 + Grafana 看板< / td > < td > S12< / td > < td class = "num" > 2< / td > < td > WS 连接管理< / td > < / tr >
< tr > < td > 压力测试 (5000 连接 + 200 房间)< / td > < td > S16< / td > < td class = "num" > 3< / td > < td > 全部功能完成< / td > < / tr >
< tr > < td > 合计< / td > < td > -< / td > < td class = "num" > 32< / td > < td > -< / td > < / tr >
< / tbody >
< / table >
< / div >
< / section >
<!-- ===== Section 19 ===== -->
< section class = "doc-section" id = "testing" >
< p class = "section-eyebrow" > 19 / TESTING< / p >
< h2 class = "section-title" > 测试与质量保障< / h2 >
< p class = "section-desc" > 四层测试体系:单元测试、集成测试、性能测试、E2E 测试,覆盖客户端与服务端。< / p >
< h3 class = "subsection-title" > 19.1 测试分层< / h3 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 层级< / th > < th > 覆盖率目标< / th > < th > 工具< / th > < th > 运行频率< / th > < th > 负责人< / th > < / tr > < / thead >
< tbody >
< tr > < td > 单元测试< / td > < td > >=80%< / td > < td > Unity Test Framework (客户端) / Go testing (服务端)< / td > < td > 每次 PR< / td > < td > 开发人员< / td > < / tr >
< tr > < td > 集成测试< / td > < td > 核心链路 100%< / td > < td > Go test + Docker Compose / Unity PlayMode< / td > < td > 每日 Nightly< / td > < td > QA + 开发< / td > < / tr >
< tr > < td > 性能测试< / td > < td > 关键指标达标< / td > < td > Unity Profiler / k6 / wrk< / td > < td > 每 Sprint< / td > < td > QA< / td > < / tr >
< tr > < td > E2E 测试< / td > < td > 主流程 100%< / td > < td > Unity PlayMode + API 自动化< / td > < td > 每 Sprint< / td > < td > QA< / td > < / tr >
< / tbody >
< / table >
< / div >
< h3 class = "subsection-title" > 19.2 仿真引擎单元测试用例< / h3 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 用例编号< / th > < th > 测试场景< / th > < th > 输入< / th > < th > 预期输出< / th > < / tr > < / thead >
< tbody >
< tr > < td > SIM-001< / td > < td > 红石粉信号衰减< / td > < td > 电源(15) + 15 格红石粉< / td > < td > 第 15 格强度=1,第 16 格=0< / td > < / tr >
< tr > < td > SIM-002< / td > < td > 中继器重置强度< / td > < td > 衰减至 1 的信号经中继器< / td > < td > 中继器输出强度=15< / td > < / tr >
< tr > < td > SIM-003< / td > < td > AND 门真值表< / td > < td > 4 种输入组合 (00/01/10/11)< / td > < td > 输出 0/0/0/1< / td > < / tr >
< tr > < td > SIM-004< / td > < td > 红石火把反相< / td > < td > 附着方块有信号< / td > < td > 火把熄灭,无输出< / td > < / tr >
< tr > < td > SIM-005< / td > < td > 中继器锁存< / td > < td > 侧面输入信号时< / td > < td > 输出冻结在当前状态< / td > < / tr >
< tr > < td > SIM-006< / td > < td > 活塞推动链< / td > < td > 13 个连续方块< / td > < td > 推动失败(超过 12 个上限)< / td > < / tr >
< tr > < td > SIM-007< / td > < td > 短路检测< / td > < td > 两个电源直连同一导线< / td > < td > 触发短路警告,仿真暂停< / td > < / tr >
< tr > < td > SIM-008< / td > < td > 555 无稳态振荡< / td > < td > R=10, C=4< / td > < td > 输出方波,周期 = 0.693*(R1+R2)*C tick< / td > < / tr >
< tr > < td > SIM-009< / td > < td > 运放反相放大< / td > < td > Vin=5, Rf=10, R1=5< / td > < td > Vout = -10< / td > < / tr >
< tr > < td > SIM-010< / td > < td > ADC 4-bit 转换< / td > < td > 模拟输入强度=13< / td > < td > 数字输出 = 1101< / td > < / tr >
< / tbody >
< / table >
< / div >
< h3 class = "subsection-title" > 19.3 性能指标与压测目标< / h3 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 场景< / th > < th > 指标< / th > < th > 目标值< / th > < th > 工具< / th > < / tr > < / thead >
< tbody >
< tr > < td > 客户端 - 小型电路 (50 元件)< / td > < td > 仿真 FPS< / td > < td > >=60 fps< / td > < td > Unity Profiler< / td > < / tr >
< tr > < td > 客户端 - 大型电路 (500 元件)< / td > < td > 仿真 FPS< / td > < td > >=30 fps< / td > < td > Unity Profiler< / td > < / tr >
< tr > < td > 客户端 - 超大画布 (512x512)< / td > < td > 渲染 FPS< / td > < td > >=30 fps< / td > < td > Unity Profiler< / td > < / tr >
< tr > < td > 客户端 - 内存占用< / td > < td > 峰值内存< / td > < td > < =1GB< / td > < td > Unity Memory Profiler< / td > < / tr >
< tr > < td > 服务端 - 登录接口< / td > < td > P99 延迟< / td > < td > < =100ms< / td > < td > wrk< / td > < / tr >
< tr > < td > 服务端 - 商店购买< / td > < td > P99 延迟< / td > < td > < =200ms< / td > < td > wrk< / td > < / tr >
< tr > < td > 服务端 - 并发用户< / td > < td > 最大并发< / td > < td > >=5000< / td > < td > k6< / td > < / tr >
< tr > < td > 多人同步 - 画布编辑< / td > < td > 端到端延迟< / td > < td > < =200ms< / td > < td > 自定义压测脚本< / td > < / tr >
< tr > < td > 多人同步 - 匹配等待< / td > < td > 平均等待< / td > < td > < =30s< / td > < td > 日志统计< / td > < / tr >
< / tbody >
< / table >
< / div >
< h3 class = "subsection-title" > 19.4 Bug 分级与响应 SLA< / h3 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 级别< / th > < th > 定义< / th > < th > 响应时间< / th > < th > 修复时限< / th > < / tr > < / thead >
< tbody >
< tr > < td > P0 阻塞< / td > < td > 崩溃/数据丢失/核心功能不可用/安全漏洞< / td > < td > 30 分钟< / td > < td > 24 小时内< / td > < / tr >
< tr > < td > P1 严重< / td > < td > 核心功能异常/性能严重退化/支付错误< / td > < td > 2 小时< / td > < td > 当前 Sprint 内< / td > < / tr >
< tr > < td > P2 一般< / td > < td > 非核心功能异常/UI 错位/文案错误< / td > < td > 1 个工作日< / td > < td > 下个 Sprint< / td > < / tr >
< tr > < td > P3 轻微< / td > < td > 体验优化/建议类< / td > < td > 3 个工作日< / td > < td > Backlog 排期< / td > < / tr >
< / tbody >
< / table >
< / div >
< / section >
<!-- ===== Section 20 ===== -->
< section class = "doc-section" id = "performance" >
< p class = "section-eyebrow" > 20 / PERFORMANCE< / p >
< h2 class = "section-title" > 性能优化方案< / h2 >
< p class = "section-desc" > 客户端、服务端、网络三个维度的具体优化措施与实施节点。< / p >
< h3 class = "subsection-title" > 20.1 客户端优化< / h3 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 优化项< / th > < th > 问题< / th > < th > 方案< / th > < th > 实施节点< / th > < / tr > < / thead >
< tbody >
< tr > < td > ECS 仿真< / td > < td > 大电路 GameObject 方式导致 GC Spike< / td > < td > 仿真数据迁移至 ECS (Entities 1.0),元件数据用 IComponentData,信号传播用 IJobChunk< / td > < td > S4 仿真引擎重构< / td > < / tr >
< tr > < td > 分块渲染< / td > < td > 512x512 画布全量渲染卡顿< / td > < td > 16x16 Chunk + 视口裁剪,仅渲染可见区域 + 1 格缓冲< / td > < td > S2 画布开发时< / td > < / tr >
< tr > < td > 信号轨迹 GPU 绘制< / td > < td > 每格信号线逐个 GameObject 性能差< / td > < td > ComputeBuffer + 自定义 Shader,全画布信号轨迹一次 DrawCall< / td > < td > S4 仿真引擎 v2< / td > < / tr >
< tr > < td > 对象池< / td > < td > 放置/删除元件频繁 Instantiate/Destroy< / td > < td > 预生成 500 个元件 GameObject 池,按需取用/归还< / td > < td > S2 画布开发时< / td > < / tr >
< tr > < td > 仿真分帧< / td > < td > 大电路单 tick BFS 导致主线程阻塞< / td > < td > BFS 分帧执行,每帧最多 2000 格更新,跨帧续传< / td > < td > S4 仿真引擎 v2< / td > < / tr >
< tr > < td > LOD 降级< / td > < td > 全景浏览时细节渲染浪费 GPU< / td > < td > 缩放 < 50 % 时元件降级为纯色方块 , 关闭信号动画 < / td > < td > S15 UI 打磨< / td > < / tr >
< tr > < td > 纹理图集< / td > < td > 80 种元件图标各自纹理导致 DrawCall 多< / td > < td > 所有元件图标打包为 1024x1024 Atlas,单次 DrawCall< / td > < td > S7 元件填充时< / td > < / tr >
< tr > < td > 异步加载< / td > < td > 关卡数据/蓝图加载阻塞主线程< / td > < td > JSON 反序列化放入 async Task,加载完成回调切换< / td > < td > S6 关卡系统< / td > < / tr >
< / tbody >
< / table >
< / div >
< h3 class = "subsection-title" > 20.2 服务端优化< / h3 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 优化项< / th > < th > 问题< / th > < th > 方案< / th > < th > 实施节点< / th > < / tr > < / thead >
< tbody >
< tr > < td > Redis 余额缓存< / td > < td > 每次请求查 PostgreSQL 余额慢< / td > < td > 余额写入 Redis Cache-Aside,写操作回写 DB + 失效缓存< / td > < td > S8 货币系统< / td > < / tr >
< tr > < td > 连接池< / td > < td > 数据库频繁建连开销大< / td > < td > pgxpool 连接池,最大 25 连接/服务,空闲 60s 回收< / td > < td > S5 认证系统< / td > < / tr >
< tr > < td > 排行榜 ZSET< / td > < td > 排行榜分页查询慢< / td > < td > Redis Sorted Set 存储积分排名,ZREVRANGE 分页< / td > < td > S12 多人对战< / td > < / tr >
< tr > < td > 蓝图搜索 ES< / td > < td > PostgreSQL LIKE 搜索全表扫描< / td > < td > 蓝图数据同步至 Elasticsearch,支持全文搜索+标签过滤< / td > < td > S13 蓝图工坊< / td > < / tr >
< tr > < td > API 限流< / td > < td > 恶意刷接口< / td > < td > Nginx 层 rate_limit 100req/min/IP;关键接口令牌桶 10req/s/user< / td > < td > S5 认证系统< / td > < / tr >
< tr > < td > 异步任务队列< / td > < td > 成就检查/经济结算阻塞请求< / td > < td > RabbitMQ 消费者异步处理,请求仅入队即返回< / td > < td > S8 货币系统< / td > < / tr >
< / tbody >
< / table >
< / div >
< h3 class = "subsection-title" > 20.3 网络优化< / h3 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 优化项< / th > < th > 方案< / th > < th > 效果< / th > < / tr > < / thead >
< tbody >
< tr > < td > Delta 同步< / td > < td > 多人编辑仅同步变更的格子和元件,非全量画布< / td > < td > 带宽减少 90%+< / td > < / tr >
< tr > < td > Protobuf 编码< / td > < td > 实时同步消息用 Protobuf 替代 JSON< / td > < td > 消息体积减少 60%+< / td > < / tr >
< tr > < td > WebSocket 压缩< / td > < td > 开启 permessage-deflate 压缩< / td > < td > 带宽减少 50%+< / td > < / tr >
< tr > < td > 客户端预测< / td > < td > 元件放置/删除本地立即生效,服务端确认后修正< / td > < td > 操作延迟感知 < 50ms < / td > < / tr >
< tr > < td > 断线重连< / td > < td > WebSocket 断开 30s 内重连,恢复画布状态< / td > < td > 用户体验连续< / td > < / tr >
< / tbody >
< / table >
< / div >
< / section >
<!-- ===== Section 21 ===== -->
< section class = "doc-section" id = "security" >
< p class = "section-eyebrow" > 21 / SECURITY< / p >
< h2 class = "section-title" > 安全实施方案< / h2 >
< p class = "section-desc" > 认证安全、数据安全、反作弊、基础设施安全四层防护体系。< / p >
< h3 class = "subsection-title" > 21.1 认证与授权< / h3 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 措施< / th > < th > 实现方式< / th > < th > 说明< / th > < / tr > < / thead >
< tbody >
< tr > < td > 密码加密< / td > < td > bcrypt cost=12< / td > < td > 服务端加盐哈希,不可逆< / td > < / tr >
< tr > < td > JWT Token< / td > < td > RS256 签名,Access 15min + Refresh 7d< / td > < td > Access Token 无状态;Refresh Token Redis 黑名单< / td > < / tr >
< tr > < td > 登录保护< / td > < td > 5 次错误锁定 15min + IP 限流< / td > < td > 防止暴力破解< / td > < / tr >
< tr > < td > 异地登录验证< / td > < td > 新设备/新IP 邮箱二次验证码< / td > < td > 6 位数字验证码,5min 有效< / td > < / tr >
< tr > < td > OAuth 第三方< / td > < td > Google/GitHub/Discord OAuth2< / td > < td > 不存储第三方密码,仅存 provider+providerId< / td > < / tr >
< tr > < td > API 鉴权< / td > < td > Bearer Token + RBAC 权限校验< / td > < td > 每个接口声明所需角色,中间件统一校验< / td > < / tr >
< / tbody >
< / table >
< / div >
< h3 class = "subsection-title" > 21.2 数据安全< / h3 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 措施< / th > < th > 实现方式< / th > < / tr > < / thead >
< tbody >
< tr > < td > 传输加密< / td > < td > 全站 HTTPS TLS 1.3; WebSocket over TLS (wss)< / td > < / tr >
< tr > < td > 敏感数据加密< / td > < td > 邮箱/手机号 AES-256-GCM 加密存储;密钥 KMS 管理< / td > < / tr >
< tr > < td > SQL 注入防护< / td > < td > Go ORM 参数化查询,禁止字符串拼接 SQL< / td > < / tr >
< tr > < td > XSS 防护< / td > < td > 蓝图描述/用户名等 UGC 内容 HTML 转义后存储< / td > < / tr >
< tr > < td > CSRF 防护< / td > < td > SameSite=Strict Cookie + CSRF Token 双重防护< / td > < / tr >
< tr > < td > 数据备份< / td > < td > PostgreSQL 每日全量 + WAL 实时归档;7 日保留期< / td > < / tr >
< tr > < td > GDPR 合规< / td > < td > 支持账号注销+数据导出;隐私政策明确告知数据用途< / td > < / tr >
< / tbody >
< / table >
< / div >
< h3 class = "subsection-title" > 21.3 反作弊系统< / h3 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 场景< / th > < th > 检测方式< / th > < th > 处理措施< / th > < / tr > < / thead >
< tbody >
< tr > < td > 解谜作弊< / td > < td > 服务端校验电路数据合法性 + 输出验证< / td > < td > 拒绝奖励,记录异常行为< / td > < / tr >
< tr > < td > 货币刷取< / td > < td > 产出频率监控 + 行为模式分析< / td > < td > 异常产出冻结账户,人工审核< / td > < / tr >
< tr > < td > 多人对战作弊< / td > < td > 关键操作服务端权威校验 + 客户端预测修正< / td > < td > 判定无效,扣除积分,封禁 7 天< / td > < / tr >
< tr > < td > 蓝图抄袭< / td > < td > 蓝图哈希比对 + 相似度算法< / td > < td > 下架抄袭蓝图,警告作者< / td > < / tr >
< tr > < td > 客户端修改< / td > < td > 代码混淆 + 关键逻辑服务端校验 + 完整性校验< / td > < td > 完整性校验失败拒绝登录< / td > < / tr >
< tr > < td > 黑产刷币< / td > < td > 交易频率监控 + IP 设备指纹 + 金额异常检测< / td > < td > 冻结资产,IP 封禁,上报风控< / td > < / tr >
< / tbody >
< / table >
< / div >
< / section >
<!-- ===== Section 22 ===== -->
< section class = "doc-section" id = "cicd" >
< p class = "section-eyebrow" > 22 / CI/CD< / p >
< h2 class = "section-title" > CI/CD 流水线< / h2 >
< p class = "section-desc" > 从代码提交到生产部署的自动化流水线配置。< / p >
< h3 class = "subsection-title" > 22.1 流水线阶段< / h3 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 阶段< / th > < th > 触发< / th > < th > 任务< / th > < th > 预计时长< / th > < / tr > < / thead >
< tbody >
< tr > < td > Lint & Build< / td > < td > PR / Push< / td > < td > Go vet + golangci-lint; Unity Build;编译检查< / td > < td > 3 min< / td > < / tr >
< tr > < td > Unit Test< / td > < td > PR / Push< / td > < td > Go test -race -cover; Unity EditMode + PlayMode Test< / td > < td > 5 min< / td > < / tr >
< tr > < td > Integration Test< / td > < td > Push to main< / td > < td > Docker Compose 启动全链路;API 集成测试< / td > < td > 8 min< / td > < / tr >
< tr > < td > Build Artifacts< / td > < td > Push to main / Tag< / td > < td > Go 二进制编译;Unity 客户端打包(Win+Mac)< / td > < td > 15 min< / td > < / tr >
< tr > < td > Deploy Staging< / td > < td > Push to main< / td > < td > Docker 镜像推 Harbor; K8s 滚动更新 Staging< / td > < td > 5 min< / td > < / tr >
< tr > < td > Smoke Test< / td > < td > Deploy Staging 后< / td > < td > 核心接口可用性检查;客户端启动测试< / td > < td > 3 min< / td > < / tr >
< tr > < td > Deploy Production< / td > < td > Tag v* 手动触发< / td > < td > 人工确认 -> K8s 滚动更新 Production< / td > < td > 5 min< / td > < / tr >
< / tbody >
< / table >
< / div >
< h3 class = "subsection-title" > 22.2 环境配置< / h3 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 环境< / th > < th > 用途< / th > < th > 数据库< / th > < th > 部署方式< / th > < / tr > < / thead >
< tbody >
< tr > < td > Local< / td > < td > 开发调试< / td > < td > SQLite + 本地 Redis< / td > < td > docker-compose dev< / td > < / tr >
< tr > < td > Staging< / td > < td > 集成测试 + QA 验收< / td > < td > PostgreSQL(单机) + Redis(单机)< / td > < td > K8s staging namespace< / td > < / tr >
< tr > < td > Beta< / td > < td > 封闭/开放 Beta 测试< / td > < td > PostgreSQL(主从) + Redis(哨兵)< / td > < td > K8s beta namespace (2 副本)< / td > < / tr >
< tr > < td > Production< / td > < td > 正式生产< / td > < td > PostgreSQL(主从+读写分离) + Redis(集群)< / td > < td > K8s production namespace (3+ 副本 + HPA)< / td > < / tr >
< / tbody >
< / table >
< / div >
< h3 class = "subsection-title" > 22.3 发布与回滚< / h3 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 操作< / th > < th > 方式< / th > < th > 预计耗时< / th > < / tr > < / thead >
< tbody >
< tr > < td > 正常发布< / td > < td > Git Tag -> CI 自动构建 -> K8s 滚动更新(零停机)< / td > < td > 15-20 min< / td > < / tr >
< tr > < td > 热修复< / td > < td > hotfix 分支 -> 快速 CI -> 直接部署 Production< / td > < td > 10-15 min< / td > < / tr >
< tr > < td > 紧急回滚< / td > < td > kubectl rollout undo deployment/xxx --to-revision=N< / td > < td > 2 min< / td > < / tr >
< tr > < td > 数据库回滚< / td > < td > Migration down 脚本 + WAL 恢复< / td > < td > 15 min< / td > < / tr >
< tr > < td > 客户端热更新< / td > < td > 配置/数值/关卡 JSON 增量下发< / td > < td > 即时< / td > < / tr >
< tr > < td > 客户端全量更新< / td > < td > 官网安装包替换 + 增量补丁< / td > < td > 用户下次启动< / td > < / tr >
< / tbody >
< / table >
< / div >
< / section >
<!-- ===== Section 23 ===== -->
< section class = "doc-section" id = "budget" >
< p class = "section-eyebrow" > 23 / BUDGET< / p >
< h2 class = "section-title" > 预算与成本估算< / h2 >
< p class = "section-desc" > 9 个月开发期 + 首年运营期的成本估算(人民币)。< / p >
< h3 class = "subsection-title" > 23.1 人力成本< / h3 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 阶段< / th > < th > 人数< / th > < th > 月数< / th > < th > 人均月薪< / th > < th > 小计< / th > < / tr > < / thead >
< tbody >
< tr > < td > Phase 1 (M1-2)< / td > < td class = "num" > 4< / td > < td class = "num" > 2< / td > < td class = "num" > 25,000< / td > < td class = "num" > 200,000< / td > < / tr >
< tr > < td > Phase 2 (M3-5)< / td > < td class = "num" > 8< / td > < td class = "num" > 3< / td > < td class = "num" > 25,000< / td > < td class = "num" > 600,000< / td > < / tr >
< tr > < td > Phase 3 (M6-8)< / td > < td class = "num" > 12< / td > < td class = "num" > 3< / td > < td class = "num" > 25,000< / td > < td class = "num" > 900,000< / td > < / tr >
< tr > < td > Phase 4 (M9)< / td > < td class = "num" > 12< / td > < td class = "num" > 1< / td > < td class = "num" > 25,000< / td > < td class = "num" > 300,000< / td > < / tr >
< tr > < td > 开发期合计< / td > < td > -< / td > < td class = "num" > 9< / td > < td > -< / td > < td class = "num" > 2,000,000< / td > < / tr >
< tr > < td > 首年运营 (M10-12)< / td > < td class = "num" > 10< / td > < td class = "num" > 3< / td > < td class = "num" > 25,000< / td > < td class = "num" > 750,000< / td > < / tr >
< tr > < td > 总计首年< / td > < td > -< / td > < td class = "num" > 12< / td > < td > -< / td > < td class = "num" > 2,750,000< / td > < / tr >
< / tbody >
< / table >
< / div >
< h3 class = "subsection-title" > 23.2 基础设施成本(月度)< / h3 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 项目< / th > < th > 规格< / th > < th > 月费用< / th > < th > 备注< / th > < / tr > < / thead >
< tbody >
< tr > < td > 应用服务器< / td > < td > 8C16G x3 (K8s 节点)< / td > < td class = "num" > 3,600< / td > < td > 阿里云 ECS< / td > < / tr >
< tr > < td > 数据库< / td > < td > PostgreSQL 8C32G 主从< / td > < td class = "num" > 4,500< / td > < td > RDS 高可用版< / td > < / tr >
< tr > < td > Redis< / td > < td > 4G 集群版< / td > < td class = "num" > 800< / td > < td > 阿里云 Redis< / td > < / tr >
< tr > < td > 对象存储< / td > < td > MinIO/OSS 500GB< / td > < td class = "num" > 500< / td > < td > 蓝图文件+截图< / td > < / tr >
< tr > < td > CDN< / td > < td > 1TB/月 流量< / td > < td class = "num" > 500< / td > < td > 更新包+静态资源< / td > < / tr >
< tr > < td > 消息队列< / td > < td > RabbitMQ 2C4G< / td > < td class = "num" > 600< / td > < td > 异步任务< / td > < / tr >
< tr > < td > Elasticsearch< / td > < td > 2C8G< / td > < td class = "num" > 1,200< / td > < td > 蓝图搜索< / td > < / tr >
< tr > < td > 监控+日志< / td > < td > Prometheus+Grafana+ELK< / td > < td class = "num" > 1,500< / td > < td > 自建+云服务混合< / td > < / tr >
< tr > < td > 域名+SSL< / td > < td > redcircuit.game + 通配符证书< / td > < td class = "num" > 100< / td > < td > 年费摊月< / td > < / tr >
< tr > < td > 月度合计< / td > < td > -< / td > < td class = "num" > 13,300< / td > < td > -< / td > < / tr >
< tr > < td > 首年合计< / td > < td > -< / td > < td class = "num" > 159,600< / td > < td > -< / td > < / tr >
< / tbody >
< / table >
< / div >
< h3 class = "subsection-title" > 23.3 其他成本< / h3 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 项目< / th > < th > 费用< / th > < th > 说明< / th > < / tr > < / thead >
< tbody >
< tr > < td > Unity 订阅< / td > < td class = "num" > 0< / td > < td > Unity Personal 免费版(年收入 < 20万刀 ) ; Pro 版 $ 204 / 月 / 座 ( 年收入超限后 ) < / td > < / tr >
< tr > < td > 开发工具< / td > < td class = "num" > 20,000< / td > < td > Figma Pro + JetBrains IDE + 其他工具年费< / td > < / tr >
< tr > < td > 第三方服务< / td > < td class = "num" > 15,000< / td > < td > 邮件服务/SMS 验证码/OAuth/API 网关< / td > < / tr >
< tr > < td > 美术外包< / td > < td class = "num" > 80,000< / td > < td > 部分元件图标/特效/UI 切图外包< / td > < / tr >
< tr > < td > QA 外包< / td > < td class = "num" > 30,000< / td > < td > Beta 测试期间外包测试< / td > < / tr >
< tr > < td > 营销推广< / td > < td class = "num" > 100,000< / td > < td > 首发推广+B 站/KOL 合作< / td > < / tr >
< tr > < td > 其他合计< / td > < td class = "num" > 245,000< / td > < td > -< / td > < / tr >
< / tbody >
< / table >
< / div >
< h3 class = "subsection-title" > 23.4 总预算汇总< / h3 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 类别< / th > < th > 金额< / th > < th > 占比< / th > < / tr > < / thead >
< tbody >
< tr > < td > 人力成本< / td > < td class = "num" > 2,750,000< / td > < td class = "num" > 87%< / td > < / tr >
< tr > < td > 基础设施< / td > < td class = "num" > 159,600< / td > < td class = "num" > 5%< / td > < / tr >
< tr > < td > 其他成本< / td > < td class = "num" > 245,000< / td > < td class = "num" > 8%< / td > < / tr >
< tr > < td > 总计首年预算< / td > < td class = "num" > 3,154,600< / td > < td class = "num" > 100%< / td > < / tr >
< tr > < td > 建议预留缓冲 (15%)< / td > < td class = "num" > 473,190< / td > < td > -< / td > < / tr >
< tr > < td > 建议总预算< / td > < td class = "num" > 3,627,790< / td > < td > -< / td > < / tr >
< / tbody >
< / table >
< / div >
< / section >
<!-- ===== Section 24 ===== -->
< section class = "doc-section" id = "rollout" >
< p class = "section-eyebrow" > 24 / ROLLOUT< / p >
< h2 class = "section-title" > 上线发布策略< / h2 >
< p class = "section-desc" > 分阶段灰度发布、数据监控、应急预案与运营节奏。< / p >
< h3 class = "subsection-title" > 24.1 灰度发布计划< / h3 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 阶段< / th > < th > 时间< / th > < th > 用户量< / th > < th > 目标< / th > < th > 通过标准< / th > < / tr > < / thead >
< tbody >
< tr > < td > 内测 Alpha< / td > < td > M5 结束< / td > < td > 团队 20 人< / td > < td > 核心功能验证< / td > < td > P0 Bug 清零< / td > < / tr >
< tr > < td > 封闭 Beta< / td > < td > M8 结束< / td > < td > 500 人邀请制< / td > < td > 全功能验证 + 压力测试< / td > < td > P0/P1 清零;留存 >30%< / td > < / tr >
< tr > < td > 开放 Beta< / td > < td > M9 W1-2< / td > < td > 5,000 人公开注册< / td > < td > 服务器压测 + 数据收集< / td > < td > 5000 并发稳定;P0 清零< / td > < / tr >
< tr > < td > 正式发布< / td > < td > M9 W3< / td > < td > 全网开放< / td > < td > 商业化运营启动< / td > < td > 首周 DAU >5,000;留存 >35%< / td > < / tr >
< tr > < td > 推广期< / td > < td > M10+< / td > < td > 持续增长< / td > < td > KOL 推广 + 社区运营< / td > < td > MAU >50,000< / td > < / tr >
< / tbody >
< / table >
< / div >
< h3 class = "subsection-title" > 24.2 发布日监控清单< / h3 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 监控项< / th > < th > 工具< / th > < th > 告警阈值< / th > < th > 负责人< / th > < / tr > < / thead >
< tbody >
< tr > < td > 服务器 CPU< / td > < td > Prometheus< / td > < td > >80% 持续 5min< / td > < td > 服务端工程师< / td > < / tr >
< tr > < td > 服务器内存< / td > < td > Prometheus< / td > < td > >85% 持续 5min< / td > < td > 服务端工程师< / td > < / tr >
< tr > < td > API P99 延迟< / td > < td > Grafana< / td > < td > >500ms< / td > < td > 服务端工程师< / td > < / tr >
< tr > < td > API 错误率< / td > < td > Sentry< / td > < td > >1%< / td > < td > 服务端工程师< / td > < / tr >
< tr > < td > 客户端崩溃率< / td > < td > Sentry< / td > < td > >2%< / td > < td > 客户端工程师< / td > < / tr >
< tr > < td > WebSocket 连接数< / td > < td > Grafana< / td > < td > >4000< / td > < td > 服务端工程师< / td > < / tr >
< tr > < td > 数据库慢查询< / td > < td > pg_stat_statements< / td > < td > >1s< / td > < td > DBA / 服务端< / td > < / tr >
< tr > < td > 登录成功率< / td > < td > Grafana< / td > < td > < 95 % < / td > < td > QA< / td > < / tr >
< tr > < td > 支付成功率< / td > < td > Grafana< / td > < td > < 98 % < / td > < td > QA + 运营< / td > < / tr >
< / tbody >
< / table >
< / div >
< h3 class = "subsection-title" > 24.3 应急预案< / h3 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 故障等级< / th > < th > 触发条件< / th > < th > 响应流程< / th > < th > 恢复目标< / th > < / tr > < / thead >
< tbody >
< tr > < td > S1 严重故障< / td > < td > 全服不可用 / 数据丢失 / 支付异常< / td > < td > 电话通知全员 -> 紧急 War Room -> 修复 -> 事后复盘< / td > < td > 1 小时内恢复< / td > < / tr >
< tr > < td > S2 主要故障< / td > < td > 核心功能不可用 / 性能严重退化< / td > < td > 飞书告警 -> 值班工程师处理 -> 升级判断< / td > < td > 4 小时内恢复< / td > < / tr >
< tr > < td > S3 一般故障< / td > < td > 非核心功能异常 / 少数用户受影响< / td > < td > 工单系统 -> 工作时间内处理< / td > < td > 24 小时内恢复< / td > < / tr >
< tr > < td > 回滚预案< / td > < td > 新版本引入严重 Bug< / td > < td > kubectl rollout undo -> 数据库回滚 -> 客户端提示旧版< / td > < td > 10 分钟内回滚完成< / td > < / tr >
< / tbody >
< / table >
< / div >
< h3 class = "subsection-title" > 24.4 首年运营节奏< / h3 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 月份< / th > < th > 运营重点< / th > < th > 内容更新< / th > < th > 活动< / th > < / tr > < / thead >
< tbody >
< tr > < td > M9 发布月< / td > < td > 稳定性保障 + 新手引导优化< / td > < td > 240 关 + 80 元件首发< / td > < td > 首发七日登录奖励< / td > < / tr >
< tr > < td > M10< / td > < td > 数据驱动调优 + 社区建设< / td > < td > 限时活动关卡 20 关< / td > < td > 万圣节主题电路设计赛< / td > < / tr >
< tr > < td > M11< / td > < td > 赛季 1 启动 + 蓝图生态< / td > < td > 新增元件 5 种 + 赛季排行< / td > < td > 赛季 1 排位赛 + 双倍红石币周末< / td > < / tr >
< tr > < td > M12< / td > < td > 留存提升 + 平衡性补丁< / td > < td > 大师关卡 +10 关 + 蓝图审核优化< / td > < td > 圣诞/元旦限定皮肤 + 年度总结< / td > < / tr >
< / tbody >
< / table >
< / div >
< / section >
<!-- ===== Section 25 ===== -->
< section class = "doc-section" id = "appendix" >
< p class = "section-eyebrow" > 25 / APPENDIX< / p >
< h2 class = "section-title" > 附录< / h2 >
< p class = "section-desc" > 元件成本速查表与常见电路设计模式参考。< / p >
< h3 class = "subsection-title" > A. 元件成本速查表< / h3 >
< p class = "body-text" > 全部元件按成本升序排列,便于快速查阅预算规划。共 80 种元件。< / p >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 序号< / th > < th > 编号< / th > < th > 元件名< / th > < th > 类别< / th > < th > 成本(红石币)< / th > < / tr > < / thead >
< tbody >
< tr > < td class = "num" > 1< / td > < td class = "num" > W-01< / td > < td > 红石粉< / td > < td > WIRE< / td > < td class = "num" > 5< / td > < / tr >
< tr > < td class = "num" > 2< / td > < td class = "num" > O-13< / td > < td > LED< / td > < td > OUTPUT< / td > < td class = "num" > 15< / td > < / tr >
< tr > < td class = "num" > 3< / td > < td class = "num" > W-04< / td > < td > 绝缘导线< / td > < td > WIRE< / td > < td class = "num" > 15< / td > < / tr >
< tr > < td class = "num" > 4< / td > < td class = "num" > W-06< / td > < td > 铜导线< / td > < td > WIRE< / td > < td class = "num" > 12< / td > < / tr >
< tr > < td class = "num" > 5< / td > < td class = "num" > A-01< / td > < td > 电阻< / td > < td > ANALOG< / td > < td class = "num" > 20< / td > < / tr >
< tr > < td class = "num" > 6< / td > < td class = "num" > W-07< / td > < td > 跳线< / td > < td > WIRE< / td > < td class = "num" > 18< / td > < / tr >
< tr > < td class = "num" > 7< / td > < td class = "num" > W-05< / td > < td > 信号桥< / td > < td > WIRE< / td > < td class = "num" > 25< / td > < / tr >
< tr > < td class = "num" > 8< / td > < td class = "num" > S-11< / td > < td > 拨动开关< / td > < td > SWITCH< / td > < td class = "num" > 25< / td > < / tr >
< tr > < td class = "num" > 9< / td > < td class = "num" > P-03< / td > < td > 拉杆< / td > < td > POWER< / td > < td class = "num" > 30< / td > < / tr >
< tr > < td class = "num" > 10< / td > < td class = "num" > S-03< / td > < td > 拉杆< / td > < td > SWITCH< / td > < td class = "num" > 30< / td > < / tr >
< tr > < td class = "num" > 11< / td > < td class = "num" > P-05< / td > < td > 压力板< / td > < td > POWER< / td > < td class = "num" > 35< / td > < / tr >
< tr > < td class = "num" > 12< / td > < td class = "num" > S-04< / td > < td > 压力板木质< / td > < td > SWITCH< / td > < td class = "num" > 35< / td > < / tr >
< tr > < td class = "num" > 13< / td > < td class = "num" > O-14< / td > < td > 蜂鸣器< / td > < td > OUTPUT< / td > < td class = "num" > 35< / td > < / tr >
< tr > < td class = "num" > 14< / td > < td class = "num" > P-04< / td > < td > 按钮< / td > < td > POWER< / td > < td class = "num" > 40< / td > < / tr >
< tr > < td class = "num" > 15< / td > < td class = "num" > S-01< / td > < td > 按钮木质< / td > < td > SWITCH< / td > < td class = "num" > 40< / td > < / tr >
< tr > < td class = "num" > 16< / td > < td class = "num" > S-02< / td > < td > 按钮石质< / td > < td > SWITCH< / td > < td class = "num" > 40< / td > < / tr >
< tr > < td class = "num" > 17< / td > < td class = "num" > P-09< / td > < td > 直流电源< / td > < td > POWER< / td > < td class = "num" > 40< / td > < / tr >
< tr > < td class = "num" > 18< / td > < td class = "num" > A-04< / td > < td > 二极管< / td > < td > ANALOG< / td > < td class = "num" > 45< / td > < / tr >
< tr > < td class = "num" > 19< / td > < td class = "num" > S-07< / td > < td > 绊线钩< / td > < td > SWITCH< / td > < td class = "num" > 45< / td > < / tr >
< tr > < td class = "num" > 20< / td > < td class = "num" > P-01< / td > < td > 红石火把< / td > < td > POWER< / td > < td class = "num" > 50< / td > < / tr >
< tr > < td class = "num" > 21< / td > < td class = "num" > S-05< / td > < td > 压力板铁质< / td > < td > SWITCH< / td > < td class = "num" > 50< / td > < / tr >
< tr > < td class = "num" > 22< / td > < td class = "num" > O-10< / td > < td > 门(木)< / td > < td > OUTPUT< / td > < td class = "num" > 50< / td > < / tr >
< tr > < td class = "num" > 23< / td > < td class = "num" > A-05< / td > < td > 稳压管< / td > < td > ANALOG< / td > < td class = "num" > 55< / td > < / tr >
< tr > < td class = "num" > 24< / td > < td class = "num" > O-12< / td > < td > 灯笼< / td > < td > OUTPUT< / td > < td class = "num" > 55< / td > < / tr >
< tr > < td class = "num" > 25< / td > < td class = "num" > A-02< / td > < td > 电容< / td > < td > ANALOG< / td > < td class = "num" > 60< / td > < / tr >
< tr > < td class = "num" > 26< / td > < td class = "num" > O-01< / td > < td > 红石灯< / td > < td > OUTPUT< / td > < td class = "num" > 60< / td > < / tr >
< tr > < td class = "num" > 27< / td > < td class = "num" > O-11< / td > < td > 活板门< / td > < td > OUTPUT< / td > < td class = "num" > 60< / td > < / tr >
< tr > < td class = "num" > 28< / td > < td class = "num" > S-10< / td > < td > 标靶< / td > < td > SWITCH< / td > < td class = "num" > 60< / td > < / tr >
< tr > < td class = "num" > 29< / td > < td class = "num" > A-03< / td > < td > 电感< / td > < td > ANALOG< / td > < td class = "num" > 70< / td > < / tr >
< tr > < td class = "num" > 30< / td > < td class = "num" > O-07< / td > < td > 音符盒< / td > < td > OUTPUT< / td > < td class = "num" > 70< / td > < / tr >
< tr > < td class = "num" > 31< / td > < td class = "num" > P-08< / td > < td > 探测铁轨< / td > < td > POWER< / td > < td class = "num" > 70< / td > < / tr >
< tr > < td class = "num" > 32< / td > < td class = "num" > P-10< / td > < td > 电池组< / td > < td > POWER< / td > < td class = "num" > 85< / td > < / tr >
< tr > < td class = "num" > 33< / td > < td class = "num" > W-02< / td > < td > 红石中继器< / td > < td > WIRE< / td > < td class = "num" > 80< / td > < / tr >
< tr > < td class = "num" > 34< / td > < td class = "num" > S-06< / td > < td > 压力板金质< / td > < td > SWITCH< / td > < td class = "num" > 80< / td > < / tr >
< tr > < td class = "num" > 35< / td > < td class = "num" > O-09< / td > < td > 门(铁)< / td > < td > OUTPUT< / td > < td class = "num" > 80< / td > < / tr >
< tr > < td class = "num" > 36< / td > < td class = "num" > O-15< / td > < td > 数码管< / td > < td > OUTPUT< / td > < td class = "num" > 90< / td > < / tr >
< tr > < td class = "num" > 37< / td > < td class = "num" > P-06< / td > < td > 阳光探测器< / td > < td > POWER< / td > < td class = "num" > 90< / td > < / tr >
< tr > < td class = "num" > 38< / td > < td class = "num" > P-07< / td > < td > 阳光探测器(夜)< / td > < td > POWER< / td > < td class = "num" > 90< / td > < / tr >
< tr > < td class = "num" > 39< / td > < td class = "num" > S-08< / td > < td > 阳光探测器< / td > < td > SWITCH< / td > < td class = "num" > 90< / td > < / tr >
< tr > < td class = "num" > 40< / td > < td class = "num" > P-02< / td > < td > 红石块< / td > < td > POWER< / td > < td class = "num" > 100< / td > < / tr >
< tr > < td class = "num" > 41< / td > < td class = "num" > O-06< / td > < td > 漏斗< / td > < td > OUTPUT< / td > < td class = "num" > 100< / td > < / tr >
< tr > < td class = "num" > 42< / td > < td class = "num" > L-08< / td > < td > 中继器逻辑< / td > < td > LOGIC< / td > < td class = "num" > 100< / td > < / tr >
< tr > < td class = "num" > 43< / td > < td class = "num" > S-12< / td > < td > 继电器< / td > < td > SWITCH< / td > < td class = "num" > 120< / td > < / tr >
< tr > < td class = "num" > 44< / td > < td class = "num" > W-03< / td > < td > 红石比较器< / td > < td > WIRE< / td > < td class = "num" > 120< / td > < / tr >
< tr > < td class = "num" > 45< / td > < td class = "num" > O-05< / td > < td > 投掷器< / td > < td > OUTPUT< / td > < td class = "num" > 120< / td > < / tr >
< tr > < td class = "num" > 46< / td > < td class = "num" > X-05< / td > < td > 信号分配器< / td > < td > SPECIAL< / td > < td class = "num" > 120< / td > < / tr >
< tr > < td class = "num" > 47< / td > < td class = "num" > S-09< / td > < td > 观察者< / td > < td > SWITCH< / td > < td class = "num" > 150< / td > < / tr >
< tr > < td class = "num" > 48< / td > < td class = "num" > O-02< / td > < td > 活塞< / td > < td > OUTPUT< / td > < td class = "num" > 150< / td > < / tr >
< tr > < td class = "num" > 49< / td > < td class = "num" > L-01< / td > < td > NOT< / td > < td > LOGIC< / td > < td class = "num" > 150< / td > < / tr >
< tr > < td class = "num" > 50< / td > < td class = "num" > X-04< / td > < td > 信号延迟器< / td > < td > SPECIAL< / td > < td class = "num" > 150< / td > < / tr >
< tr > < td class = "num" > 51< / td > < td class = "num" > A-09< / td > < td > 光耦< / td > < td > ANALOG< / td > < td class = "num" > 160< / td > < / tr >
< tr > < td class = "num" > 52< / td > < td class = "num" > O-04< / td > < td > 发射器< / td > < td > OUTPUT< / td > < td class = "num" > 180< / td > < / tr >
< tr > < td class = "num" > 53< / td > < td class = "num" > A-06< / td > < td > NPN 三极管< / td > < td > ANALOG< / td > < td class = "num" > 180< / td > < / tr >
< tr > < td class = "num" > 54< / td > < td class = "num" > A-07< / td > < td > PNP 三极管< / td > < td > ANALOG< / td > < td class = "num" > 180< / td > < / tr >
< tr > < td class = "num" > 55< / td > < td class = "num" > PD-04< / td > < td > MOS 管< / td > < td > POWER_DEVICE< / td > < td class = "num" > 200< / td > < / tr >
< tr > < td class = "num" > 56< / td > < td class = "num" > O-03< / td > < td > 粘性活塞< / td > < td > OUTPUT< / td > < td class = "num" > 200< / td > < / tr >
< tr > < td class = "num" > 57< / td > < td class = "num" > L-02< / td > < td > AND< / td > < td > LOGIC< / td > < td class = "num" > 200< / td > < / tr >
< tr > < td class = "num" > 58< / td > < td class = "num" > L-03< / td > < td > OR< / td > < td > LOGIC< / td > < td class = "num" > 200< / td > < / tr >
< tr > < td class = "num" > 59< / td > < td class = "num" > PD-01< / td > < td > 单向可控硅 SCR< / td > < td > POWER_DEVICE< / td > < td class = "num" > 220< / td > < / tr >
< tr > < td class = "num" > 60< / td > < td class = "num" > L-04< / td > < td > NAND< / td > < td > LOGIC< / td > < td class = "num" > 220< / td > < / tr >
< tr > < td class = "num" > 61< / td > < td class = "num" > L-05< / td > < td > NOR< / td > < td > LOGIC< / td > < td class = "num" > 220< / td > < / tr >
< tr > < td class = "num" > 62< / td > < td class = "num" > PD-06< / td > < td > 继电器模组< / td > < td > POWER_DEVICE< / td > < td class = "num" > 250< / td > < / tr >
< tr > < td class = "num" > 63< / td > < td class = "num" > L-06< / td > < td > XOR< / td > < td > LOGIC< / td > < td class = "num" > 250< / td > < / tr >
< tr > < td class = "num" > 64< / td > < td class = "num" > L-07< / td > < td > XNOR< / td > < td > LOGIC< / td > < td class = "num" > 250< / td > < / tr >
< tr > < td class = "num" > 65< / td > < td class = "num" > X-06< / td > < td > 物品过滤器< / td > < td > SPECIAL< / td > < td class = "num" > 250< / td > < / tr >
< tr > < td class = "num" > 66< / td > < td class = "num" > PD-02< / td > < td > 双向可控硅 TRIAC< / td > < td > POWER_DEVICE< / td > < td class = "num" > 280< / td > < / tr >
< tr > < td class = "num" > 67< / td > < td class = "num" > A-08< / td > < td > 运算放大器< / td > < td > ANALOG< / td > < td class = "num" > 280< / td > < / tr >
< tr > < td class = "num" > 68< / td > < td class = "num" > PD-05< / td > < td > 达林顿管< / td > < td > POWER_DEVICE< / td > < td class = "num" > 300< / td > < / tr >
< tr > < td class = "num" > 69< / td > < td class = "num" > O-08< / td > < td > TNT< / td > < td > OUTPUT< / td > < td class = "num" > 300< / td > < / tr >
< tr > < td class = "num" > 70< / td > < td class = "num" > X-03< / td > < td > 信号示波器< / td > < td > SPECIAL< / td > < td class = "num" > 300< / td > < / tr >
< tr > < td class = "num" > 71< / td > < td class = "num" > X-10< / td > < td > 555 定时器< / td > < td > SPECIAL< / td > < td class = "num" > 350< / td > < / tr >
< tr > < td class = "num" > 72< / td > < td class = "num" > L-09< / td > < td > RS锁存器< / td > < td > LOGIC< / td > < td class = "num" > 350< / td > < / tr >
< tr > < td class = "num" > 73< / td > < td class = "num" > L-10< / td > < td > D触发器< / td > < td > LOGIC< / td > < td class = "num" > 400< / td > < / tr >
< tr > < td class = "num" > 74< / td > < td class = "num" > X-07< / td > < td > 物品分类器< / td > < td > SPECIAL< / td > < td class = "num" > 400< / td > < / tr >
< tr > < td class = "num" > 75< / td > < td class = "num" > PD-03< / td > < td > IGBT< / td > < td > POWER_DEVICE< / td > < td class = "num" > 420< / td > < / tr >
< tr > < td class = "num" > 76< / td > < td class = "num" > X-08< / td > < td > ADC 模数转换器< / td > < td > SPECIAL< / td > < td class = "num" > 450< / td > < / tr >
< tr > < td class = "num" > 77< / td > < td class = "num" > X-09< / td > < td > DAC 数模转换器< / td > < td > SPECIAL< / td > < td class = "num" > 450< / td > < / tr >
< tr > < td class = "num" > 78< / td > < td class = "num" > L-11< / td > < td > 计数器< / td > < td > LOGIC< / td > < td class = "num" > 500< / td > < / tr >
< tr > < td class = "num" > 79< / td > < td class = "num" > X-02< / td > < td > 结构方块< / td > < td > SPECIAL< / td > < td class = "num" > 800< / td > < / tr >
< tr > < td class = "num" > 80< / td > < td class = "num" > X-01< / td > < td > 命令方块< / td > < td > SPECIAL< / td > < td class = "num" > 1000< / td > < / tr >
< / tbody >
< / table >
< / div >
< h3 class = "subsection-title" > B. 常见电路设计模式< / h3 >
< div class = "table-wrap" >
< table class = "doc-table" >
< thead > < tr > < th > 模式< / th > < th > 核心元件< / th > < th > 用途< / th > < / tr > < / thead >
< tbody >
< tr > < td > T 触发器< / td > < td > RS 锁存器 + 边沿检测< / td > < td > 按钮单次脉冲切换开关状态< / td > < / tr >
< tr > < td > 时钟发生器< / td > < td > 中继器环形振荡< / td > < td > 产生周期性脉冲信号< / td > < / tr >
< tr > < td > 脉冲缩短器< / td > < td > 比较器 + 中继器< / td > < td > 将长脉冲截断为单 tick 短脉冲< / td > < / tr >
< tr > < td > 脉冲延长器< / td > < td > 多级中继器链< / td > < td > 延长脉冲持续时间< / td > < / tr >
< tr > < td > 二进制计数器< / td > < td > D 触发器级联< / td > < td > 多 Bit 二进制计数与溢出进位< / td > < / tr >
< tr > < td > 优先编码器< / td > < td > OR 门阵列 + NOT< / td > < td > 多输入中输出最高优先级< / td > < / tr >
< tr > < td > 边沿检测器< / td > < td > 比较器 + 中继器< / td > < td > 检测信号上升沿或下降沿< / td > < / tr >
< tr > < td > 数据选择器 MUX< / td > < td > AND + OR + NOT< / td > < td > 按控制端选择多路输入之一输出< / td > < / tr >
< / tbody >
< / table >
< / div >
< / section >
< / div >
< / main >
< footer class = "doc-footer" >
< p > RedCircuit · 红石回路 - 完整开发文档 v1.0< / p >
< p > © 2026 RedCircuit Studio. 保留所有权利。< / p >
< p > 文档生成日期:2026-08-07 | 机密文档仅供内部使用< / p >
< / footer >
< script >
(function(){
var toggle=document.getElementById('tocToggle');
var sidebar=document.getElementById('tocSidebar');
if(toggle&&sidebar){toggle.addEventListener('click',function(){sidebar.classList.toggle('open'); });}
var links=document.querySelectorAll('.toc-link');
var sections=document.querySelectorAll('.doc-section');
function onScroll(){
var cur='';
sections.forEach(function(s){if(window.scrollY>=s.offsetTop-90){cur=s.id;}});
links.forEach(function(l){
var href=l.getAttribute('href');
l.classList.toggle('active',href==='#'+cur);
});
}
window.addEventListener('scroll',onScroll,{passive:true});
onScroll();
})();
lucide.createIcons();
< / script >
< / body >
< / html >