horiyouta's picture
2508181817
861a629
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Machine Learning RPG</title>
<script src="https://cdn.tailwindcss.com"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.2.0/css/all.min.css">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Orbitron:wght@400;700&family=Share+Tech+Mono&display=swap" rel="stylesheet">
<link rel="stylesheet" href="style.css">
</head>
<body class="text-white">
<div class="background-grid"></div>
<div class="background-glow"></div>
<!-- ★★★ タイトル画面を追加 ★★★ -->
<div id="title-screen" class="fixed inset-0 z-50 flex flex-col justify-center items-center">
<div class="title-logo">
<h1 class="text-7xl font-bold tracking-widest">MACHINE LEARNING</h1><br>
<h2 class="text-8xl font-bold tracking-wider text-glow-yellow">RPG</h2>
</div>
<button id="start-game-btn" class="btn btn-primary mt-12 text-2xl px-12 py-4">ゲームを始める</button>
<p class="mt-8 text-cyan-300/60 font-mono">ニューラルネットワークを構築・訓練し、MNISTモンスターを倒せ!</p>
</div>
<!-- ★★★ ゲームコンテナを追加 ★★★ -->
<div id="game-container" class="container mx-auto p-4 h-screen flex-col hidden">
<header class="text-center mb-4 flex-shrink-0">
<h1 class="text-5xl font-bold tracking-widest text-glow">Machine Learning RPG</h1>
<p class="text-cyan-300/80 font-mono tracking-wider">ニューラルネットワークを構築・訓練し、MNISTモンスターを倒せ!</p>
</header>
<div class="flex-grow flex gap-4 min-h-0">
<!-- 左: モデル構築エリア -->
<aside class="w-1/4 glass-pane flex flex-col">
<h2 class="section-title"><i class="fas fa-microchip mr-3"></i>あなたのモデル</h2>
<div id="player-model-layers" class="flex-grow bg-black/20 rounded-lg p-2 space-y-2 overflow-y-auto min-h-0 relative">
<canvas id="layer-connections" class="absolute top-0 left-0 w-full h-full pointer-events-none"></canvas>
<p class="text-gray-400 text-center p-4">インベントリからレイヤー(層)をここにドラッグ&ドロップしてください。</p>
</div>
<div class="mt-4 text-center p-4">
<button id="battle-btn" class="btn btn-primary w-full" disabled>
<i class="fas fa-fist-raised"></i> バトル開始!
</button>
<button id="restart-btn" class="btn btn-secondary w-full mt-2 hidden">
<i class="fas fa-redo"></i> タイトルへ戻る
</button>
</div>
</aside>
<!-- 中央: バトルエリア -->
<main class="w-1/2 glass-pane p-4 flex flex-col items-center justify-between relative">
<div class="w-full">
<h2 class="character-name text-red-400">ENEMY: MNIST_MONSTER</h2>
<div class="hp-bar-container">
<div id="enemy-hp-bar" class="hp-bar" style="width: 100%">100%</div>
</div>
</div>
<div id="enemy-area" class="text-center relative">
<div class="enemy-scanline"></div>
<div class="enemy-glitch-overlay"></div>
<p id="enemy-message" class="text-lg text-cyan-200">挑戦者を待っている...</p>
<img id="enemy-image" src="" alt="MNIST Monster" class="hidden w-48 h-48 rounded-lg mt-4 enemy-image-style">
</div>
<div class="w-full">
<h2 class="character-name text-green-400">PLAYER: AI_AGENT</h2>
<div class="hp-bar-container">
<div id="player-hp-bar" class="hp-bar" style="width: 100%">100%</div>
</div>
</div>
<div id="battle-log" class="absolute bottom-24 left-1/2 -translate-x-1/2 text-2xl font-bold text-center w-full text-glow-yellow"></div>
</main>
<!-- 右: アイテム(層)エリア -->
<aside class="w-1/4 glass-pane flex flex-col">
<h2 class="section-title"><i class="fas fa-cubes mr-3"></i>インベントリ</h2>
<div id="layer-inventory" class="p-2 min-h-0 flex-grow overflow-y-auto"></div>
<div id="item-info-area" class="mt-4 h-64 glass-pane-inner flex-shrink-0 flex flex-col">
<div id="layer-description" class="text-sm text-gray-300 h-16 overflow-y-auto mb-2 p-2">
<p>アイテムをクリックまたはホバーすると、ここに説明が表示されます。</p>
</div>
<div id="preview-animation-area" class="flex-grow bg-black/30 rounded-lg relative overflow-hidden">
<div class="idle-particles"></div>
</div>
</div>
</aside>
</div>
<!-- 下: メッセージログエリア -->
<footer id="message-log-area" class="flex-shrink-0 h-24 glass-pane mt-4 p-3 overflow-y-auto font-mono text-sm"></footer>
</div>
<!-- モーダル (変更なし) -->
<div id="item-selection-modal" class="fixed inset-0 bg-black bg-opacity-80 backdrop-blur-sm flex-col justify-center items-center z-50 hidden">
<h2 class="text-4xl font-bold mb-8 text-glow-yellow tracking-widest">報酬を選択せよ</h2>
<div id="item-choices" class="flex gap-8"></div>
<div id="choice-info-area" class="mt-8 w-3/4 h-64 glass-pane flex gap-4 p-4">
<div id="choice-description" class="w-1/2 text-lg text-gray-300">
<p>アイテムにカーソルを合わせるかタップすると、ここに説明が表示されます。</p>
</div>
<div id="choice-preview-area" class="w-1/2 bg-black/30 rounded-lg relative overflow-hidden">
<div class="idle-particles"></div>
</div>
</div>
<!-- ★★★ ここから追加 ★★★ -->
<div id="choice-selection-footer" class="mt-4 text-center opacity-0 transition-opacity duration-300">
<button id="confirm-choice-btn" class="btn btn-primary text-xl px-10 py-3" disabled>
<i class="fas fa-check-circle mr-2"></i> このアイテムにする
</button>
<!-- 選択されたアイテムのIDを保持するための非表示要素 -->
<input type="hidden" id="selected-choice-id">
</div>
</div>
<div id="animation-modal" class="fixed inset-0 bg-gray-900 bg-opacity-90 backdrop-blur-sm flex justify-center items-center z-50 hidden">
<div id="visualization-area" class="w-[95%] h-[90%] glass-pane relative p-4 overflow-hidden">
<div id="labels-container" class="absolute inset-x-0 top-0 h-24 pointer-events-none flex items-center"></div>
<div id="prediction-result" class="absolute text-2xl font-bold right-8 top-8 opacity-0 transition-opacity duration-500"></div>
<button id="close-modal-btn" class="absolute top-4 left-4 text-3xl text-gray-400 hover:text-white transition-colors">&times;</button>
</div>
</div>
<!-- eel.jsの読み込みを削除 -->
<script type="text/javascript" src="script.js"></script>
</body>
</html>