日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java程序设计-飞机大战

發布時間:2023/12/10 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java程序设计-飞机大战 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

制作人:尹子杰,朱健釗

項目簡介:

團隊選擇任務為小游戲,選擇具體游戲為飛機大戰,不僅是因為編寫出游戲有一定的挑戰性和難度,是對我們本學期java學習的檢測,更能通過本次代碼編寫找到自身更多不足之處,也讓我們更加了解了我們所學的知識點的應用。我們通過努力完成了這個項目,其中不足的地方也請老師指出我們改正。

項目關鍵技術:

java變量、java數據類型、判斷語句、循環結構、數組、Java集合、簡單窗口創建、圖形圖片繪制、雙緩存技術、事件-鼠標和鍵盤事件、awt抽象窗口工具包、部分復雜算法、大部分注釋、GUI界面、面向對象程序設計、線程等

開發工具:idea

開發環境:jdk11

項目需求分析:

1.方法簡單,游戲方式簡單,更容易上手游玩。

2.能夠方便操作,可以用鼠標靈活操作。

功能演示截圖

?

?

任務分配

位置姓名

任務分配

組長:朱健釗

完成大體的布置,檢查、修改共同完成各模塊內容最后整合一起

組員:尹子杰

圖片的查找,模塊內容的細分以及具體處理

git項目提交地址:untitle: 雷霆戰機java課程設計——朱健釗,尹子杰 (gitee.com)

git提交截圖:

代碼部分:

Bomb

package game;import java.awt.Graphics; import java.awt.image.ImageObserver; import javax.swing.ImageIcon;public class Bomb {private int x;private int y;private int height;private int width;private ImageIcon imageIcon = new ImageIcon("img/bomb.png");private int flag;public Bomb(int x, int y) {this.x = x;this.y = y;this.height = this.imageIcon.getIconHeight();this.width = this.imageIcon.getIconWidth();}public int getX() {return this.x;}public void setX(int x) {this.x = x;}public int getY() {return this.y;}public void setY(int y) {this.y = y;}public int getHeight() {return this.height;}public void setHeight(int height) {this.height = height;}public int getWidth() {return this.width;}public void setWidth(int width) {this.width = width;}public ImageIcon getImageIcon() {return this.imageIcon;}public void setImageIcon(ImageIcon imageIcon) {this.imageIcon = imageIcon;}public void drawImage(Graphics g) {g.drawImage(this.imageIcon.getImage(), this.x, this.y, (ImageObserver)null);}public void delete() {++this.flag;}public int getFlag() {return this.flag;}public void setFlag(int flag) {this.flag = flag;} }

Bullet

package game;import java.awt.Graphics; import java.awt.image.ImageObserver; import javax.swing.ImageIcon;public class Bullet {private int x;private int y;private int width;private int height;private ImageIcon bulletImageIcon = new ImageIcon("img/bullet.png");public Bullet(int x, int y) {this.width = this.bulletImageIcon.getIconWidth();this.height = this.bulletImageIcon.getIconHeight();this.x = x;this.y = y;}public int getX() {return this.x;}public void setX(int x) {this.x = x;}public int getY() {return this.y;}public void setY(int y) {this.y = y;}public int getWidth() {return this.width;}public void setWidth(int width) {this.width = width;}public int getHeight() {return this.height;}public void setHeight(int height) {this.height = height;}public ImageIcon getBulletImageIcon() {return this.bulletImageIcon;}public void setBulletImageIcon(ImageIcon bulletImageIcon) {this.bulletImageIcon = bulletImageIcon;}public void drawImage(Graphics g) {g.drawImage(this.bulletImageIcon.getImage(), this.x, this.y, (ImageObserver)null);}public void move() {this.y -= 4;} }

Emeny

package game;import java.awt.Graphics; import java.awt.image.ImageObserver; import java.util.Random; import javax.swing.ImageIcon;public class Enemy {private int x;private int y;private int height;private int width;private ImageIcon enemyImageIcon = new ImageIcon("img/enemy.png");public Enemy() {this.height = this.enemyImageIcon.getIconHeight();this.width = this.enemyImageIcon.getIconWidth();Random random = new Random();this.x = random.nextInt(GameMain.width - this.width);this.y = -random.nextInt(GameMain.height - this.height);}public void move() {++this.y;}public void drawImage(Graphics g) {g.drawImage(this.enemyImageIcon.getImage(), this.x, this.y, (ImageObserver)null);}public int getX() {return this.x;}public void setX(int x) {this.x = x;}public int getY() {return this.y;}public void setY(int y) {this.y = y;}public int getHeight() {return this.height;}public void setHeight(int height) {this.height = height;}public int getWidth() {return this.width;}public void setWidth(int width) {this.width = width;}public ImageIcon getEnemyImageIcon() {return this.enemyImageIcon;}public void setEnemyImageIcon(ImageIcon enemyImageIcon) {this.enemyImageIcon = enemyImageIcon;} }

GamePanel

