最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java課程設(shè)計之坦克大戰(zhàn)

 更新時間:2019年12月24日 11:03:38   作者:小智解說  
這篇文章主要為大家詳細介紹了java課程設(shè)計之坦克大戰(zhàn),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了java坦克大戰(zhàn)的具體代碼,供大家參考,具體內(nèi)容如下

環(huán)境要求:

  • 操作系統(tǒng):Windows 10
  • JAVA虛擬機:JDK1.8以上
  • 開發(fā)環(huán)境:Eclipse(4.5以上)

功能提示:

1.游戲要有圖形用戶界面,界面能夠反映游戲所有的細節(jié)。
2.界面中要有坦克,墻,樹林,河流。
3.界面中要有一個“家”,“家”被攻擊中則輸了游戲。
4.坦克分兩種,敵方和我方。
5.墻也分為兩種,可以穿透的普通墻,不可以穿透的鐵墻。
6.樹和河流均只有一種,樹林坦克可以通過。
7.坦克可以發(fā)射子彈,敵我方的子彈屬性一樣。
8.我方子彈可以殺死敵方坦克,敵方子彈也可以殺死我方坦克,但需要多槍子彈才可以殺死。
9.敵方之間不可以殺死對方。
10.子彈擊中坦克要有爆炸,但擊中墻不能爆炸。
11.我方可以吃血包增加生命。
12.游戲可以暫停,重新開始,游戲幫助等功能。
13.游戲級別分別為:級別1、級別2、級別3、級別4。

需求分析:

  • 設(shè)計一個圖形用戶界面,將所有游戲的元素都能在此用于界面上表現(xiàn)出來,界面能夠接受用戶的操作,具有人機交互功能。用戶可以選擇重新開始游戲,退出游戲,暫停游戲和查找游戲幫助。
  • 界面中包含坦克,樹,河流,阻擋墻和游戲用戶所要保護的“家”。
  • 坦克:坦克分為兩種,敵方坦克和用戶控制的坦克。用戶方和敵方坦克均可以發(fā)射子彈,可以改變路徑的行走,且在行走過程中遇到墻等阻礙物和游戲邊界時要改變方向,而不能一直頂著障礙物不放。坦克之間不能穿越,碰撞到后自動調(diào)換方向。
  • 樹:界面中要包括樹林,作為遮掩物體和修飾物體,以便增加游戲的元素,使得游戲更加貼切人性化。樹的數(shù)目不限,以游戲整體界面清晰美觀來決定數(shù)目。
  • 河流:界面中要包括河流,河流作用與樹林相同,同樣河流的數(shù)目不限,以游戲界面整體美觀度來決定數(shù)目。
  • 墻:墻體分為兩種,普通的墻和鐵墻,普通的墻在受到子彈襲擊時會損壞,而鐵墻可以阻礙子彈的穿越。兩方的坦克均不能穿越兩種墻體,但都可以摧毀普通墻體。普通墻體的數(shù)目配合其他元素合理安排,鐵墻則不宜過多,不然游戲難度太低甚至因為坦克不能穿越鐵墻而使得游戲無法進行下去。
  • “家”:用戶方除了有一輛自己的坦克外還有一個要保護的家,家由普通墻體包圍,家受到子彈攻擊后游戲立即結(jié)束,用戶方則輸了本局游戲。
  • 子彈:子彈可以由敵方和用戶方發(fā)射,且發(fā)射出去的子彈可以直線移動,直到碰到障礙物就消失,子彈可以穿越樹林和河流。敵方坦克受到一顆子彈攻擊會爆炸從而導(dǎo)致死亡,死亡后坦克消失。用戶方受到子彈攻擊后會減少壽命,且受到四次攻擊則死亡,此時如還有敵方坦克存在,則用戶方輸?shù)舯敬斡螒颉?/li>
  • 爆炸:當子彈射擊到坦克身上時,要產(chǎn)生爆炸效果。
  • 方向:坦克和子彈都有方向,可以選擇上下左右四個方向,且子彈的方向從屬于坦克的方向。 

效果如圖所示:

主界面代碼如下:

