JAVA課程設計-飛機大戰


JAVA課程設計-飛機大戰

1.團隊名稱、團隊成員介紹

1.1 團隊名稱:做個飛機哦

1.2團隊成員介紹:

余俊良(組長):編寫博客、游戲主界面設計與實現、英雄機與子彈類的實現、場景設計
林祥濤:游戲音效設計、玩家類編碼與設計、小Boss類設計、ppt設計
高凱:畫uml類圖、積分榜設計、游戲道具定義實現、游戲狀態設計

2.項目git地址

https://gitee.com/net_201821123052/Planewar.git

3.項目git提交記錄截圖

4.前期調查及游戲介紹

玩家通過控制飛機發射子彈擊中不同的敵機獲取積分,擊中快速移動的浮標獲得獎勵(獲得雙倍子彈獎勵、生命值增加)。游戲過程伴隨着背景音樂,而且擊中敵機或生命耗盡后會產生相應音效。與敵機相撞則扣除生命值1點,直到生命值為0,游戲結束,玩法簡單有趣,鍛煉反應能力。

5.項目功能架構圖、主要功能流程圖

6.面向對象設計包圖、類圖

包圖

類圖

7.項目運行截圖

主界面顯示

英雄機

普通敵機

精英機

小boss

切換飛機

雙倍子彈模式

排行榜

獎勵

游戲結束

8.項目關鍵代碼

8.1鼠標事件

使用鼠標事件監聽MouseAdapter對鼠標進行監聽,當鼠標移動時獲取鼠標的坐標,點擊時開啟游戲,鼠標移出窗體后游戲暫停,移入則繼續。

		MouseAdapter m = new MouseAdapter() {
			// 鼠標移動事件
			public void mouseMoved(MouseEvent e) {// 鼠標坐標獲取
				if (Running == state) {
					hero.moveTo(e.getX(), e.getY());
				}
			}

			// 鼠標點擊事件
			public void mouseClicked(MouseEvent e) {
				if (Start == state) {// 點擊開始游戲
					state = Running;
				} else if (Over == state) {// 游戲結束后點擊重新開始
					state = Start;
					score = 0;// 積分,飛行物重置
					hero = new Heroplane();
					flyobj = new ArrayList<AbstractFlyingObject>();
					bullets = new ArrayList<Bullet>();
				}
			}

			// 鼠標移出事件
			public void mouseExited(MouseEvent e) {
				if (Running == state) {// 移出窗體,游戲暫停
					state = Pause;
				}
			}

			// 鼠標移入事件
			public void mouseEntered(MouseEvent e) {// 移回窗體,游戲繼續
				if (Pause == state) {
					state = Running;
				}
			}
		};

8.2雙緩沖技術消除閃屏

閃屏的出現是因為在while循環中執行線程時每循環一次便會重繪一次,而update()方法即會先清理掉當前的畫面再重新繪制新的畫面。可以在內存中重新開辟新空間,作為后台圖像,本應該在界面上進行清理與重繪現在內存中先實現,生成新畫面,最后顯示到屏幕上。

private Image offScreenImage = null;// 利用雙緩沖技術消除屏幕閃爍
public void update(Graphics g) {
	if (offScreenImage == null) {
		offScreenImage = this.createImage(WIDTH, HEIGHT);
	}
	Graphics gOff = offScreenImage.getGraphics();
	paint(gOff);
	g.drawImage(offScreenImage, 0, 0, null);
}

8.3飛行物顯示

通過根據狀態不斷重繪飛行物來達到動畫效果

		Timer timer = new Timer();
		int timeGap = 10;// 設定時間隔
		timer.schedule(new TimerTask() {
			public void run() {
				if (state == Running) {
					heroBulletEnter();// 英雄子彈的入場
					enemyEnter();// 敵機的入場
					enemyStep();// 敵機的移動
					outBoundDel();// 刪除越界(底)的敵機和子彈
					enemyCrash();// 英雄機子彈與敵人相撞(子彈和敵機退場)
					checkGame();// 檢查游戲是否結束(敵機和英雄機相撞)
				}
				repaint();// 重畫
			}
		}, timeGap, timeGap);// timeGap為每一次到下一次的觸發間隔

9.項目代碼掃描結果及改正

9.1第一次掃描結果

9.2掃描修正

在所有的覆寫方法前增加@Override注釋
常量名應當全部大寫,單詞用下划線隔開
switch塊中,每個case都應通過break/default來終止
方法內部單行注釋,在被注釋語句上方另一行使用//注釋,多行注釋使用/**/注釋

9.3全部修正后結果

10.項目總結

10.1不足

原先計划能夠在完成單人模式的基礎上增加聯網模式,但是在基本完成單人模式后剩余的時間的確不夠去實現聯網。設計的敵機類型也不夠多,道具類型也可以再增加。

10.2展望

在課設完成后利用課余時間增加網絡模式,並在網絡中進行線上合作與排行


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM