Files
NicePong/index.html

401 lines
156 KiB
HTML
Raw Permalink Normal View History

2024-09-13 14:04:46 +08:00
<!DOCTYPE html>
<html lang="zh-TW">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>NicePong 好乓 by NiceChord 好和弦</title>
<style>
body {
margin: 0;
padding: 20px;
display: flex;
flex-direction: column;
align-items: left;
min-height: 100vh;
background-color: #f0f0f0;
font-family: Arial, sans-serif;
}
.container {
position: relative;
width: 600px;
height: 600px;
}
#imageCanvas {
position: absolute;
top: 0;
left: 0;
}
#textOverlay {
position: absolute;
top: 25%;
left: 50%;
transform: translate(-50%, -50%);
color: white;
font-size: 20px;
text-align: center;
width: 100%;
}
#toggleButton {
width: 50px;
margin-bottom: 10px;
}
#tutorial {
margin-bottom: 10px;
width: 600px;
}
#status {
margin-bottom: 10px;
}
</style>
<script>
// 最初設定
const WINNING_SCORE = 11; // 11 分贏
const INITIAL_INTERVAL = 1000; // 最開始的時間間隔
const LATE_HIT_TOLERANCE = 1.9; // 回球時間容許度(倍數)
const MIN_INTERVAL = 300; // 最短時間間隔 (最快速度)
const INTERVAL_DECREASE = 30; // 每打一下,時間間隔減少量
const MAX_CONSECUTIVE_SAME_BUTTON = 2; // 同一人最多可以重複使用幾次同一個按鍵
// 遊戲狀態
let gameState = {
player1Score: 0, // 一號玩家分數
player2Score: 0, // 二號玩家分數
currentServer: 1, // 現在誰發球
serveCount: 0, // 發了幾球
lastHitButton: null, // 最後一球用哪個按鈕打的
currentPlayer: 1, // 現在輪到誰要按鈕
gameInterval: INITIAL_INTERVAL, // 時間間隔
timerHandle: null,
isGameOver: false, // 遊戲結束了嗎?
isWaitingForServe: true, // 是不是等著要發球?
consecutiveButtonUse: {1: 0, 2: 0},
lastButtonUsed: {1: null, 2: null},
lastPointReason: null // 最後一球為什麼得分?
};
// 按鍵設定
const keyMappings = {
z: { player: 1, button: 1 },
x: { player: 1, button: 2 },
c: { player: 1, button: 3 },
i: { player: 2, button: 1 },
o: { player: 2, button: 2 },
p: { player: 2, button: 3 }
};
// 按鍵監視器
document.addEventListener('keydown', (event) => {
const key = event.key.toLowerCase();
if (key in keyMappings) {
const { player, button } = keyMappings[key];
handlePlayerHit(player, button);
}
});
// 新的一球
function startRally() {
gameState.isWaitingForServe = false;
changeText(`玩家 ${gameState.currentPlayer} 使用按鈕 ${gameState.lastHitButton} 擊中球!` + getScoreText());
gameState.timerHandle = setTimeout(() => {
playSound('tableHit');
gameState.currentPlayer = 3 - gameState.currentPlayer; // 切換到另一個玩家
changeText(`玩家 ${gameState.currentPlayer} 請擊球!` + getScoreText());
startPlayerTurn(); // 球彈到桌上後,下一個玩家就可以開始擊球。
}, gameState.gameInterval);
}
// 玩家開始可以擊球
function startPlayerTurn() {
clearTimeout(gameState.timerHandle); // 清除之前的計時器
gameState.timerHandle = setTimeout(() => {
playSound('fall'); // 失誤音效:沒有來得及回球。
gameState.lastPointReason = "時間內未擊球!";
endPlayerTurn(true); // 如果時間內沒有擊球,就 endPlayerTurn();
}, gameState.gameInterval * LATE_HIT_TOLERANCE);
}
// 更新連續按鍵資料
function updateConsecutiveButtonUse(player, button) {
if (gameState.lastButtonUsed[player] === button) {
// 玩家跟上次按了一樣的按鈕
gameState.consecutiveButtonUse[player]++;
if (gameState.consecutiveButtonUse[player] > MAX_CONSECUTIVE_SAME_BUTTON) {
console.log(`玩家 ${player} 用了按鈕 ${button} 超過連續 ${MAX_CONSECUTIVE_SAME_BUTTON} 次。`);
return false;
}
} else {
// 沒有跟上次按相同按鈕
gameState.consecutiveButtonUse[player] = 1;
gameState.lastButtonUsed[player] = button;
}
return true;
}
// 處理按鈕
function handlePlayerHit(player, button) {
if (gameState.isWaitingForServe) {
if (player === gameState.currentServer) {
if (updateConsecutiveButtonUse(player, button)) {
playSound(`hit${button}`);
gameState.lastHitButton = button;
startRally();
} else {
endPlayerTurn(true); // 發球時違反連續按鍵規則
}
}
return;
}
if (player !== gameState.currentPlayer) return; // Wrong player
if (gameState.timerHandle === null) return; // No active turn
clearTimeout(gameState.timerHandle);
if (button === gameState.lastHitButton) {
playSound('wrong'); // 失誤音效:用了跟對手一樣的按鈕,失敗。
gameState.lastPointReason = "回球失誤!";
endPlayerTurn(true); // 玩家用了跟對手一樣的按鈕,失敗。
} else if (updateConsecutiveButtonUse(player, button)) { // 順便更新連續按鍵
// 如果也沒有違反連續同按鍵的規則。
playSound(`hit${button}`);
gameState.lastHitButton = button;
gameState.gameInterval = Math.max(MIN_INTERVAL, gameState.gameInterval - INTERVAL_DECREASE);
startRally(); // 直接開始新的回合,不需要在這裡切換玩家
} else {
playSound('foul'); // 失誤音效:違反連續同按鍵次數規則。
gameState.lastPointReason = "連續同按鈕三次犯規!";
endPlayerTurn(true); // 違反連續同按鍵次數規則。
}
}
// 來回結束
function endPlayerTurn(playerLost) {
clearTimeout(gameState.timerHandle);
gameState.timerHandle = null;
if (playerLost) {
const winningPlayer = 3 - gameState.currentPlayer;
updateScore(winningPlayer);
}
if (!gameState.isGameOver) {
const winningPlayer = 3 - gameState.currentPlayer;
prepareNextServe(winningPlayer);
}
}
// 更新分數
function updateScore(scoringPlayer) {
if (scoringPlayer === 1) {
gameState.player1Score++;
} else {
gameState.player2Score++;
}
console.log(`分數 - ${gameState.player1Score}${gameState.player2Score}`);
if (gameState.player1Score >= WINNING_SCORE || gameState.player2Score >= WINNING_SCORE) {
if (Math.abs(gameState.player1Score - gameState.player2Score) >= 2) {
endGame();
}
}
}
// 準備下次發球
function prepareNextServe(winningPlayer) {
gameState.serveCount++;
if (gameState.serveCount === 2 || (gameState.player1Score >= 10 && gameState.player2Score >= 10)) {
// 已經發兩球,或是 Deuce 狀態
gameState.currentServer = 3 - gameState.currentServer; // 換人發球
gameState.serveCount = 0;
}
gameState.currentPlayer = gameState.currentServer;
gameState.lastHitButton = null;
gameState.gameInterval = INITIAL_INTERVAL;
gameState.isWaitingForServe = true;
gameState.consecutiveButtonUse = {1: 0, 2: 0};
gameState.lastButtonUsed = {1: null, 2: null};
console.log(`${gameState.lastPointReason}玩家 ${winningPlayer} 得分!玩家 ${gameState.currentServer},請發球!`);
changeText(`${gameState.lastPointReason}玩家 ${winningPlayer} 得分!玩家 ${gameState.currentServer},請發球!` + getScoreText());
}
// 產生比分文字
function getScoreText(){
return "\n" + gameState.player1Score + " - " + gameState.player2Score
}
// 結束遊戲
function endGame() {
gameState.isGameOver = true;
const winner = gameState.player1Score > gameState.player2Score ? 1 : 2;
console.log(`遊戲結束,玩家 ${winner} 獲勝!`);
changeText(`遊戲結束,玩家 ${winner} 獲勝!` + getScoreText());
playSound('gameOver');
}
// 開始遊戲
function startGame() {
gameState = {
player1Score: 0,
player2Score: 0,
currentServer: 1,
serveCount: 0,
lastHitButton: null,
currentPlayer: 1,
gameInterval: INITIAL_INTERVAL,
timerHandle: null,
isGameOver: false,
isWaitingForServe: true,
consecutiveButtonUse: {1: 0, 2: 0},
lastButtonUsed: {1: null, 2: null},
lastPointReason: null // 最後一球為什麼得分?
};
console.log("遊戲開始!玩家 1準備發球");
changeText("遊戲開始!玩家 1準備發球" + getScoreText());
}
//
// 聲音部份
//
// 聲音都是 Base64 編碼的 mp3 檔案。
const sounds = {
tableHit: "data:audio/mp3;base64,SUQzAwAAAAAIJVRTU0UAAAAbAAAB//5MAGEAdgBmADYAMAAuADMALgAxADAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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",
hit1: "data:audio/mp3;base64,SUQzAwAAAAAIJVRTU0UAAAAbAAAB//5MAGEAdgBmADYAMAAuADMALgAxADAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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
hit2: "data:audio/mp3;base64,SUQzAwAAAAAIJVRTU0UAAAAbAAAB//5MAGEAdgBmADYAMAAuADMALgAxADAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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
hit3: "data:audio/mp3;base64,SUQzAwAAAAAIJVRTU0UAAAAbAAAB//5MAGEAdgBmADYAMAAuADMALgAxADAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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
gameOver: "data:audio/mp3;base64,SUQzAwAAAAAIJVRTU0UAAAAbAAAB//5MAGEAdgBmADYAMAAuADMALgAxADAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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
foul: "data:audio/mp3;base64,SUQzAwAAAAAIJVRTU0UAAAAbAAAB//5MAGEAdgBmADYAMAAuADMALgAxADAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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
wrong: "data:audio/mp3;base64,SUQzAwAAAAAIJVRTU0UAAAAbAAAB//5MAGEAdgBmADYAMAAuADMALgAxADAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//tUwAAAAAAAAAAAAAAAAAAAAAAASW5mbwAAAA8AAAAtAAAigAALCxAQFhYbGyEhISYmLCwyMjc3PT09QkJISE1NU1NTWVleXmRkaWlvb290dHp6gICFhYWLi5CQlpabm6GhoaamrKyysre3t729wsLIyM3N09PT2dne3uTk6enp7+/09Pr6//8AAAAATGF2YzYwLjMuAAAAAAAAAAAAAAAAJAPnAAAAAAAAIoC+F3yzAAAAAAAAAAAAAAAAAAAA//tUxAAACLTvJHRhgAFymmsnMLAAAYAAM7np6YQQcABGXetHRPdxZoBi4iV3gGBnET3RE/5Hc/RC0T/9HfRE//3dzjvwv/////iITgAgaH//Ln+c/wxE4fLg/PhJpxZppx/gBDc/DGTu1ad0JSot6AdQB5ET2sgqaa59Aeh1AwN5ouSy4xHSP5kOtckHCUWmo/om9X1KLnXb0ze3m9srObtrc/m5+32cf8Ui3dcZ+5vn//0+26ZjlWAJiKgHWs2o//tUxAQACnypVLmGAAFUlqqDMPAASnTS+MHdh2Jc4QFJGwWSHUkYYLgjAZF9F5aXhCeYJaKA8Q1ypBVHi9vktqrfXstOOOuMxvsrYVrvN2aPLs50X/k7tazMdBU3Nhx30PvL4Gl7KL7oLg66EySlP606BsTnFyFhhDR9KNVtrUmZyZxt4VWVCkqqqP46ugzLu7KxQpafcSj17qrkyrlOM7FXxNWme6y91KyyZjVrr71r/xZ1r52ACAAYCQUsH2ae//tUxAUACoCZWLmGAAFaFiunHsAAzD7ytZHVS9e4cRkg8N0gicLF5wXRJD9CLBbPizgcnmP+2vPZjP4ffibfPEtmrY5nXq5zBw4frl0rXa3pZilF48HzgBLHkD3v35a4ADTrTkDowAAsLef6rOpzgok/AOkYgw6l2CIPs4HErjqAYETyurzgSmh3VrRBvslg5Ptv6Ry30Qzk4M1Vb507s9/uxtJWmsmn/Nvv3TKWCX3ONpR8aXWkAACgEQCoIABl//tUxAUACsC9WzmEgAFPluqDMvABGMC0UD3nwQwzERI+XvUHcmHp8Wa4JCGTHEQJCJk9MoChNEjRZJhGjEsXylJOTZIgYR35Su49mUZ7CsmrGiaUUXrY/tzz+fZjSKX/lo3i2tqvRxcmcaSBRF1mjKCnHkTNX0wJ3ScGREUw4TKhuC+ruuE0qVMq4LPGknWGFy2/no5wfWLmKyxokWSJZgcLVr4vy7eVVbySJTFNf1/9v5cUrmBt6GgH+zdCMO7S//tUxAWACuytVrmHgAFQlqqDMsAAwwBmvGJqcIQbbvPDSGHMjtnm8FeL3HY3BkTJwsKdfvF7MeyFQFVEZ2ekTO7te3rVWHTXifVM32xSyK2FilLz3vb6+f3dfFBouBDn4s7+5fceSXEgBoASkMXGRDgJCCmVL3pGusBHERQDgTeZW+fFuEezloxd54/1fMEbS1atx+JefqGbWvj21aXV19YscxcuTHx9vTO1mVjn0pf3Vgr/4lr7kPXJiohPAAhg//tUxAUACli5VhmGAAFkl2qDMvAAI1JCeAmrDxpp1kvUz0GQeIHhyIhPhIEca8fzIe0S1XNrITp84xD8dKfswsuPrll4XnIJtevSlgoWzxbX/pPTaemZk+rCCZr/od2kh+mo5oUFBVTxhJwiALxtYg5MVhq723UCGKZjFwJw8ysKF8cyEKthmn29kfafq+sefMe2IT7MdkiUtfO4+4+I0GA+rAiK9Xs6sv87+fa2cW/ZIke5r/qTBAAwAAAAB8AA//tUxASACryRVTmGAAFSlupDMsABfitjHnmiBKI4uETG9Eeg/KCzSkrKJtZUIrgMAnLS6lRNRqxw26Mm0eUON9a24uOmffYccr05i112zUwvr7OW/nQ04QgqwIgPUanmTtNaONddCH6wgCOw4vsGmiqptBp2qqOfB7xMqB4C47n9AmHBw/58qvrg6HRabRWxa17p6dOnOU7nGbQu1TMl8pMmM/XbXZxK4usuqy1Wtp7JmZe0q76lrAAAAAFwB/GT//tUxASBiVhHVV2UgBkRCKrozCTLuBRuVGoda4oqcodIx9ss9C5TKKYTCtUmTQImWFa3CSJ5bmATu7EVPG3duVBGmCQJnKrStLCAJ+3zN92SHf3/S39V8AygDRgB2RYfog/WgVUTinwQbDCo4N8gQsFbV3Fdum2mEmxInPBo+92/1r3M9te7namvV//oYuqqjI8veoFCVlllf71SEAAAAkhTAFUrBiMR0khYSWycBhlin32pJvjAVAnYYjZTbNs6//tUxBKAiXxNWafgxpkjlWy09I1uSUP9OhzEzAXDdrNZ6uezzf29kPHE6F//kfdKyP/v+ESciWR7kPc3bECUUk4AjxASmbIxZxSiaxLNBagOhRFh0URUWZMokafV3eer5yRrTNUsYincs7tl2ZIa5zueSIziUEJluogpCQvH0EWOA9L1IXWQCCCQACoAO9GjFbYx7zH+wDwMMeRyq5DVLKYRsPg1kmblbhsSTQSOtypSIyynLw/LKYCEUFQztOH6//tUxB2ACUylX6ekbTEnEK008wnenRJVZvr6R/lgZJvetrRZUtaCaSJKKkgHu5GlnBm4NRRot
fall: "data:audio/mp3;base64,SUQzAwAAAAAIJVRTU0UAAAAbAAAB//5MAGEAdgBmADYAMAAuADMALgAxADAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//tUwAAAAAAAAAAAAAAAAAAAAAAASW5mbwAAAA8AAAA0AAAnwAAJDg4TExgYHBwhISYmKyswMDU1OTk+PkNISE1NUlJWVltbYGBlZWpqb29zc3h4fX2Ch4eMjJCQlZWamp+fpKSpqa2tsrK3t7y8wcbGysrPz9TU2dne3uPj5+fs7PHx9vb7+/8AAAAATGF2YzYwLjMuAAAAAAAAAAAAAAAAJAZwAAAAAAAAJ8DOTjOlAAAAAAAAAAAAAAAAAAAA//tUxAAACNWM92KEdckcmSFwoLbQAAgARPAAdCEYhLfV9shCNY/n/yApv//m/////mN/H8CIC8AJKY3IAFwMC0RP9ETd3KJ/XcviYd4+lfQAQ9CuVcnd0AAAR4BpzJtwMEAE50S9qs1d2bdOtFqEsAmTd/V//oyCE2BTAWA40l///7dd1HRyO/69WCAsaudtcKOOoGH4nMvYMeaUtKDARBpgaQxtdnQpXIAE67Tzb5P5+sqILtBa32oigRUZs4ym//tUxA6ACSDNG6DilAHHIeJEfc5oq3r1alpy+kibE0MqAkkDsoAAoTiTx5jBrJp3ob9f1a1Cgz6H//P////VayigA9G5q/puYY09kxyrUsqaylUYgYmMzxiAS5VV3kwIpY5+t4b/e/+k+1Vy5L70vjkzIYUkgbCpEA+mc+VqisYWM8ckELVv/oaIs8hwJFAPeUEaaRilpn6Bgt00G2VqU1cfIeooHGbu3RKUB+4khamM36FiQQW1pYmSgD+5PXoI//tUxAaACrkVQ6FN9ZFWo6m0mCp7Z5CKjamZRiIkAHUhi7F9LyfKizyjBzMt/9aKRdAXuBY5eR/2tZadb9aV61Hg/MF1H2snd0DBBlPNTdqRN/OdxIFfTVxZSH5jUou2+/QNQbmZPP/2bg3mpM6ZSdjloAEJBAV9UwLoc5e6H1KOKZSy+X19b9aM6GdhoaX///6+gxREBCqk1adSFBtkW5icyvU4JhzT7l2WRx5IFfHeZv9qu3+/+QUQD2DWTj8A//tUxAYACmUbV6S189lhoel81NDo9ueeKOjRAAipeiBhIgZ6k8mAVVU6af6TU3t69Bal0xBQhv////Z4+CMt0NSv0ly8mrSs9Z9WpCzXJNiwVgf2lbmdrUf7Ol7APmVszAAQBO8D3T7BMFSIJ8NHQILKGE6igbbV1KY0NREgCoZeXZ3/s6T0/6NZcLguABBwPsv/7f/+gR4jgenQZvNW1Op0GWvup1azAhgpVmqDJAaqKLwkqmd3iJd3MKoOXAZZ//tUxAWACq0LYeYpsxFaIOx880Dq/ZKOXipFCPgyMSkX/VsEs7ZPlExzJozH4HvX84sphZ1WnPs5GMDASQcv/9v/+xJg6yEqqhSq7ovWgyfqdVbFwkDp3U2xJmIKSD0K0TDy7sQkQkurvW/l8MRug7NwJAwQIEA4GJSF4E3U7S6Mof9aF/u6mdDX3nC6HwCzCZb/6l7/7WTOCzBKKLtS9Blan3W+38wPhvKB18+c0xMk+FG9adVnCZmZdRPBbHe9//tUxAUAChkXacfAs3Fpm+z8waLK/8tZGfDK/c2ZkKpGo2OpHkNqVjdqMC4OkWMdvVu/ZLuu/VrSOEwOMTig////+xQYVR83Ivs+016vdWZmRvSMuyhIXUAC7q3CZmadkBWCS2h5iZ03Eah0wZCkagoNDmIyVWKmQnZxvy5EC613Jk5rSGROSKRiP/nLDYNbBEfE98e1+iPF3Hz0p5AszEdLatBBq9US5pZxQMmCaUrKXb00NZQqeJmZlmMlGHLc//tUxASACnDta+Y8shFRo2z8dhS7DSs62NJOTOvNinCqJzfIRfNz6/SxWAnGotAN9mJZk89GQ9XIHBokLdS//9VozOUplW76oyq6mIaw9MwUKsBQD13lLp0PhubhytKmCZqYZSCQhSSgm+FQGG4GArAyQwjXFQx8tFMwJpaMHbpYBAJzPAYpzNYr3Or/nOIAIBwEAxjf9enxwDi6MHj0O0++9ETY02R2ZSt00bovVVJkHEexoO/tyCAIwWZQHCv6//tUxAYACsyhW+es1MFYF6z8Z6Ca8nXRzLpXp9RrJYxzqNrPmj1eoyHIlyQFie69RO3iPpjZ5cxMbzMNAdIlJa7//e87aYWCBkCCh5HPZpgkKJEyltHBtj4oGAIFh7Es8VMswAVQajlCbZxSA7RyoWSVOndWOdoSAKe5SQHjmtt2yCOJZ459yXRbVV9WmPm73t4SXYObVf4v1n5m9oHDzij1mbLhZAlCpYlFldI1oMjY5ROYfQpoiHVUADZSLcgM//tUxAUACpDRZfTFABFRni73HqACIT8wTsF4lj2mgScWhJA0GJiegBgEoNJLPRT63QZn3lB4SE5KPmOdvn0sYYRjo/YiOOO//PTms9mfuybEZiSJvJnmKYG0Hiau1lipXtG4idK08o5A2gQAAKfP2wWpLHOAUjKrlZVOG0A+WENG9yo6jGkglA2MMCVT5pAfLGC2ITzycWyYeERQ7yVmqYWljzF/t69s91///1cn/+QN//8xpUBhFSrjlbsYgBAA//tUxAYACvk5ebj2gAkqjm0/mDAEBAXZTyyZa0iKS+3KrW5MMCnhVCyUXHLuTkU0jRetFnutdz
};
const loadedSounds = {};
function decodeAudioData(base64String, key) {
const audioData = window.atob(base64String.split(",")[1]);
const audioArrayBuffer = new Uint8Array(audioData.length);
for (let i = 0; i < audioData.length; i++) {
audioArrayBuffer[i] = audioData.charCodeAt(i);
}
audioContext.decodeAudioData(audioArrayBuffer.buffer, (buffer) => {
loadedSounds[key] = buffer;
}, (e) => { console.log("Error with decoding audio data" + e.err); });
}
function initializeSounds() {
for (const [key, value] of Object.entries(sounds)) {
decodeAudioData(value, key);
}
}
function playSound(soundName) {
const soundBuffer = loadedSounds[soundName];
if (soundBuffer) {
const source = audioContext.createBufferSource();
source.buffer = soundBuffer;
source.connect(audioContext.destination);
source.start(0);
console.log("播放聲音 " + soundName);
}
}
const audioContext = new (window.AudioContext || window.webkitAudioContext)();
initializeSounds();
function toggleVisibility() {
var tutorial = document.getElementById('tutorial');
var title = document.querySelector('h3');
var button = document.getElementById('toggleButton');
var container = document.getElementById('table');
if (tutorial.style.display !== 'none') {
tutorial.style.display = 'none';
title.style.display = 'none';
container.style.display = 'none';
button.textContent = '顯示';
} else {
tutorial.style.display = 'block';
title.style.display = 'block';
container.style.display = 'block';
button.textContent = '隱藏';
}
};
</script>
</head>
<body>
<button id="toggleButton" onclick="toggleVisibility()">隱藏</button>
<h3>NicePong 好乓 by <a href="https://nicechord.com">NiceChord 好和弦</a></h3>
<div id="tutorial">
<p>雙人聲音乒乓球遊戲!</p>
<p>按鍵:玩家 1 zxc | 玩家 2 iop</p>
2024-09-13 14:07:25 +08:00
<p>規則:<br />* 利用三個按鈕之一擊球三個按鈕會發出不同音高C、D、E<br />* 球彈到桌上後,下一位玩家即可擊球。<br />* 聽聲音判斷對手球路,不可跟對手打來的球重複按鈕。<br />* 自己也不可以連續用同一按鈕三次。<br />* 先得 11 分者獲勝!</p>
2024-09-13 14:04:46 +08:00
</div>
<p id="status"></p>
<div class="container" id="table">
<canvas id="imageCanvas" width="600" height="600"></canvas>
<div id="textOverlay"></div>
</div>
<script>
// 關於繪圖的 script
const canvas = document.getElementById('imageCanvas');
const ctx = canvas.getContext('2d');
const textOverlay = document.getElementById('textOverlay');
let ballX = -1, ballY = -1;
// Load the image
const img = new Image();
img.src = 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/4iOISUNDX1BST0ZJTEUAAQEAACN4bGNtcwIQAABtbnRyUkdCIFhZWiAH3wALAAoADAASADhhY3NwKm5peAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9tYAAQAAAADTLWxjbXMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtkZXNjAAABCAAAALBjcHJ0AAABuAAAARJ3dHB0AAACzAAAABRjaGFkAAAC4AAAACxyWFlaAAADDAAAABRiWFlaAAADIAAAABRnWFlaAAADNAAAABRyVFJDAAADSAAAIAxnVFJDAAADSAAAIAxiVFJDAAADSAAAIAxjaHJtAAAjVAAAACRkZXNjAAAAAAAAABxzUkdCLWVsbGUtVjItc3JnYnRyYy5pY2MAAAAAAAAAAAAAAB0AcwBSAEcAQgAtAGUAbABsAGUALQBWADIALQBzAHIAZwBiAHQAcgBjAC4AaQBjAGMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IDIwMTUsIEVsbGUgU3RvbmUgKHdlYnNpdGU6IGh0dHA6Ly9uaW5lZGVncmVlc2JlbG93LmNvbS87IGVtYWlsOiBlbGxlc3RvbmVAbmluZWRlZ3JlZXNiZWxvdy5jb20pLiBUaGlzIElDQyBwcm9maWxlIGlzIGxpY2Vuc2VkIHVuZGVyIGEgQ3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbi1TaGFyZUFsaWtlIDMuMCBVbnBvcnRlZCBMaWNlbnNlIChodHRwczovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktc2EvMy4wL2xlZ2FsY29kZSkuAAAAAFhZWiAAAAAAAAD21gABAAAAANMtc2YzMgAAAAAAAQxCAAAF3v//8yUAAAeTAAD9kP//+6H///2iAAAD3AAAwG5YWVogAAAAAAAAb6AAADj1AAADkFhZWiAAAAAAAAAknwAAD4QAALbEWFlaIAAAAAAAAGKXAAC3hwAAGNljdXJ2AAAAAAAAEAAAAAABAAIABAAFAAYABwAJAAoACwAMAA4ADwAQABEAEwAUABUAFgAYABkAGgAbABwAHgAfACAAIQAjACQAJQAmACgAKQAqACsALQAuAC8AMAAyADMANAA1ADcAOAA5ADoAOwA9AD4APwBAAEIAQwBEAEUARwBIAEkASgBMAE0ATgBPAFEAUgBTAFQAVQBXAFgAWQBaAFwAXQBeAF8AYQBiAGMAZABmAGcAaABpAGsAbABtAG4AbwBxAHIAcwB0AHYAdwB4AHkAewB8AH0AfgCAAIEAggCDAIUAhgCHAIgAiQCLAIwAjQCOAJAAkQCSAJMAlQCWAJcAmACaAJsAnACdAJ8AoAChAKIApAClAKYApwCoAKoAqwCsAK0ArwCwALEAsgC0ALUAtgC3ALkAugC7ALwAvgC/AMAAwQDCAMQAxQDGAMcAyQDKAMsAzADOAM8A0ADRANMA1ADVANcA2ADZANoA3ADdAN4A4ADhAOIA5ADlAOYA6ADpAOoA7ADtAO8A8ADxAPMA9AD2APcA+AD6APsA/QD+AP8BAQECAQQBBQEHAQgBCgELAQ0BDgEPAREBEgEUARUBFwEYARoBGwEdAR8BIAEiASMBJQEmASgBKQErAS0BLgEwATEBMwE0ATYBOAE5ATsBPAE+AUABQQFDAUUBRgFIAUoBSwFNAU8BUAFSAVQBVQFXAVkBWgFcAV4BYAFhAWMBZQFnAWgBagFsAW4BbwFxAXMBdQF2AXgBegF8AX4BfwGBAYMBhQGHAYkBigGMAY4BkAGSAZQBlgGXAZkBmwGdAZ8BoQGjAaUBpwGpAasBrAGuAbABsgG0AbYBuAG6AbwBvgHAAcIBxAHGAcgBygHMAc4B0AHSAdQB1gHYAdoB3AHeAeEB4wHlAecB6QHrAe0B7wHxAfMB9QH4AfoB/AH+AgACAgIEAgcCCQILAg0CDwISAhQCFgIYAhoCHQIfAiECIwIlAigCKgIsAi4CMQIzAjUCOAI6AjwCPgJBAkMCRQJIAkoCTAJPAlECUwJWAlgCWgJdAl8CYQJkAmYCaQJrAm0CcAJyAnUCdwJ5AnwCfgKBAoMChgKIAosCjQKQApIClQKXApoCnAKfAqECpAKmAqkCqwKuArACswK1ArgCuwK9AsACwgLFAsgCygLNAs8C0gLVAtcC2gLdAt8C4gLkAucC6gLsAu8C8gL1AvcC+gL9Av8DAgMFAwgDCgMNAxADEwMVAxgDGwMeAyADIwMmAykDLAMuAzEDNAM3AzoDPQM/A0IDRQNIA0sDTgNRA1QDVgNZA1wDXwNiA2UDaANrA24DcQN0A3cDegN9A4ADggOFA4gDiwOOA5EDlAOYA5sDngOhA6QDpwOqA60DsAOzA7YDuQO8A78DwgPFA8kDzAPPA9ID1QPYA9sD3wPiA+UD6APrA+4D8gP1A/gD+wP+BAIEBQQIBAsEDwQSBBUEGAQcBB8EIgQlBCkELAQvBDMENgQ5BD0EQARDBEcESgRNBFEEVARXBFsEXgRiBGUEaARsBG8EcwR2BHkEfQSABIQEhwSLBI4EkgSVBJkEnASgBKMEpwSqBK4EsQS1BLgEvAS/BMMExgTKBM4E0QTVBNgE3ATgBOME5wTqBO4E8gT1BPkE/QUABQQFCAULBQ8FEwUWBRoFHgUiBSUFKQUtBTEFNAU4BTwFQAVDBUcFSwVPBVIFVgVaBV4FYgVmBWkFbQVxBXUFeQV9BYEFhAWIBYwFkAWUBZgFnAWgBaQFqAWsBa8FswW3BbsFvwXDBccFywXPBdMF1wXbBd8F4wXnBesF7wX0BfgF/AYABgQGCAYMBhAGFAYYBhwGIQYlBikGLQYxBjUGOQY+BkIGRgZKBk4GUwZXBlsGXwZjBmgGbAZwBnQGeQZ9BoEGhQaKBo4GkgaXBpsGnwakBqgGrAaxBrUGuQa+BsIGxgbLBs8G1AbYBtwG4QblBuoG7gbyBvcG+wcABwQHCQcNBxIHFgcbBx8HJAcoBy0HMQc2BzoHPwdDB0gHTQdRB1YHWgdfB2MHaAdtB3EHdgd7B38HhAeJB40HkgeXB5sHoAelB6kHrgezB7cHvAfBB8YHygfPB9QH2QfdB+IH5wfsB/EH9Qf6B/8IBAgJCA0IEggXCBwIIQgmCCsILwg0CDkIPghDCEgITQhSCFcIXAhhCGYIawhwCHUIegh/CIQIiQiOCJMImAidCKIIpwisCLEItgi7CMAIxQjKCM8I1AjZCN8I5AjpCO4I8wj4CP0JAwkICQ0JEgkXCR0JIgknCSwJMQk3CTwJQQlGCUwJUQlWCVsJYQlmCWsJcQl2CXsJgQmGCYsJkQmWCZsJoQmmCasJsQm2CbwJwQnGCcwJ0QnXCdwJ4gnnCe0J8gn4Cf0KAgoICg0KEwoZCh4KJAopCi8KNAo6Cj8KRQpKClAKVgpbCmEKZgpsCnIKdwp9CoMKiAqOCpQKmQqfCqUKqgqwCrYKvArBCscKzQrTCtgK3grkCuoK7wr1CvsLAQsHCwwLEgsYCx4LJAsqCy8LNQs7C0ELRwtNC1MLWQtfC2QLagtwC3YLfAuCC4gLjguUC5oLoAumC6wLsgu4C74LxAvKC9AL1gvcC+IL6QvvC/UL+wwBDAcMDQwTDBkMIAwmDCwMMgw4DD4MRQxLDFEMVwxdDGQMagxwDHYMfQyDDIkMjwyWDJwMogyoDK8MtQy7DMIMyAzODNUM2wzhDOgM7gz1DPsNAQ0IDQ4NFQ0bDSENKA0uDTUNOw1CDUgNTw1VDVwNYg1pDW8Ndg18DYMNiQ2QDZYNnQ2kDaoNsQ23Db4NxQ3LDdIN2Q3fDeYN7A3zDfoOAQ4HDg4OFQ4bDiIOKQ4vDjYOPQ5EDkoOU
img.onload = () => {
drawImage();
};
function drawImage() {
ctx.drawImage(img, 0, 0, 600, 600);
if (ballX !== -1 && ballY !== -1) {
drawBall(ballX, ballY);
}
}
function changeText(text) {
// 將 \n 轉換為 <br> 標籤
textOverlay.innerHTML = text.replace(/\n/g, '<br>');
}
function drawBall(x, y) {
ballX = x;
ballY = y;
drawImage();
ctx.beginPath();
ctx.arc(x, y, 10, 0, 2 * Math.PI);
ctx.fillStyle = 'orange';
ctx.fill();
}
// 開始遊戲
changeText("");
startGame();
</script>
</body>
</html>