經典 Applet 版打字遊戲,展示雙緩衝繪圖、音效回饋(擊中/擊錯/背景音樂)、右鍵選單動態調整難度、字母不重複隨機生成與自動重生機制。雖 Applet 已被瀏覽器淘汰,程式碼仍具教學價值,可輕鬆移植至 Swing/JavaFX。
public void init() {
width = getSize().width; height = getSize().height;
img = createImage(width, height); // 離屏圖像
off = img.getGraphics(); // 離屏繪圖上下文
}
public void paint(Graphics g) {
off.setColor(getBackground());
off.fillRect(0, 0, width, height); // 清除離屏
myletter.paintLetters(off); // 畫在離屏
off.drawString(stats, 200, 200); // 畫統計
g.drawImage(img, 0, 0, this); // 一次性貼上螢幕
}
public void update(Graphics g) { paint(g); } // 禁用預設清除
A1 = getAudioClip(getDocumentBase(), "Audio/AUDIO1.au"); // 擊中
A2 = getAudioClip(getDocumentBase(), "Audio/AUDIO2.au"); // 擊錯
A3 = getAudioClip(getDocumentBase(), "Audio/AUDIO3.au"); // 背景循環
// 開始時 A3.loop(),結束時 A3.stop()
isOmittedSum++ → reStart() 重生。<html>
<body bgcolor="pink">
<applet code="MyPanel.class" width="750" height="380">
</applet>
</body>
</html>
編譯:javac MyPanel.java → 執行:appletviewer MyPanel.html
Applet 改為 JFrame,init() → 建構子,start()/stop() → 視窗開關事件。getAudioClip 改用 AudioSystem.getAudioInputStream + Clip。appletviewer 相依,直接 java MyPanel 執行。