java飞机大战流程图_JAVA课程设计-飞机大战
JAVA課程設(shè)計(jì)-飛機(jī)大戰(zhàn)
1.團(tuán)隊(duì)名稱、團(tuán)隊(duì)成員介紹
1.1 團(tuán)隊(duì)名稱:做個(gè)飛機(jī)哦
1.2團(tuán)隊(duì)成員介紹:
余俊良(組長(zhǎng)):編寫博客、游戲主界面設(shè)計(jì)與實(shí)現(xiàn)、英雄機(jī)與子彈類的實(shí)現(xiàn)、場(chǎng)景設(shè)計(jì)
林祥濤:游戲音效設(shè)計(jì)、玩家類編碼與設(shè)計(jì)、小Boss類設(shè)計(jì)、ppt設(shè)計(jì)
高凱:畫uml類圖、積分榜設(shè)計(jì)、游戲道具定義實(shí)現(xiàn)、游戲狀態(tài)設(shè)計(jì)
2.項(xiàng)目git地址
3.項(xiàng)目git提交記錄截圖
4.前期調(diào)查及游戲介紹
玩家通過(guò)控制飛機(jī)發(fā)射子彈擊中不同的敵機(jī)獲取積分,擊中快速移動(dòng)的浮標(biāo)獲得獎(jiǎng)勵(lì)(獲得雙倍子彈獎(jiǎng)勵(lì)、生命值增加)。游戲過(guò)程伴隨著背景音樂(lè),而且擊中敵機(jī)或生命耗盡后會(huì)產(chǎn)生相應(yīng)音效。與敵機(jī)相撞則扣除生命值1點(diǎn),直到生命值為0,游戲結(jié)束,玩法簡(jiǎn)單有趣,鍛煉反應(yīng)能力。
5.項(xiàng)目功能架構(gòu)圖、主要功能流程圖
6.面向?qū)ο笤O(shè)計(jì)包圖、類圖
包圖
類圖
7.項(xiàng)目運(yùn)行截圖
主界面顯示
英雄機(jī)
普通敵機(jī)
精英機(jī)
小boss
切換飛機(jī)
雙倍子彈模式
排行榜
獎(jiǎng)勵(lì)
游戲結(jié)束
8.項(xiàng)目關(guān)鍵代碼
8.1鼠標(biāo)事件
使用鼠標(biāo)事件監(jiān)聽(tīng)MouseAdapter對(duì)鼠標(biāo)進(jìn)行監(jiān)聽(tīng),當(dāng)鼠標(biāo)移動(dòng)時(shí)獲取鼠標(biāo)的坐標(biāo),點(diǎn)擊時(shí)開(kāi)啟游戲,鼠標(biāo)移出窗體后游戲暫停,移入則繼續(xù)。
MouseAdapter m = new MouseAdapter() {
// 鼠標(biāo)移動(dòng)事件
public void mouseMoved(MouseEvent e) {// 鼠標(biāo)坐標(biāo)獲取
if (Running == state) {
hero.moveTo(e.getX(), e.getY());
}
}
// 鼠標(biāo)點(diǎn)擊事件
public void mouseClicked(MouseEvent e) {
if (Start == state) {// 點(diǎn)擊開(kāi)始游戲
state = Running;
} else if (Over == state) {// 游戲結(jié)束后點(diǎn)擊重新開(kāi)始
state = Start;
score = 0;// 積分,飛行物重置
hero = new Heroplane();
flyobj = new ArrayList();
bullets = new ArrayList();
}
}
// 鼠標(biāo)移出事件
public void mouseExited(MouseEvent e) {
if (Running == state) {// 移出窗體,游戲暫停
state = Pause;
}
}
// 鼠標(biāo)移入事件
public void mouseEntered(MouseEvent e) {// 移回窗體,游戲繼續(xù)
if (Pause == state) {
state = Running;
}
}
};
8.2雙緩沖技術(shù)消除閃屏
閃屏的出現(xiàn)是因?yàn)樵趙hile循環(huán)中執(zhí)行線程時(shí)每循環(huán)一次便會(huì)重繪一次,而update()方法即會(huì)先清理掉當(dāng)前的畫面再重新繪制新的畫面。可以在內(nèi)存中重新開(kāi)辟新空間,作為后臺(tái)圖像,本應(yīng)該在界面上進(jìn)行清理與重繪現(xiàn)在內(nèi)存中先實(shí)現(xiàn),生成新畫面,最后顯示到屏幕上。
private Image offScreenImage = null;// 利用雙緩沖技術(shù)消除屏幕閃爍
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飛行物顯示
通過(guò)根據(jù)狀態(tài)不斷重繪飛行物來(lái)達(dá)到動(dòng)畫效果
Timer timer = new Timer();
int timeGap = 10;// 設(shè)定時(shí)間隔
timer.schedule(new TimerTask() {
public void run() {
if (state == Running) {
heroBulletEnter();// 英雄子彈的入場(chǎng)
enemyEnter();// 敵機(jī)的入場(chǎng)
enemyStep();// 敵機(jī)的移動(dòng)
outBoundDel();// 刪除越界(底)的敵機(jī)和子彈
enemyCrash();// 英雄機(jī)子彈與敵人相撞(子彈和敵機(jī)退場(chǎng))
checkGame();// 檢查游戲是否結(jié)束(敵機(jī)和英雄機(jī)相撞)
}
repaint();// 重畫
}
}, timeGap, timeGap);// timeGap為每一次到下一次的觸發(fā)間隔
9.項(xiàng)目代碼掃描結(jié)果及改正
9.1第一次掃描結(jié)果
9.2掃描修正
在所有的覆寫方法前增加@Override注釋
常量名應(yīng)當(dāng)全部大寫,單詞用下劃線隔開(kāi)
switch塊中,每個(gè)case都應(yīng)通過(guò)break/default來(lái)終止
方法內(nèi)部單行注釋,在被注釋語(yǔ)句上方另一行使用//注釋,多行注釋使用/**/注釋
9.3全部修正后結(jié)果
10.項(xiàng)目總結(jié)
10.1不足
原先計(jì)劃能夠在完成單人模式的基礎(chǔ)上增加聯(lián)網(wǎng)模式,但是在基本完成單人模式后剩余的時(shí)間的確不夠去實(shí)現(xiàn)聯(lián)網(wǎng)。設(shè)計(jì)的敵機(jī)類型也不夠多,道具類型也可以再增加。
10.2展望
在課設(shè)完成后利用課余時(shí)間增加網(wǎng)絡(luò)模式,并在網(wǎng)絡(luò)中進(jìn)行線上合作與排行
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的java飞机大战流程图_JAVA课程设计-飞机大战的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java实现转账功能_如何利用Java代
- 下一篇: java list负载_java集合的扩