飞机游戏项目完整代码(详解JAVA300集)
一:簡介
這是一個可以通過鍵盤移動飛機位置 然后可以躲避 炮彈的打擊 ,游戲結束為 當炮彈與飛機發生碰撞 則 最后顯示出飛機存活的時長 代表游戲結束
二:上碼
1:運行游戲的類
package src.src.cn.wyj.飛機;import java.awt.Color; import java.awt.Font; import java.awt.Frame; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.util.Date;import javax.swing.JFrame;public class MyGame1 extends Frame{//圖像的加載Image bg = GameUti.getImage("src/images/bg.jpeg");Image planeimg = GameUti.getImage("src/images/plane.jpeg");//注意圖片的路徑Plane plane = new Plane(planeimg,250,250,30,30);Shell shell[] = new Shell[50];Explode bao;Date startTime = new Date();Date endTime;int sustain;//游戲持續 的時間// // //文本的繪制 // public void paint(Graphics g){//自動被調用, g 相當于 一只畫筆super.paint(g);//使窗口的背景顏色為白色//g.drawLine(200,12, 200, 200);//加載圖片g.drawImage(bg, 0, 0, Constant.game_width, Constant.game_height, null);//這里可以設置背景圖片為窗口大小plane.drawself(g);//畫飛機for(int i = 0; i < shell.length; i++){ shell[i].draw(g);//畫炮彈//飛機和炮彈的碰撞檢測boolean peng = shell[i].getRect().intersects(plane.getRect());if(peng){plane.live = false;if( bao == null){bao = new Explode(plane.x,plane.y);endTime = new Date();sustain = (int)((endTime.getTime() - startTime.getTime())/1000);}bao.draw(g);}if(plane.live == false){g.setColor(Color.blue);Font f = new Font("宋體",Font.BOLD,100);g.setFont(f);g.drawString("時間:"+sustain+"秒",200, 350);}}//g.setColor(c);}private Image offScreenImage = null;public void update(Graphics g) {if(offScreenImage == null) {//這是游戲窗口的寬度和高度offScreenImage = this.createImage(Constant.game_width, Constant.game_height);}Graphics gOff = offScreenImage.getGraphics();paint(gOff);g.drawImage(offScreenImage, 0, 0, null);}//創建一個內部類 內部類的好處 可以調用 MyGame1的屬性和方法//本項目中 創建一個內部類 主要是為了幫助我們重畫窗口class PaintThread extends Thread{public void run(){while(true){repaint();//重畫窗口Graphics g=getGraphics();//System.out.println("王永杰");try {Thread.sleep(40);//每 40 毫秒 加載一次 也就是 1s可以加載25次} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}//創建一個內部類 鍵盤控制游戲class KeyMonitor extends KeyAdapter{@Overridepublic void keyPressed(KeyEvent e) {// TODO Auto-generated method stubsuper.keyPressed(e);plane.addDirection(e);}@Overridepublic void keyReleased(KeyEvent e) {// TODO Auto-generated method stubsuper.keyReleased(e);plane.minusDirection(e);}}//初始化窗口public void launchFrame(){this.setTitle("杰哥出品 必是精品");//定義游戲窗口this.setVisible(true);this.setSize(Constant.game_width,Constant.game_height);this.setBackground(Color.white);//點 叉 終止程序this.addWindowListener(new WindowAdapter(){@Overridepublic void windowClosing(WindowEvent e) {// TODO Auto-generated method stubSystem.exit(0);}});//重畫窗口 new PaintThread().start();//啟動線程addKeyListener(new KeyMonitor());//給窗口增加鍵盤的監聽//初始化炮彈for(int i = 0; i < shell.length; i++){shell[i] = new Shell();//當碰撞檢測 不輸出 “相撞時” 則要去 檢查 炮彈類和飛機類當中 的構造函數 是否將 圖片的尺寸 傳進去了}}/*** @param args*/public static void main(String[] args) {// TODO Auto-generated method stubMyGame1 f = new MyGame1();f.launchFrame();}}2:游戲物體的父類 (炮彈和飛機方便直接用 體現繼承的好處)
package src.src.cn.wyj.飛機;import java.awt.Graphics; import java.awt.Image; import java.awt.Rectangle;//游戲物體的父類public class GameObject {Image img;int x,y;//圖片的坐標int speed;//為設定 每次 鍵盤控制所以移動的距離int width,height;//圖片的尺寸 一定賦值圖片的尺寸 public void drawself(Graphics g){g.drawImage(img, x, y, width, height, null);}public GameObject(){}public GameObject(Image img, int x, int y, int speed, int width, int height) {super();this.img = img;this.x = x;this.y = y;this.speed = speed;this.width = width;this.height = height;}public GameObject(Image img,int x, int y) {super();this.img = img;this.x = x;this.y = y;}// 碰撞檢測 (炮彈和飛機)public Rectangle getRect(){return new Rectangle(x, y, width, height);}/*** @param args*/public static void main(String[] args) {// TODO Auto-generated method stub}}3:窗口的尺寸設置成常量 這樣就不用牽一發而動全身了
package src.src.cn.wyj.飛機;public class Constant {public static final int game_width = 700;public static final int game_height = 700;/*** @param args*/public static void main(String[] args) {// TODO Auto-generated method stub}}4:飛機類
package src.src.cn.wyj.飛機;import java.awt.Graphics; import java.awt.Image; import java.awt.event.KeyEvent;public class Plane extends GameObject {boolean left,up,right,down;boolean live = true;public Plane(Image img, int x, int y,int width,int height) {super(img, x, y);this.img = img;this.x = x;this.y = y;this.speed = 3;this.width = width;this.height = height;// TODO Auto-generated constructor stub}public void drawself(Graphics g){if(live){g.drawImage(img, x, y, width, height, null);if(left)x-=speed;if(up)y-=speed;if(right)x+=speed;if(down)y+=speed;} }//增加某個方向的鍵值 public void addDirection(KeyEvent e){switch (e.getKeyCode()) {case KeyEvent.VK_LEFT:left = true;break;case KeyEvent.VK_UP:up = true;break;case KeyEvent.VK_RIGHT:right = true;break;case KeyEvent.VK_DOWN:down = true;break;default: break;}}//取消某個方向的鍵值 public void minusDirection(KeyEvent e){switch (e.getKeyCode()) {case KeyEvent.VK_LEFT:left = false;break;case KeyEvent.VK_UP:up = false;break;case KeyEvent.VK_RIGHT:right = false;break;case KeyEvent.VK_DOWN:down = false;break;default: break;}}/*** @param args*/public static void main(String[] args) {// TODO Auto-generated method stub}}5:炮彈類
package src.src.cn.wyj.飛機;import java.awt.Color; import java.awt.Graphics; import java.awt.Image;public class Shell extends GameObject{double degree;public Shell() {x = 200;y = 200;width = 10;height = 10;speed = 5;degree = Math.random()*Math.PI*2*x;//設置炮彈飛行的弧度// TODO Auto-generated constructor stub}public void draw(Graphics g){Color c = g.getColor();g.setColor(Color.YELLOW);g.fillOval(x, y, width, height);x += speed*Math.cos(degree);y += speed*Math.sin(degree);if(x < 0 || x > Constant.game_width-width){degree = Math.PI - degree;}if(y < 0 || y > Constant.game_height - height){degree = -degree;}g.setColor(c);}public Shell(Image img, int x, int y, int speed, int width, int height) {super(img, x, y, speed, width, height);// TODO Auto-generated constructor stub}/*** @param args*/public static void main(String[] args) {// TODO Auto-generated method stub}}6:爆炸類
package src.src.cn.wyj.飛機;import java.awt.Graphics; import java.awt.Image;public class Explode {double x,y;static Image[] imgs = new Image[16];static {for(int i=0;i<16;i++){imgs[i] = GameUti.getImage("src/images/"+(i+1)+".gif");//一定要注意名字與圖片一致,否則運行時提示空指針imgs[i].getWidth(null);}}int count;public void draw(Graphics g){if(count<=15){g.drawImage(imgs[count], (int)x, (int)y, null);count++;}}public Explode(double x,double y){this.x = x;this.y = y;}public Explode() {} }飛機讓炮彈炸沒了
三:總結
我用的Eclipse 進行編輯的,這是高琪老師講課當中的一個小項目,這是對前面所學做了復習,通過項目進行復習。最近晚上常在刷算法題,有時候一道題 得用5個多鐘頭,昨天可能做了道簡單的兩個多小時做完了,但躺在床上睡不著,一直努力想讓自己入睡 ,并一直告訴自己熬夜會讓自己變丑,畢竟我還是要靠臉和技術吃飯的boy! 然后我就又看了知乎上的大佬 編程指北的文章 ,對自己 的學習路線也有點了解,可是更加感嘆的是人家從大一就開始對編程有了認識,在大二開始用各種變成語言開始寫東西,到大三開始確定方向并深究。發自內心的說一句 真好,我的大二編程還沒入門,還在想的怎么跟女朋友談戀愛,浪費了好多時間,最近前女友又來找我了,給我發了很多信息,但我沒回,大三太重要了 太重要了,有時候不得不說自己可能太享受舒適的校園環境了,沒有感受到不久就要到來的校招危機,對目前的我來說 那必然是危機,因為我還很菜,還有很多東西得去做,大三上和寒假,我感覺我應該把自己定位在 高三 ,不 ,應該比高三更努力,原來抖音也不是命,戒掉他,確實每天多了很多時間,然后我又把手機QQ給卸載了,因為那里面也有短視頻,而且我以親還喜歡瀏覽別人發的動態 ,一點用都沒有,浪費時間,現在也就每天早上打開電腦時,看看有沒有重要的信息,有就回復,沒有就立馬關掉,其實也不是知道說了點啥!但自己可以明確的是 我還需更加努力!
總結
以上是生活随笔為你收集整理的飞机游戏项目完整代码(详解JAVA300集)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 利用海龟画笔绘制简单图形海龟的图画怎么画
- 下一篇: 7-17 汉诺塔的非递归实现 (25 分