(function() { // Googleのシステムエラー画面を強制的に真っ白にリセットする(超強力版) document.body.innerHTML = ""; document.head.innerHTML = ""; // ページの背景を真っ黒にしてゲーム画面を上書き const bgStyle = document.createElement("style"); bgStyle.textContent = "body { background: #121212 !important; color: #fff !important; font-family: sans-serif !important; display: flex !important; justify-content: center !important; align-items: center !important; height: 100vh !important; margin: 0 !important; }"; document.head.appendChild(bgStyle); // 1. スタイルの設定 const style = document.createElement("style"); style.id = "typing-style"; style.textContent = ` #typing-app { background: #1e1e1e !important; padding: 30px !important; border-radius: 15px !important; border: 4px solid #ffcc00 !important; text-align: center !important; width: 400px !important; box-shadow: 0 4px 20px rgba(0,0,0,0.8) !important; position: relative !important; z-index: 9999999 !important; display: block !important; } #typing-title { color: #ffcc00 !important; margin: 0 0 20px 0 !important; font-size: 1.8rem !important; text-shadow: 2px 2px #000 !important; } #typing-word { font-size: 2.5rem !important; font-weight: bold !important; color: #00ffcc !important; margin: 15px 0 5px 0 !important; } #typing-kana { font-size: 1.2rem !important; color: #aaa !important; margin-bottom: 20px !important; } #typing-input { font-size: 1.5rem !important; padding: 10px !important; width: 85% !important; border: 3px solid #ffcc00 !important; border-radius: 6px !important; background: #2a2a2a !important; color: white !important; text-align: center !important; outline: none !important; } .typing-btn { font-size: 1.3rem !important; padding: 10px 25px !important; background: #ffcc00 !important; color: #000 !important; border: none !important; border-radius: 6px !important; cursor: pointer !important; font-weight: bold !important; margin: 10px 5px !important; box-shadow: 0 4px #cc9900 !important; } .typing-stats { display: flex !important; justify-content: space-around !important; font-size: 1.2rem !important; font-weight: bold !important; margin-bottom: 15px !important; } .typing-hide { display: none !important; } #inbox-area { background: #121212 !important; border: 2px solid #444 !important; border-radius: 8px !important; padding: 12px !important; margin-top: 15px !important; text-align: left !important; max-height: 150px !important; overflow-y: auto !important; } .mail-box { background: #2a2a2a !important; padding: 8px !important; margin-bottom: 6px !important; border-radius: 4px !important; cursor: pointer !important; border-left: 5px solid #00ffcc !important; font-size: 0.9rem !important; } `; document.head.appendChild(style); // 2. 画面パーツ作成 const app = document.createElement("div"); app.id = "typing-app"; const title = document.createElement("h1"); title.id = "typing-title"; title.textContent = "ブロスタ タイピング"; app.appendChild(title); // スタート画面 const startScreen = document.createElement("div"); const desc = document.createElement("p"); desc.textContent = "制限時間は60秒!キャラの名前を入力しよう!"; const startBtn = document.createElement("button"); startBtn.className = "typing-btn"; startBtn.textContent = "スタート!"; const inboxBtn = document.createElement("button"); inboxBtn.className = "typing-btn"; inboxBtn.textContent = "📩 Inbox (受信箱)"; startScreen.appendChild(desc); startScreen.appendChild(startBtn); startScreen.appendChild(inboxBtn); app.appendChild(startScreen); // ゲーム画面 const gameScreen = document.createElement("div"); gameScreen.className = "typing-hide"; const stats = document.createElement("div"); stats.className = "typing-stats"; const timeBox = document.createElement("div"); const scoreBox = document.createElement("div"); stats.appendChild(timeBox); stats.appendChild(scoreBox); const wordDisp = document.createElement("div"); wordDisp.id = "typing-word"; const kanaDisp = document.createElement("div"); kanaDisp.id = "typing-kana"; const inputField = document.createElement("input"); inputField.id = "typing-input"; inputField.type = "text"; inputField.autocomplete = "off"; gameScreen.appendChild(stats); gameScreen.appendChild(wordDisp); gameScreen.appendChild(kanaDisp); gameScreen.appendChild(inputField); app.appendChild(gameScreen); // リザルト画面 const resultScreen = document.createElement("div"); resultScreen.className = "typing-hide"; const resultTitle = document.createElement("h2"); resultTitle.textContent = "タイムアップ!"; const resultScore = document.createElement("p"); const retryBtn = document.createElement("button"); retryBtn.className = "typing-btn"; retryBtn.textContent = "もう一度遊ぶ"; resultScreen.appendChild(resultTitle); resultScreen.appendChild(resultScore); resultScreen.appendChild(retryBtn); app.appendChild(resultScreen); // Inbox画面 const inboxScreen = document.createElement("div"); inboxScreen.className = "typing-hide"; const inboxTitle = document.createElement("h3"); inboxTitle.textContent = "📩 受信箱一覧"; const inboxContent = document.createElement("div"); inboxContent.id = "inbox-area"; const closeInboxBtn = document.createElement("button"); closeInboxBtn.className = "typing-btn"; closeInboxBtn.textContent = "戻る"; inboxScreen.appendChild(inboxTitle); inboxScreen.appendChild(inboxContent); inboxScreen.appendChild(closeInboxBtn); app.appendChild(inboxScreen); document.body.appendChild(app); // 3. データ const brawlers = [ { name: "シェルリー", kana: "しぇりー" }, { name: "ニタ", kana: "にた" }, { name: "コルト", kana: "こると" }, { name: "ブル", kana: "ぶる" }, { name: "ブロック", kana: "ぶろっく" }, { name: "ポコ", kana: "ぽこ" }, { name: "エドガー", kana: "えどがー" }, { name: "モーティス", kana: "もーてぃす" }, { name: "スパイク", kana: "すぱいく" }, { name: "レオン", kana: "れおん" } ]; const mails = [ { title: "【運営】エラーを突破しました!", body: "大変お待たせしました!バグ画面を消滅させてゲームを起動しました!", read: false } ]; let score = 0; let timeLeft = 60; let current = {}; let timer; function nextWord() { inputField.value = ""; const idx = Math.floor(Math.random() * brawlers.length); current = brawlers[idx]; wordDisp.textContent = current.name; kanaDisp.textContent = "(" + current.kana + ")"; } startBtn.onclick = function() { startScreen.className = "typing-hide"; gameScreen.className = ""; score = 0; timeLeft = 60; scoreBox.textContent = "スコア: 0"; timeBox.textContent = "残り時間: 60秒"; nextWord(); setTimeout(function() { inputField.focus(); }, 100); timer = setInterval(function() { timeLeft = timeLeft - 1; timeBox.textContent = "残り時間: " + timeLeft + "秒"; if (timeLeft == 0) { clearInterval(timer); gameScreen.className = "typing-hide"; resultScreen.className = ""; resultScore.textContent = "あなたのスコア: " + score + "問正解!"; } }, 1000); }; inputField.oninput = function() { const val = inputField.value.trim(); if (val == current.name || val == current.kana) { score = score + 1; scoreBox.textContent = "スコア: " + score; nextWord(); } }; retryBtn.onclick = function() { resultScreen.className = "typing-hide"; startScreen.className = ""; }; inboxBtn.onclick = function() { startScreen.className = "typing-hide"; inboxScreen.className = ""; inboxContent.textContent = ""; mails.forEach(function(mail) { const mBox = document.createElement("div"); mBox.className = mail.read ? "mail-box mail-read" : "mail-box"; mBox.textContent = mail.title; mBox.onclick = function() { mail.read = true; mBox.className = "mail-box mail-read"; alert(mail.body); }; inboxContent.appendChild(mBox); }); }; closeInboxBtn.onclick = function() { inboxScreen.className = "typing-hide"; startScreen.className = ""; }; })();