public TankClient() {
 // printable = false;
 // 創(chuàng)建菜單及菜單選項
 jmb = new MenuBar();
 jm1 = new Menu("游戲");
 jm2 = new Menu("暫停/繼續(xù)");
 jm3 = new Menu("幫助");
 jm4 = new Menu("游戲級別");
 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("開始新游戲");
 jmi2 = new MenuItem("退出");
 jmi3 = new MenuItem("暫停");
 jmi4 = new MenuItem("繼續(xù)");
 jmi5 = new MenuItem("游戲說明");
 jmi6 = new MenuItem("級別1");
 jmi7 = new MenuItem("級別2");
 jmi8 = new MenuItem("級別3");
 jmi9 = new MenuItem("級別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++) { // 樹的布局
  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)——(重新開始:R鍵 開火:F鍵)");
 
 this.addWindowListener(new WindowAdapter() { // 窗口監(jiān)聽關(guān)閉
   public void windowClosing(WindowEvent e) {
   System.exit(0);
   }
  });
 this.setResizable(false);
 this.setBackground(Color.GREEN);
 this.setVisible(true);
 
 this.addKeyListener(new KeyMonitor());// 鍵盤監(jiān)聽
 new Thread(new PaintThread()).start(); // 線程啟動
 }
 
 public static void main(String[] args) {
 new TankClient(); // 實例化
 }

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解Spring中的Transactional屬性

    詳解Spring中的Transactional屬性

    今天我在寫代碼的時候,看到了一個注解@Transactional(rollbackFor = Exception.class),今天就和大家分享一下,這個注解的用法,,需要的朋友可以參考下
    2021-05-05
  • spring多數(shù)據(jù)源配置實現(xiàn)方法實例分析

    spring多數(shù)據(jù)源配置實現(xiàn)方法實例分析

    這篇文章主要介紹了spring多數(shù)據(jù)源配置實現(xiàn)方法,結(jié)合實例形式分析了spring多數(shù)據(jù)源配置相關(guān)操作技巧與使用注意事項,需要的朋友可以參考下
    2019-12-12
  • java使用OpenCV從視頻文件中獲取幀

    java使用OpenCV從視頻文件中獲取幀

    這篇文章主要為大家詳細介紹了java使用OpenCV從視頻文件中獲取幀,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • Maven打包后找不到class文件的問題

    Maven打包后找不到class文件的問題

    本文主要介紹了Maven打包后找不到class文件的問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-04-04
  • Java實現(xiàn)遞歸查詢樹結(jié)構(gòu)的示例代碼

    Java實現(xiàn)遞歸查詢樹結(jié)構(gòu)的示例代碼

    我們在實際開發(fā)中,肯定會用到樹結(jié)構(gòu),如部門樹、菜單樹等等。Java后臺利用遞歸思路進行構(gòu)建樹形結(jié)構(gòu)數(shù)據(jù),返回給前端,能以下拉菜單等形式進行展示。今天,咱們就來說說怎么樣將List集合轉(zhuǎn)換成TreeList
    2022-11-11
  • IDEA POM文件配置profile實現(xiàn)不同環(huán)境切換的方法步驟

    IDEA POM文件配置profile實現(xiàn)不同環(huán)境切換的方法步驟

    這篇文章主要介紹了IDEA POM文件配置profile實現(xiàn)不同環(huán)境切換的方法步驟
    2024-03-03
  • Spring為什么要用三級緩存解決循環(huán)依賴呢

    Spring為什么要用三級緩存解決循環(huán)依賴呢

    本文主要介紹了Spring如何使用三級緩存解決循環(huán)依賴問題,本文為了方便說明,先設(shè)置兩個業(yè)務(wù)層對象,命名為AService和BService,結(jié)合示例給大家介紹的非常詳細,感興趣的朋友一起看看吧
    2025-01-01
  • 深入了解final在java中的應(yīng)用

    深入了解final在java中的應(yīng)用

    談到final關(guān)鍵字,想必很多人都不陌生,在使用匿名內(nèi)部類的時候可能會經(jīng)常用到final關(guān)鍵字。另外,Java中的String類就是一個final類,那么今天我們就來了解final這個關(guān)鍵字的用法。
    2019-06-06
  • SpringDataJPA在Entity中常用的注解介紹

    SpringDataJPA在Entity中常用的注解介紹

    這篇文章主要介紹了SpringDataJPA在Entity中常用的注解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Java調(diào)整圖片大小的3種方式小結(jié)

    Java調(diào)整圖片大小的3種方式小結(jié)

    在軟件開發(fā)中處理圖像是一個常見任務(wù),特別是當我們需要優(yōu)化圖像尺寸以適應(yīng)不同的應(yīng)用場景時,這篇文章主要介紹了Java調(diào)整圖片大小的3種方式,需要的朋友可以參考下
    2024-09-09

最新評論

永吉县| 乐都县| 兰州市| 惠东县| 庆安县| 安宁市| 洛阳市| 顺义区| 遂宁市| 松潘县| 通辽市| 新巴尔虎右旗| 定陶县| 九江市| 兴文县| 陵川县| 晋城| 石柱| 上思县| 珠海市| 长乐市| 谢通门县| 阿拉善盟| 屏东县| 隆子县| 什邡市| 棋牌| 云霄县| 安康市| 镇原县| 揭东县| 黔南| 芜湖县| 乐业县| 健康| 咸丰县| 定结县| 荣昌县| 肃南| 安吉县| 鹤壁市|