從零構建 Swing 版《坦克大戰》:核心類設計與遊戲循環
懷舊之作,完整實現坦克移動、射擊、敵我識別、碰撞檢測、血條、補給、牆體、爆炸特效、雙緩衝防閃爍。附全量源碼,適合 Java 圖形界面編程入門實戰。
核心類架構
| 類 | 職責 | 關鍵設計點 |
| TankWarClient | 主窗口、遊戲循環、雙緩衝渲染 | 繼承 Frame,啟動 PaintThread 定時 repaint(),update() 實現雙緩衝 |
| Tank | 玩家/敵方坦克統一實體 | Direction 枚舉 8 向+STOP,血條內部類,鍵盤控制、AI 隨機移動/開火、碰撞檢測、復活 |
| Missile | 子彈實體 | 好壞陣營區分,8 向移動,擊中坦克/牆體觸發爆炸、銷毀自身 |
| Explode | 爆炸動畫 | 直徑數組模擬擴散縮小,生命週期結束自動從列表移除 |
| Blood | 補給包 | 預設路徑點循環移動,坦克碰撞回血並消失 |
| Wall | 障礙牆體 | 矩形碰撞區域,阻擋坦克/子彈 |
關鍵技術點
- 雙緩衝:
createImage() 離屏繪圖 → drawImage() 一次性上屏,徹底消除閃爍
- 碰撞檢測:
Rectangle.intersects() 矩形相交判定,坦克-牆、坦克-坦克、子彈-一切
- 敵方 AI:隨機步數 + 隨機方向 + 概率開火
- 鍵盤控制:布爾標記位組合解析 8 向,
KeyAdapter 監聽
- 遊戲狀態:勝負判定、重置邏輯封裝在 Tank/Client 中
運行方式
javac *.java
java My2048 # 主類入口
需 JDK 1.5+(枚舉、泛型、靜態導入),建議配合 Substance LookAndFeel 美化界面。
擴展方向
- 關卡系統、多種敵人、道具掉落、音效、網絡對戰
- 遷移至 JavaFX/LibGDX 獲得更強渲染能力
- 上一篇文章: Vector vs ArrayList 深度對比:四大維度選型指南
- 下一篇文章: Shell 字符串操作大全:內置操作符比外部命令快百倍
Copyright ©
程式碼之家 All Rights Reserved