首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java Swing 實作狩獵射擊遊戲完整教學

     編輯:Java 相關知識

專案簡介

本文帶領讀者從零開始,使用 Java Swing 建立一款經典的「狩獵射擊」小遊戲。遊戲畫面包含會飛行的鳥與跑動的豬,玩家透過滑鼠點擊射擊,命中加分,彈藥有限需裝填,錯過目標會扣分。完整原始碼包含背景面板、遊戲角色、主視窗與執行緒控制,適合作為 Swing 入門實戰專案。

核心類別架構

  • BackgroundPanel:繼承 JPanel,負責繪製背景圖片。
  • BirdLabel:繼承 JLabel 並實作 Runnable,代表從右向左飛行的鳥,支援滑鼠點擊擊中邏輯。
  • PigLabel:繼承 JLabel 並實作 Runnable,代表從左向右奔跑的豬,同樣支援點擊互動。
  • MainFrame:繼承 JFrame,遊戲主視窗,管理分數、彈藥、角色生成執行緒與全域滑鼠事件。

關鍵技術點解析

1. 雙重緩衝與背景繪製

BackgroundPanel 覆寫 paintComponent(Graphics g),利用 drawImage 將背景圖拉伸填滿面板,並設定 setOpaque(false) 避免重繪閃爍。

2. 角色移動執行緒

BirdLabel 與 PigLabel 各自持有一個 Thread,在 run() 中透過 setLocation(x, y) 更新位置,並以隨機 sleepTime 控制速度,模擬自然移動。執行緒啟動觸發條件為 ComponentListener.componentResized,確保父容器尺寸就緒後再開始移動。

3. 滑鼠互動與彈藥系統

  • 角色類別掛載 MouseAdapter,mousePressed 時檢查 MainFrame.readyAmmo(),若有彈藥則呼叫 useAmmo() 扣減並加分,最後呼叫 destory() 從面板移除自身。
  • 主視窗同樣監聽滑鼠點擊,點擊空白處也會消耗彈藥,增加遊戲挑戰性。
  • 彈藥耗盡時,啟動獨立執行緒顯示「裝填中...」提示 1 秒,自動補滿 5 發彈藥。

4. 分數與狀態同步

分數 score 與彈藥數 ammoNum 宣告為 static,並提供 synchronized static 方法 appScore()、useAmmo()、readyAmmo() 確保多執行緒存取安全。

5. 角色生成器執行緒

MainFrame 內部類別 BirdThread、PigThread 以無限迴圈定期 new BirdLabel()/new PigLabel() 加入背景面板,間隔時間隨機 500~3500ms,形成持續湧現的遊戲節奏。

完整程式碼結構

package Game;

// BackgroundPanel.java
public class BackgroundPanel extends JPanel { ... }

// BirdLabel.java
public class BirdLabel extends JLabel implements Runnable { ... }

// PigLabel.java
public class PigLabel extends JLabel implements Runnable { ... }

// MainFrame.java
public class MainFrame extends JFrame {
    // 靜態分數、彈藥、UI 元件
    // 建構子初始化視窗、背景、標籤、滑鼠監聽
    // 靜態同步方法:appScore, useAmmo, readyAmmo
    // 內部執行緒類別:BirdThread, PigThread
    // main 啟動入口
}

執行與擴充建議

  1. 將圖片資源(background.jpg、bird.gif、pig.gif)放在 Game 套件同層級目錄。
  2. 直接執行 MainFrame.main() 啟動遊戲。
  3. 擴充方向:增加遊戲關卡、不同分值角色、音效、高分紀錄存檔、暫停/繼續功能等。

總結

這個小專案展示了 Swing 元件繼承、自定繪製、多執行緒動畫、事件驅動與共享狀態同步等核心 GUI 程式設計技巧。程式碼結構清晰,適合初學者研讀並作為更複雜遊戲開發的起點。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved