Java實(shí)現(xiàn)簡單的飛機(jī)大戰(zhàn)游戲(控制主飛機(jī)篇)
本文實(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í)有所幫助,也希望大家多多支持腳本之家。
- Java實(shí)現(xiàn)簡單的飛機(jī)大戰(zhàn)游戲(敵機(jī)下落篇)
- Java開發(fā)實(shí)現(xiàn)飛機(jī)大戰(zhàn)
- 基于Java語言在窗體上實(shí)現(xiàn)飛機(jī)大戰(zhàn)小游戲的完整步驟
- Java實(shí)現(xiàn)游戲飛機(jī)大戰(zhàn)-III的示例代碼
- Java實(shí)現(xiàn)飛機(jī)大戰(zhàn)-II游戲詳解
- Java實(shí)現(xiàn)經(jīng)典游戲飛機(jī)大戰(zhàn)-I的示例代碼
- 一天時間用Java寫了個飛機(jī)大戰(zhàn)游戲,朋友直呼高手
- java實(shí)戰(zhàn)之飛機(jī)大戰(zhàn)小游戲(源碼加注釋)
- java實(shí)現(xiàn)飛機(jī)大戰(zhàn)游戲
- java實(shí)現(xiàn)簡易飛機(jī)大戰(zhàn)
相關(guān)文章
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-09Base64加解密的實(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ù)檢查,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-04-04Eclipse+Java+Swing實(shí)現(xiàn)圖書管理系統(tǒng)(詳細(xì)代碼)
這篇文章主要介紹了Eclipse+Java+Swing實(shí)現(xiàn)圖書管理系統(tǒng)并附上詳細(xì)代碼,需要的小伙伴可以參考一下,希望對你有所幫助2022-01-01JAVA 生成隨機(jī)數(shù)并根據(jù)后臺概率靈活生成的實(shí)例代碼
本篇文章主要介紹了JAVA 生成隨機(jī)數(shù)并根據(jù)后臺概率靈活生成的實(shí)例代碼,具有一定的參考價值,有興趣的可以了解一下2017-08-08