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

Java實(shí)現(xiàn)簡單的飛機(jī)大戰(zhàn)游戲(控制主飛機(jī)篇)

 更新時(shí)間:2022年05月07日 16:15:42   作者:貓奴.  
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)簡單的飛機(jī)大戰(zhàn)游戲,控制主飛機(jī),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了Java實(shí)現(xiàn)簡單的飛機(jī)大戰(zhàn)游戲,控制主飛機(jī)的具體代碼,供大家參考,具體內(nèi)容如下

接著上一篇:Java實(shí)現(xiàn)簡單的飛機(jī)大戰(zhàn)游戲(敵機(jī)下落篇),首先我們需要明白,在控制一架飛機(jī)的時(shí)候,需要通過對(duì)鍵盤的監(jiān)聽。上下左右比較簡單,因?yàn)槭菍?duì)單一按鍵的監(jiān)聽,在這里我們可以通過switch語句,通過讀取鍵盤上每個(gè)按鍵的ASCII值。但是如果想要實(shí)現(xiàn)邊飛行邊發(fā)射子彈,又或者是實(shí)現(xiàn)斜飛怎么辦?這里就需要通過對(duì)多個(gè)按鍵的監(jiān)聽。
解決的方法是:單一的方向控制我們還是使用switch語句,但是如果牽扯到2個(gè)或2個(gè)以上的按鍵監(jiān)聽,我們需要將按鍵設(shè)置一下標(biāo)記位。即按下為真,釋放為假。并且這些處理都是在switch case語句以外,就可以實(shí)現(xiàn)斜飛。然后再對(duì)窗體進(jìn)行重繪,我們就可以看到飛機(jī)的坐標(biāo)在不斷的發(fā)生改變。

如以下代碼所示:

public class MovePlaneListener extends KeyAdapter implements KeyListener {
?? ?public int x, y, flag = 0;
?? ?public JFrame frame;
?? ?public boolean left = false, right = false, up = false, down = false;
?? ?public Graphics g;
?? ?public Image image;
?? ?public int x1, y1, vy = 16;
?? ?public Vector<Bullet> vector;
?? ?ImageIcon icon = new ImageIcon("plane/myplane.png");
?? ?public BulletAI ba;

?? ?public void setmove(int x, int y, JFrame frame) {
?? ??? ?this.x = x;
?? ??? ?this.y = y;
?? ??? ?this.frame = frame;
?? ?}

?? ?public MovePlaneListener() {
?? ??? ?vector = new Vector<Bullet>();

?? ?}

?? ?public void keyPressed(KeyEvent e) {

?? ??? ?switch (e.getKeyCode()) {

?? ??? ?case 87: //W-> 上
?? ??? ??? ?if (y > 0) {

?? ??? ??? ??? ?y = y - 3;
?? ??? ??? ??? ?up = true;
?? ??? ??? ?}

?? ??? ??? ?break;
?? ??? ?case 65: //A-> 左
?? ??? ??? ?if (x > 0) {
?? ??? ??? ??? ?x = x - 3;
?? ??? ??? ??? ?left = true;
?? ??? ??? ?}
?? ??? ??? ?break;
?? ??? ?case 83: //S-> 下

?? ??? ??? ?if (y + icon.getIconHeight() < frame.getHeight()) {
?? ??? ??? ??? ?y = y + 3;
?? ??? ??? ??? ?down = true;
?? ??? ??? ?}
?? ??? ??? ?break;
?? ??? ?case 68: //D-> 右

?? ??? ??? ?if (x + icon.getIconWidth() < frame.getWidth()) {
?? ??? ??? ??? ?x = x + 3;
?? ??? ??? ??? ?right = true;
?? ??? ??? ?}

?? ??? ??? ?break;

?? ??? ?case 32: // 空格->發(fā)射子彈

?? ??? ??? ?Bullet bu = new Bullet(vector, frame, x, y, vy);
?? ??? ??? ?vector.add(bu);
?? ??? ??? ?ba = new BulletAI(vector, frame, x, y, vy);
?? ??? ??? ?if (flag == 0) {
?? ??? ??? ??? ?ba.start();
?? ??? ??? ??? ?flag = 1;
?? ??? ??? ?}

?? ??? ??? ?break;
?? ??? ?}

?? ??? ?if (x > 0 && y > 0 && x + icon.getIconWidth() < frame.getWidth()
?? ??? ??? ??? ?&& y + icon.getIconHeight() < frame.getHeight())

?? ??? ?{
?? ??? ??? ?if (left == true && up == true) {
?? ??? ??? ??? ?x = x - 3;
?? ??? ??? ??? ?y = y - 3;
?? ??? ??? ?} else if (left == true && down == true) {
?? ??? ??? ??? ?x = x - 3;
?? ??? ??? ??? ?y = y + 3;
?? ??? ??? ?} else if (right == true && up == true) {
?? ??? ??? ??? ?x = x + 3;
?? ??? ??? ??? ?y = y - 3;
?? ??? ??? ?} else if (right == true && down == true) {
?? ??? ??? ??? ?x = x + 3;
?? ??? ??? ??? ?y = y + 3;
?? ??? ??? ?}
?? ??? ?}
?? ??? ?// System.out.println(x + ">>>>>" + y);
?? ??? ?//窗體重繪
?? ??? ?frame.repaint();

?? ?}

?? ?public void keyReleased(KeyEvent e) {
?? ??? ?switch (e.getKeyCode()) {
?? ??? ?case 87: // 上
?? ??? ??? ?up = false;
?? ??? ??? ?break;

?? ??? ?case 65: // 左

?? ??? ??? ?left = false;
?? ??? ??? ?break;

?? ??? ?case 83: // 下

?? ??? ??? ?down = false;
?? ??? ??? ?break;

?? ??? ?case 68: // 右

?? ??? ??? ?right = false;
?? ??? ??? ?break;
?? ??? ?}
?? ?}
}

