Phase 0-2: Vite/Phaser 4/TS boilerplate + Platform Adapter + core match (vs 4 AI personalities)
Phase 0 (foundation): - package.json, tsconfig.json (strict), vite.config.ts (base: './'), .eslintrc.cjs - index.html, src/main.ts (Phaser game init + platform detection) - src/config/defaults.ts (Remote Config defaults, palette, constants) - src/types/index.ts (все schemas из data-contracts: SaveState, MatchResult, RemoteConfig, etc.) - src/platform/: PlatformAdapter interface + MockPlatformAdapter + YgPlatformAdapter Phase 1 (core mechanics): - src/scenes/: Boot, Preload, MainMenu (Quick Match selector), Setup, Match, Result - src/game/: Table (геометрия + walls + ворота), Ball (last-touch + color tracking), Flipper (player + AI, swing + cooldown), Bumper (4 типа: standard/slingshot/curve/turbo) - src/scoring/: MatchTracker (last-touch + bumper points), calculateScores (unified scoring pipeline per data-contracts v3.8 requirement) - src/ai/: AIPlayer interface + DefensiveAI Easy/Medium Phase 2 (setup + AI personalities): - src/scenes/SetupScene (5 active slots, click-cycle bumper types, 30s timer) - src/ai/personalities/: AggressiveAI, TricksterAI, GhostAI (Easy/Medium; Hard cradle-aim = Phase 3) - src/ai/factory.ts (createAIPlayer) - MainMenuScene: выбор AI-личности + сложности - MatchScene использует factory вместо хардкода Anti-A2W enforcement: calculateScores применяет penalty per v3.5 model (Continue × 0.5, Campaign Skip × 0.7, +1 заряд × 0.9, реролл × 0.85, Boost active × 0.7; ×2 sezon очки только в local). Что НЕ в этом commit'е (следующие фазы): - Phase 3: бустер «Захват» (cradle + slow-mo), Hard AI (cradle-aim solver), Ghost adaptation, YG Player API cloud-save, achievements - Phase 4: Campaign (12 матчей), Tournament (8/16 bracket), шейдеры (CRT + bloom + chromatic aberration), 29 AI-арт ассетов, музыка - Phase 5: реальная YG SDK интеграция (ads + payments), Remote Config Nakama RPC - Phase 6: YG submission Pre-greenlit concept-пакет — ~/Knowledge/Projects/pinball-duel/ (19 файлов, 10 audit-раундов). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
51
index.html
Normal file
51
index.html
Normal file
@@ -0,0 +1,51 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ru">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no, viewport-fit=cover" />
|
||||
<meta name="theme-color" content="#0a0a14" />
|
||||
<meta name="description" content="Дуэльный пинбол с 4 AI-противниками — у каждого свой характер." />
|
||||
<title>Пинбол-Дуэль</title>
|
||||
<style>
|
||||
html, body {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
overflow: hidden;
|
||||
background: #0a0a14;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
-webkit-tap-highlight-color: transparent;
|
||||
touch-action: none;
|
||||
user-select: none;
|
||||
-webkit-user-select: none;
|
||||
}
|
||||
#game-container {
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
#loading {
|
||||
color: #ff006e;
|
||||
font-family: 'Press Start 2P', monospace, sans-serif;
|
||||
font-size: 14px;
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
animation: pulse 1.2s ease-in-out infinite;
|
||||
}
|
||||
@keyframes pulse {
|
||||
0%, 100% { opacity: 1; }
|
||||
50% { opacity: 0.4; }
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div id="game-container">
|
||||
<div id="loading">Loading…</div>
|
||||
</div>
|
||||
<script type="module" src="/src/main.ts"></script>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user