package game;import javax.swing.*; import java.awt.*; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionListener; import java.util.ArrayList; import java.util.List;public class GamePanel extends JPanel implements MouseMotionListener {//讀取英雄機的圖片ImageIcon heroImage = new ImageIcon("img/hero.png");//英雄機坐標int heroX = 300;int heroY = 500;private int number;//記錄分數//定義一個集合來裝所有敵機private List<Enemy> enems = new ArrayList<Enemy>();//定義一個集合來裝所有的敵機//定義一個集合來裝所有子彈對象private List<Bullet> bullets = new ArrayList<Bullet>();//定義一個集合用來裝爆炸圖片private List<Bomb> bombs =new ArrayList<Bomb>();public GamePanel() {//創建十個敵人for (int i = 0; i < 10; i++) {enems.add(new Enemy());}}//鼠標按鍵在組件上按下并拖動時調用@Overridepublic void mouseDragged(MouseEvent e) {heroX = e.getX() - (heroImage.getIconWidth() / 2);//使鼠標與戰機重合heroY = e.getY() - (heroImage.getIconHeight() / 2);//把鼠標的y賦值repaint();//重新繪制}//鼠標光標移動到組件上但無按鍵按下時調用@Overridepublic void mouseMoved(MouseEvent e) {heroX = e.getX() - (heroImage.getIconWidth() / 2);heroY = e.getY() - (heroImage.getIconHeight() / 2);repaint();}/*** 繪制圖片 這個方法是窗口對象來調用* @param g*/@Overridepublic void paint(Graphics g) {super.paint(g);g.drawString("ZJZ and YZJ", 250, 30);//繪制分數板g.setFont(new Font("", Color.RED.getRed(), 30));g.drawString("當前得分:"+number, 20, 30);//1.繪制英雄機//g.drawImage(heroImage.getImage(), 350, 0, null);g.drawImage(heroImage.getImage(), heroX, heroY, null);//2.繪制敵機for (int i = 0; i < enems.size(); i++) {Enemy enemy = enems.get(i);enemy.drawImage(g);//重新繪制}//3.繪制子彈for (int i = 0; i < bullets.size(); i++) {Bullet bullet=bullets.get(i);bullet.drawImage(g);}//4.繪制爆炸圖片for(int i=0;i<bombs.size();i++){Bomb bomb = bombs.get(i);bomb.drawImage(g);}}/*** 這個方法做初始化使用* 創建一些組件(英雄機,子彈,敵人)*/public void init() {int flag=0;//控制子彈流出的速度while (true) {flag++;if(flag % 15 ==0) {//創建一些子彈Bullet bullet = new Bullet(heroX + (heroImage.getIconWidth() / 2), heroY);//把子彈添加到集合bullets.add(bullet);}//讓敵機往下移動for (int i = 0; i < enems.size(); i++) {Enemy enemy = enems.get(i);enemy.move();//改變敵機的y坐標//判斷敵機的y值是否大于窗口的高夫if(enemy.getY()>GameMain.height){//刪除敵機enems.remove(enemy);//再加一個新的敵機enems.add(new Enemy());}}//讓子彈飛起來for (int i = 0; i < bullets.size(); i++) {Bullet tempBullet = bullets.get(i);tempBullet.move();}//刪除越界子彈數for (int i = 0; i < bullets.size(); i++) {Bullet bullet=bullets.get(i);if(bullet.getY()<0){//越界bullets.remove(bullet);}}//處理子彈碰到敵機的效果for (int i = 0; i < enems.size(); i++) {Enemy enemy=enems.get(i);//敵機for (int j = 0; j < bullets.size(); j++) {Bullet bullet=bullets.get(j);//子彈if(isHit(enemy,bullet)){enems.remove(enemy);//先刪除集中的敵機enems.add(new Enemy());//再加入敵機bullets.remove(bullet);//刪除子彈//創建一個爆炸圖片的對象Bomb bomb=new Bomb(enemy.getY(),enemy.getY());//爆炸的地方是敵機被消滅的地方bombs.add(bomb);//添加到集合中number+=10;//每次碰撞加十分}}}for (int i = 0; i < bombs.size(); i++) {Bomb bomb=bombs.get(i);bomb.delete();//立馬刪看不到效果,刪五次if(bomb.getFlag()>10){bombs.remove(bomb);//刪集合}}repaint();//重新繪制,使圖片動起來try {//休眠五毫秒,否則我們看不見Thread.sleep(5);} catch (InterruptedException e) {e.printStackTrace();}}}//碰撞方法public boolean isHit(Enemy e, Bullet b){// 1.指定一個區域Rectangle rect = new Rectangle(e.getX(), e.getY(), e.getWidth(), e.getHeight());// 2.表示 (x,y) 坐標空間中的位置的點Point p = new Point(b.getX()+b.getWidth()/2,b.getY()+b.getHeight()/2);return rect.contains(p);//敵機包含子彈} }

GameMain

package game;import java.awt.Component; import javax.swing.JFrame;public class GameMain {static int width = 600;static int height = 800;public GameMain() {}public static void main(String[] args) {JFrame frame = new JFrame();frame.setTitle("飛機大戰");frame.setSize(width, height);frame.setLocationRelativeTo((Component)null);frame.setDefaultCloseOperation(3);GamePanel j = new GamePanel();frame.add(j);frame.addMouseMotionListener(j);frame.setVisible(true);j.init();} }

總結

以上是生活随笔為你收集整理的java程序设计-飞机大战的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。