之后就是關(guān)于子彈的發(fā)射,這里的處理方法和我的上一篇文章差不多,通過新建一個(gè)子彈類,每生成一個(gè)子彈后就將其添加到vector向量里,然后利用線程不斷的改變子彈的坐標(biāo)。

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

相關(guān)文章

  • SpringBoot YAML語法基礎(chǔ)詳細(xì)整理

    SpringBoot YAML語法基礎(chǔ)詳細(xì)整理

    YAML 是 “YAML Ain’t Markup Language”(YAML 不是一種標(biāo)記語言)的遞歸縮寫。在開發(fā)的這種語言時(shí),YAML 的意思其實(shí)是:“Yet Another Markup Language”(仍是一種標(biāo)記語言),本文給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-10-10
  • 淺談JVM之類的加載鏈接和初始化

    淺談JVM之類的加載鏈接和初始化

    有了java class文件之后,為了讓class文件轉(zhuǎn)換成為JVM可以真正運(yùn)行的結(jié)構(gòu),需要經(jīng)歷加載,鏈接和初始化的過程。這三個(gè)過程是怎么工作的呢?在本文中你將會(huì)找到答案。
    2021-06-06
  • SpringBoot項(xiàng)目打包三方JAR的示例代碼

    SpringBoot項(xiàng)目打包三方JAR的示例代碼

    本篇文章主要介紹了SpringBoot項(xiàng)目打包三方JAR的示例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • java數(shù)據(jù)庫連接、查詢、更新等

    java數(shù)據(jù)庫連接、查詢、更新等

    這篇文章主要介紹了java數(shù)據(jù)庫連接、查詢、更新等,需要的朋友可以參考下
    2018-05-05
  • Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(14)

    Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(14)

    下面小編就為大家?guī)硪黄狫ava基礎(chǔ)的幾道練習(xí)題(分享)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧,希望可以幫到你
    2021-07-07
  • 聊聊SpringCloud中的Ribbon進(jìn)行服務(wù)調(diào)用的問題

    聊聊SpringCloud中的Ribbon進(jìn)行服務(wù)調(diào)用的問題

    SpringCloud-Ribbon是基于Netflix?Ribbon實(shí)現(xiàn)的一套客戶端負(fù)載均衡的工具。本文給大家介紹SpringCloud中的Ribbon進(jìn)行服務(wù)調(diào)用的問題,感興趣的朋友跟隨小編一起看看吧
    2022-01-01
  • SpringBoot集成SpringMVC的方法示例

    SpringBoot集成SpringMVC的方法示例

    這篇文章主要介紹了SpringBoot集成SpringMVC的方法示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • mybatis框架入門學(xué)習(xí)教程

    mybatis框架入門學(xué)習(xí)教程

    MyBatis是一個(gè)支持普通SQL查詢,存儲(chǔ)過程和高級(jí)映射的優(yōu)秀持久層框架。這篇文章主要介紹了mybatis框架入門學(xué)習(xí)教程,需要的朋友可以參考下
    2017-02-02
  • springboot訪問靜態(tài)資源遇到的坑及解決

    springboot訪問靜態(tài)資源遇到的坑及解決

    這篇文章主要介紹了springboot訪問靜態(tài)資源遇到的坑及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • 如何解決springboot啟動(dòng)的時(shí)候required a bean of type 'XXX' not be問題

    如何解決springboot啟動(dòng)的時(shí)候required a bean of ty

    Spring Boot啟動(dòng)失敗,提示缺少`UserDao`類型的Bean,解決方案一:為`UserDao`接口添加`@Mapper`注解,重新啟動(dòng);解決方案二:使用`@MapperScan`注解掃描Mapper接口所在的包
    2024-12-12

最新評(píng)論

忻州市| 德州市| 左云县| 双牌县| 河池市| 临沂市| 林芝县| 兴国县| 丰都县| SHOW| 张家界市| 桐庐县| 伊川县| 同仁县| 龙州县| 清新县| 丹寨县| 湟源县| 丰镇市| 威宁| 石林| 乌恰县| 巴彦淖尔市| 八宿县| 泗水县| 积石山| 定结县| 互助| 垣曲县| 华阴市| 四平市| 久治县| 浏阳市| 长岭县| 米泉市| 桐庐县| 始兴县| 蒙自县| 将乐县| 吉木乃县| 南通市|