java課程設(shè)計(jì)之坦克大戰(zhàn)
本文實(shí)例為大家分享了java坦克大戰(zhàn)的具體代碼,供大家參考,具體內(nèi)容如下
環(huán)境要求:
- 操作系統(tǒng):Windows 10
- JAVA虛擬機(jī):JDK1.8以上
- 開(kāi)發(fā)環(huán)境:Eclipse(4.5以上)
功能提示:
1.游戲要有圖形用戶(hù)界面,界面能夠反映游戲所有的細(xì)節(jié)。
2.界面中要有坦克,墻,樹(shù)林,河流。
3.界面中要有一個(gè)“家”,“家”被攻擊中則輸了游戲。
4.坦克分兩種,敵方和我方。
5.墻也分為兩種,可以穿透的普通墻,不可以穿透的鐵墻。
6.樹(shù)和河流均只有一種,樹(shù)林坦克可以通過(guò)。
7.坦克可以發(fā)射子彈,敵我方的子彈屬性一樣。
8.我方子彈可以殺死敵方坦克,敵方子彈也可以殺死我方坦克,但需要多槍子彈才可以殺死。
9.敵方之間不可以殺死對(duì)方。
10.子彈擊中坦克要有爆炸,但擊中墻不能爆炸。
11.我方可以吃血包增加生命。
12.游戲可以暫停,重新開(kāi)始,游戲幫助等功能。
13.游戲級(jí)別分別為:級(jí)別1、級(jí)別2、級(jí)別3、級(jí)別4。
需求分析:
- 設(shè)計(jì)一個(gè)圖形用戶(hù)界面,將所有游戲的元素都能在此用于界面上表現(xiàn)出來(lái),界面能夠接受用戶(hù)的操作,具有人機(jī)交互功能。用戶(hù)可以選擇重新開(kāi)始游戲,退出游戲,暫停游戲和查找游戲幫助。
- 界面中包含坦克,樹(shù),河流,阻擋墻和游戲用戶(hù)所要保護(hù)的“家”。
- 坦克:坦克分為兩種,敵方坦克和用戶(hù)控制的坦克。用戶(hù)方和敵方坦克均可以發(fā)射子彈,可以改變路徑的行走,且在行走過(guò)程中遇到墻等阻礙物和游戲邊界時(shí)要改變方向,而不能一直頂著障礙物不放。坦克之間不能穿越,碰撞到后自動(dòng)調(diào)換方向。
- 樹(shù):界面中要包括樹(shù)林,作為遮掩物體和修飾物體,以便增加游戲的元素,使得游戲更加貼切人性化。樹(shù)的數(shù)目不限,以游戲整體界面清晰美觀(guān)來(lái)決定數(shù)目。
- 河流:界面中要包括河流,河流作用與樹(shù)林相同,同樣河流的數(shù)目不限,以游戲界面整體美觀(guān)度來(lái)決定數(shù)目。
- 墻:墻體分為兩種,普通的墻和鐵墻,普通的墻在受到子彈襲擊時(shí)會(huì)損壞,而鐵墻可以阻礙子彈的穿越。兩方的坦克均不能穿越兩種墻體,但都可以摧毀普通墻體。普通墻體的數(shù)目配合其他元素合理安排,鐵墻則不宜過(guò)多,不然游戲難度太低甚至因?yàn)樘箍瞬荒艽┰借F墻而使得游戲無(wú)法進(jìn)行下去。
- “家”:用戶(hù)方除了有一輛自己的坦克外還有一個(gè)要保護(hù)的家,家由普通墻體包圍,家受到子彈攻擊后游戲立即結(jié)束,用戶(hù)方則輸了本局游戲。
- 子彈:子彈可以由敵方和用戶(hù)方發(fā)射,且發(fā)射出去的子彈可以直線(xiàn)移動(dòng),直到碰到障礙物就消失,子彈可以穿越樹(shù)林和河流。敵方坦克受到一顆子彈攻擊會(huì)爆炸從而導(dǎo)致死亡,死亡后坦克消失。用戶(hù)方受到子彈攻擊后會(huì)減少壽命,且受到四次攻擊則死亡,此時(shí)如還有敵方坦克存在,則用戶(hù)方輸?shù)舯敬斡螒颉?/li>
- 爆炸:當(dāng)子彈射擊到坦克身上時(shí),要產(chǎn)生爆炸效果。
- 方向:坦克和子彈都有方向,可以選擇上下左右四個(gè)方向,且子彈的方向從屬于坦克的方向。
效果如圖所示:
主界面代碼如下:
public TankClient() {
// printable = false;
// 創(chuàng)建菜單及菜單選項(xiàng)
jmb = new MenuBar();
jm1 = new Menu("游戲");
jm2 = new Menu("暫停/繼續(xù)");
jm3 = new Menu("幫助");
jm4 = new Menu("游戲級(jí)別");
jm1.setFont(new Font("TimesRoman", Font.BOLD, 15));// 設(shè)置菜單顯示的字體
jm2.setFont(new Font("TimesRoman", Font.BOLD, 15));// 設(shè)置菜單顯示的字體
jm3.setFont(new Font("TimesRoman", Font.BOLD, 15));// 設(shè)置菜單顯示的字體
jm4.setFont(new Font("TimesRoman", Font.BOLD, 15));// 設(shè)置菜單顯示的字體
jmi1 = new MenuItem("開(kāi)始新游戲");
jmi2 = new MenuItem("退出");
jmi3 = new MenuItem("暫停");
jmi4 = new MenuItem("繼續(xù)");
jmi5 = new MenuItem("游戲說(shuō)明");
jmi6 = new MenuItem("級(jí)別1");
jmi7 = new MenuItem("級(jí)別2");
jmi8 = new MenuItem("級(jí)別3");
jmi9 = new MenuItem("級(jí)別4");
jmi1.setFont(new Font("TimesRoman", Font.BOLD, 15));
jmi2.setFont(new Font("TimesRoman", Font.BOLD, 15));
jmi3.setFont(new Font("TimesRoman", Font.BOLD, 15));
jmi4.setFont(new Font("TimesRoman", Font.BOLD, 15));
jmi5.setFont(new Font("TimesRoman", Font.BOLD, 15));
jm1.add(jmi1);
jm1.add(jmi2);
jm2.add(jmi3);
jm2.add(jmi4);
jm3.add(jmi5);
jm4.add(jmi6);
jm4.add(jmi7);
jm4.add(jmi8);
jm4.add(jmi9);
jmb.add(jm1);
jmb.add(jm2);
jmb.add(jm4);
jmb.add(jm3);
jmi1.addActionListener(this);
jmi1.setActionCommand("NewGame");
jmi2.addActionListener(this);
jmi2.setActionCommand("Exit");
jmi3.addActionListener(this);
jmi3.setActionCommand("Stop");
jmi4.addActionListener(this);
jmi4.setActionCommand("Continue");
jmi5.addActionListener(this);
jmi5.setActionCommand("help");
jmi6.addActionListener(this);
jmi6.setActionCommand("level1");
jmi7.addActionListener(this);
jmi7.setActionCommand("level2");
jmi8.addActionListener(this);
jmi8.setActionCommand("level3");
jmi9.addActionListener(this);
jmi9.setActionCommand("level4");
this.setMenuBar(jmb);// 菜單Bar放到JFrame上
this.setVisible(true);
for (int i = 0; i < 10; i++) { // 家的格局
if (i < 4)
homeWall.add(new CommonWall(350, 580 - 21 * i, this));
else if (i < 7)
homeWall.add(new CommonWall(372 + 22 * (i - 4), 517, this));
else
homeWall.add(new CommonWall(416, 538 + (i - 7) * 21, this));
}
for (int i = 0; i < 32; i++) {
if (i < 16) {
otherWall.add(new CommonWall(220 + 20 * i, 300, this)); // 普通墻布局
otherWall.add(new CommonWall(500 + 20 * i, 180, this));
otherWall.add(new CommonWall(200, 400 + 20 * i, this));
otherWall.add(new CommonWall(500, 400 + 20 * i, this));
} else if (i < 32) {
otherWall.add(new CommonWall(220 + 20 * (i - 16), 320, this));
otherWall.add(new CommonWall(500 + 20 * (i - 16), 220, this));
otherWall.add(new CommonWall(220, 400 + 20 * (i - 16), this));
otherWall.add(new CommonWall(520, 400 + 20 * (i - 16), this));
}
}
for (int i = 0; i < 20; i++) { // 金屬墻布局
if (i < 10) {
metalWall.add(new MetalWall(140 + 30 * i, 150, this));
metalWall.add(new MetalWall(600, 400 + 20 * (i), this));
} else if (i < 20)
metalWall.add(new MetalWall(140 + 30 * (i - 10), 180, this));
else
metalWall.add(new MetalWall(500 + 30 * (i - 10), 160, this));
}
for (int i = 0; i < 4; i++) { // 樹(shù)的布局
if (i < 4) {
trees.add(new Tree(0 + 30 * i, 360, this));
trees.add(new Tree(220 + 30 * i, 360, this));
trees.add(new Tree(440 + 30 * i, 360, this));
trees.add(new Tree(660 + 30 * i, 360, this));
}
}
theRiver.add(new River(85, 100, this));
for (int i = 0; i < 20; i++) { // 初始化20輛坦克
if (i < 9) // 設(shè)置坦克出現(xiàn)的位置
tanks.add(new Tank(150 + 70 * i, 40, false, Direction.D, this));
else if (i < 15)
tanks.add(new Tank(700, 140 + 50 * (i - 6), false, Direction.D,
this));
else
tanks
.add(new Tank(10, 50 * (i - 12), false, Direction.D,
this));
}
this.setSize(Fram_width, Fram_length); // 設(shè)置界面大小
this.setLocation(280, 50); // 設(shè)置界面出現(xiàn)的位置
this
.setTitle("坦克大戰(zhàn)——(重新開(kāi)始:R鍵 開(kāi)火:F鍵)");
this.addWindowListener(new WindowAdapter() { // 窗口監(jiān)聽(tīng)關(guān)閉
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
this.setResizable(false);
this.setBackground(Color.GREEN);
this.setVisible(true);
this.addKeyListener(new KeyMonitor());// 鍵盤(pán)監(jiān)聽(tīng)
new Thread(new PaintThread()).start(); // 線(xiàn)程啟動(dòng)
}
public static void main(String[] args) {
new TankClient(); // 實(shí)例化
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持我們。
上一篇:Java的優(yōu)先隊(duì)列PriorityQueue原理及實(shí)例分析
欄 目:Java
下一篇:Java包裝類(lèi)的緩存機(jī)制原理實(shí)例詳解
本文標(biāo)題:java課程設(shè)計(jì)之坦克大戰(zhàn)
本文地址:http://www.jygsgssxh.com/a1/Java/8899.html
您可能感興趣的文章
- 01-10Java實(shí)現(xiàn)動(dòng)態(tài)模擬時(shí)鐘
- 01-10利用Java實(shí)現(xiàn)復(fù)制Excel工作表功能
- 01-10JavaWeb實(shí)現(xiàn)郵件發(fā)送功能
- 01-10java基于poi導(dǎo)出excel透視表代碼實(shí)例
- 01-10Java實(shí)現(xiàn)動(dòng)態(tài)數(shù)字時(shí)鐘
- 01-10基于Java驗(yàn)證jwt token代碼實(shí)例
- 01-10java實(shí)現(xiàn)液晶數(shù)字字體顯示當(dāng)前時(shí)間
- 01-10淺談Java中真的只有值傳遞么
- 01-10Java動(dòng)態(tài)顯示當(dāng)前日期和時(shí)間
- 01-10如何解決線(xiàn)程太多導(dǎo)致java socket連接池出現(xiàn)的問(wèn)題


閱讀排行
- 1C語(yǔ)言 while語(yǔ)句的用法詳解
- 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹(shù)的示例代碼(圣誕
- 3利用C語(yǔ)言實(shí)現(xiàn)“百馬百擔(dān)”問(wèn)題方法
- 4C語(yǔ)言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
- 5c語(yǔ)言計(jì)算三角形面積代碼
- 6什么是 WSH(腳本宿主)的詳細(xì)解釋
- 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
- 8正則表達(dá)式匹配各種特殊字符
- 9C語(yǔ)言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
- 10C語(yǔ)言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
本欄相關(guān)
- 01-10Java實(shí)現(xiàn)動(dòng)態(tài)模擬時(shí)鐘
- 01-10Springboot中@Value的使用詳解
- 01-10JavaWeb實(shí)現(xiàn)郵件發(fā)送功能
- 01-10利用Java實(shí)現(xiàn)復(fù)制Excel工作表功能
- 01-10Java實(shí)現(xiàn)動(dòng)態(tài)數(shù)字時(shí)鐘
- 01-10java基于poi導(dǎo)出excel透視表代碼實(shí)例
- 01-10java實(shí)現(xiàn)液晶數(shù)字字體顯示當(dāng)前時(shí)間
- 01-10基于Java驗(yàn)證jwt token代碼實(shí)例
- 01-10Java動(dòng)態(tài)顯示當(dāng)前日期和時(shí)間
- 01-10淺談Java中真的只有值傳遞么
隨機(jī)閱讀
- 04-02jquery與jsp,用jquery
- 01-10delphi制作wav文件的方法
- 01-10SublimeText編譯C開(kāi)發(fā)環(huán)境設(shè)置
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
- 01-11ajax實(shí)現(xiàn)頁(yè)面的局部加載
- 01-11Mac OSX 打開(kāi)原生自帶讀寫(xiě)NTFS功能(圖文
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?
- 01-10C#中split用法實(shí)例總結(jié)
- 01-10使用C語(yǔ)言求解撲克牌的順子及n個(gè)骰子
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什


