欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

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

相關(guān)文章

  • java 遞歸深入理解

    java 遞歸深入理解

    一個過程或函數(shù)在其定義或說明中有直接或間接調(diào)用自身的一種方法,它通常把一個大型復(fù)雜的問題層層轉(zhuǎn)化為一個與原問題相似的規(guī)模較小的問題來求解,需要的朋友可以參考下
    2012-11-11
  • springboot?整合dubbo3開發(fā)rest應(yīng)用的場景分析

    springboot?整合dubbo3開發(fā)rest應(yīng)用的場景分析

    這篇文章主要介紹了springboot?整合dubbo3開發(fā)rest應(yīng)用,本文通過實(shí)際的案例演示下基于?dubbo的2.7.X的版本,整合springboot完成一個rest應(yīng)用開發(fā)和調(diào)用的案例,需要的朋友可以參考下
    2022-09-09
  • 使用SpringBoot請求參數(shù)過濾空格

    使用SpringBoot請求參數(shù)過濾空格

    這篇文章主要介紹了使用SpringBoot請求參數(shù)過濾空格的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Spring的自動裝配常用注解詳解

    Spring的自動裝配常用注解詳解

    這篇文章主要介紹了Spring的自動裝配常用注解詳解,自動裝配就是指 Spring 容器在不使用 <constructor-arg> 和<property> 標(biāo)簽的情況下,可以自動裝配相互協(xié)作的 Bean 之間的關(guān)聯(lián)關(guān)系,將一個 Bean 注入其他 Bean 的 Property 中,需要的朋友可以參考下
    2023-08-08
  • mybatis?實(shí)現(xiàn)字段大小寫賦值

    mybatis?實(shí)現(xiàn)字段大小寫賦值

    這篇文章主要介紹了mybatis?實(shí)現(xiàn)字段大小寫賦值,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Base64加解密的實(shí)現(xiàn)方式實(shí)例詳解

    Base64加解密的實(shí)現(xiàn)方式實(shí)例詳解

    這篇文章主要介紹了Base64加解密的實(shí)現(xiàn)方式實(shí)例詳解的相關(guān)資料,這里提供了實(shí)現(xiàn)實(shí)例,幫助大家學(xué)習(xí)理解這部分內(nèi)容,需要的朋友可以參考下
    2017-08-08
  • 詳解使用Spring AOP和自定義注解進(jìn)行參數(shù)檢查

    詳解使用Spring AOP和自定義注解進(jìn)行參數(shù)檢查

    本篇文章主要介紹了詳解使用Spring AOP和自定義注解進(jìn)行參數(shù)檢查,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • Java中字符編碼格式詳解

    Java中字符編碼格式詳解

    在java應(yīng)用軟件中,會有多處涉及到字符集編碼,有些地方需要進(jìn)行正確的設(shè)置,有些地方需要進(jìn)行一定程度的處理。本文主要給大家講解java中字符的編碼格式等相關(guān)問題
    2016-03-03
  • Eclipse+Java+Swing實(shí)現(xiàn)圖書管理系統(tǒng)(詳細(xì)代碼)

    Eclipse+Java+Swing實(shí)現(xiàn)圖書管理系統(tǒng)(詳細(xì)代碼)

    這篇文章主要介紹了Eclipse+Java+Swing實(shí)現(xiàn)圖書管理系統(tǒng)并附上詳細(xì)代碼,需要的小伙伴可以參考一下,希望對你有所幫助
    2022-01-01
  • JAVA 生成隨機(jī)數(shù)并根據(jù)后臺概率靈活生成的實(shí)例代碼

    JAVA 生成隨機(jī)數(shù)并根據(jù)后臺概率靈活生成的實(shí)例代碼

    本篇文章主要介紹了JAVA 生成隨機(jī)數(shù)并根據(jù)后臺概率靈活生成的實(shí)例代碼,具有一定的參考價值,有興趣的可以了解一下
    2017-08-08

最新評論