亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

Java太陽系小游戲分析和源碼詳解

2019-11-26 15:00:59
字體:
來源:轉載
供稿:網友

最近看了面向對象的一些知識,然后跟著老師的講解做了一個太陽系各行星繞太陽轉的小游戲,來練習鞏固一下最近學的知識:

用到知識點:類的繼承、方法的重載與重寫、多態、封裝等

分析:

1.需要加載圖片、畫圖

2.建一個面板,主頁面

3.行星類

效果圖:

先看一下源碼結構圖:

現在逐步分析各個類的功能:

1)工具類-----util包中

    --Constant類   封裝了游戲中用到的常量

    --GameUtil類  封裝了游戲的圖片加載功能

    --MyFrame類  封裝了游戲面板的構造,用于各面板的父類

    ------之所以這樣做,目的是為了封裝數據,便于程序的擴充

Constant.java

package util;  public class Constant {   public static final int GAME_WIDTH = 800;   public static final int GAME_HEIGHT = 600;  } 

GameUtil.java

package util;  import java.awt.Image; import java.awt.image.BufferedImage; import java.io.IOException; import java.net.URL;  import javax.imageio.ImageIO;  /**  * 工具類(加載圖片)  * @author long  *  */ public class GameUtil {    private GameUtil(){ } //工具類通常將構造方法私有      public static Image getImage(String path){     URL u = GameUtil.class.getClassLoader().getResource(path);     BufferedImage img = null;     try {       img = ImageIO.read(u);     } catch (IOException e) {       e.printStackTrace();     }     return img;   } } 

MyFrame.java

package util;  import javax.swing.JFrame; import javax.swing.JPanel;  /**  * 游戲面板的父類  * @author long  *  */ public class MyFrame extends JPanel{      /**    * 加載Frame的方法    */   public void launchFrame(){     JFrame frame = new JFrame("MyGame");     frame.add(this);     frame.setSize(Constant.GAME_WIDTH,Constant.GAME_HEIGHT);     frame.setAlwaysOnTop(true); // 設置其總在最上     frame.setLocationRelativeTo(null); // 設置窗體初始位置     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);     frame.setVisible(true);          new PaintThread().start();   }      /**    * 定義一個重畫窗口的線程類,是一個內部類    * @author dell    *    */   class PaintThread extends Thread {          public void run(){       while(true){         repaint();         try {           Thread.sleep(40); //1s = 1000ms         } catch (InterruptedException e) {           e.printStackTrace();         }         }     }        }      public static void main(String[] args) {     new MyFrame().launchFrame();   }  }

 2)主要的事件處理類---solar包中
    --Planet類   行星類繼承至Star類

    --SolarFrame類  游戲主面板類繼承至MyFrame類

    --Star類  星球類,各個星球的父類

    --Test類  測試類,不需要說明

Planet.java

package solar;  import java.awt.Color; import java.awt.Graphics; import java.awt.Image;  import util.GameUtil;  /**  * 行星類,繼承至Star類  * @author long  *  */ public class Planet extends Star{   //除了圖片、坐標,行星沿著橢圓運行:長軸、短軸、移動速度、旋轉角度。繞著某個star運行   double longAxis;  //橢圓長軸   double shortAxis; //橢圓短軸   double speed;   //飛行速度   double degree;   //旋轉角度   Star center;    //圍繞行星      public void draw(Graphics g){     //g.drawImage(img, (int)x, (int)y, null);     super.draw(g);     drawTrace(g);     move();   }      public void drawTrace(Graphics g){     double traceX,traceY,traceWidth,traceHeight;     traceX = (center.x+center.w/2)-longAxis;     traceY = (center.y+center.h/2)-shortAxis;     traceWidth = 2*longAxis;     traceHeight = 2*shortAxis;          Color c = g.getColor();     g.setColor(Color.blue);     g.drawOval((int)traceX, (int)traceY, (int)traceWidth, (int)traceHeight);     g.setColor(c);   }      public void move(){     //沿著橢圓軌跡飛行     x = center.x + longAxis * Math.cos(degree);     y = center.y + shortAxis * Math.sin(degree);     degree += speed;   }      public Planet(Image img,double x,double y){     super(img,x,y);   }   public Planet(String imgpath,double x,double y){     super(imgpath,x,y);   }   public Planet( Star center,Image img,double longAxis,           double shortAxis,double speed) {     super();     this.x = (center.x+center.w/2) + longAxis;     this.y = (center.y+center.h/2) + shortAxis;     this.img = img;     this.longAxis = longAxis;     this.shortAxis = shortAxis;     this.speed = speed;     this.center = center;   }   public Planet( Star center,String imgPath,double longAxis,         double shortAxis,double speed) {     this(center,GameUtil.getImage(imgPath),longAxis,shortAxis,speed);   }        }

SolarFrame.java

package solar;  import java.awt.Graphics; import java.awt.Image;  import util.Constant; import util.GameUtil; import util.MyFrame;  public class SolarFrame extends MyFrame{    int width = Constant.GAME_WIDTH/2;   int height = Constant.GAME_HEIGHT/2;      Image bg=GameUtil.getImage("images/bg.png");      Star sun = new Star("images/sun.jpg",width,height);   Planet earth = new Planet(sun,"images/earth.png",100,60,0.1);   Planet mars = new Planet(sun,"images/mars.png",180,100,0.15);      @Override   public void paint(Graphics g) {     g.drawImage(bg, 0, 0, null);     sun.draw(g);     earth.draw(g);      mars.draw(g);   }    public static void main(String[] args) {     new SolarFrame().launchFrame();   }  } 

Star.java

package solar;  import java.awt.Graphics; import java.awt.Image;  import util.GameUtil;  public class Star {   public Image img;   public double x,y;   int w,h;      public void draw(Graphics g){     g.drawImage(img, (int)x, (int)y, null);   }    public Star(){   }     public Star(Image img){     this.img = img;     this.w = img.getWidth(null);     this.h = img.getHeight(null);   }   public Star(Image img,double x,double y){     this(img);     this.x = x;     this.y = y;   }     public Star(String imgPath,double x,double y){     this(GameUtil.getImage(imgPath),x,y);   }    } 

總結:該小游戲對代碼的封裝處理的比較好,便于程序的擴充,體現了面向對象的強大,不同的功能封裝在不同的類與方法中,把類的公共的部分封裝在父類中,提高代碼的重用性。前期各個類寫的過程中會有各種小問題與細節,但處理完這些后,后期想擴充行星的個數就比較簡單了,new一個行星對象,然后畫的面板上即可。面向對象水太深,這只是初步小涉獵,仍需繼續努力專研!??!

以上就是Java太陽系小游戲分析和源碼詳解,希望對大家學習java語言有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
九九热99久久久国产盗摄| 18一19gay欧美视频网站| 欧美精品一区三区| 成人羞羞国产免费| 日韩欧美黄色动漫| 成人做爽爽免费视频| 精品久久久av| 日韩av最新在线观看| 国产一区二区在线免费| 久久中文精品视频| 久久99精品久久久久久青青91| 欧美交受高潮1| 国产精品专区h在线观看| 国产精品视频久久久久| 欧美午夜片欧美片在线观看| 性色av一区二区三区红粉影视| xxx欧美精品| 国产精品美女www| 91高清免费在线观看| 国产成人高潮免费观看精品| 热久久这里只有| 精品亚洲aⅴ在线观看| 福利二区91精品bt7086| 亚洲国产欧美精品| 国产精品久久久久久久久| 日韩的一区二区| 中文字幕日韩专区| 国产精品精品久久久| 欧美亚洲在线观看| 欧美日韩国产一中文字不卡| 91国产在线精品| 欧美国产日韩在线| 成人国产精品色哟哟| 国产一区二区三区在线免费观看| 久久久视频在线| 国产美女高潮久久白浆| 一区二区欧美亚洲| 久久久精品2019中文字幕神马| 精品国内产的精品视频在线观看| 日韩av成人在线| 午夜精品三级视频福利| 亚洲精品黄网在线观看| 欧美成人精品不卡视频在线观看| 亚洲人成电影网| 日本人成精品视频在线| 亚洲国产97在线精品一区| 国产一区视频在线| 欧美放荡办公室videos4k| 日韩精品视频在线| 国产伦精品一区二区三区精品视频| 国产高清视频一区三区| 亚洲国产97在线精品一区| 国产精品美女久久久久av超清| 91免费的视频在线播放| 国产91|九色| 亚洲人成毛片在线播放| 性色av一区二区三区红粉影视| 欧美日韩国产色视频| 久久中文精品视频| 成人激情春色网| 欧美国产在线视频| 久久久亚洲影院你懂的| 精品久久久免费| 亚洲视屏在线播放| 国产美女被下药99| 成人精品在线视频| 国产精品户外野外| 亚洲国产97在线精品一区| 亚洲大尺度美女在线| 久久久久久国产精品美女| 欧美日韩另类字幕中文| 北条麻妃一区二区在线观看| 最近日韩中文字幕中文| 欧美国产第二页| 欧美日韩一区二区免费在线观看| 国产日韩欧美视频在线| 日韩在线观看网站| 精品久久久久久久久国产字幕| 成人性生交大片免费观看嘿嘿视频| 91黄色8090| 日本精品视频在线播放| 国产91在线播放| 91高清在线免费观看| 日韩欧美视频一区二区三区| 欧美极品在线视频| 国产精品电影网| 亚洲国产91精品在线观看| 久久久久久久久中文字幕| 亚洲天堂av综合网| 久久香蕉精品香蕉| 色妞在线综合亚洲欧美| 91免费在线视频| 国产午夜精品麻豆| 91精品国产电影| 精品久久久久国产| 精品久久国产精品| 久久影院资源站| 97视频免费在线观看| 欧洲永久精品大片ww免费漫画| 亚洲第一精品久久忘忧草社区| 国产成人自拍视频在线观看| 日av在线播放中文不卡| 中文字幕精品www乱入免费视频| 欧美交受高潮1| 亚洲香蕉成视频在线观看| 亚洲性无码av在线| 久久精品国产69国产精品亚洲| 亚洲乱码av中文一区二区| 国产女人18毛片水18精品| 在线色欧美三级视频| 国产美女精品视频免费观看| 久久久久久九九九| 欧美在线视频一区二区| 亚洲少妇激情视频| 深夜福利亚洲导航| 国产亚洲欧洲高清一区| 91久久精品国产91久久性色| 久久精品成人一区二区三区| 中文字幕日韩在线视频| 国产欧美日韩视频| 九色成人免费视频| 欧美亚洲免费电影| 亚洲精品98久久久久久中文字幕| 精品欧美国产一区二区三区| 日韩电影免费在线观看| 欧美日韩999| 岛国av一区二区在线在线观看| 欧美老女人www| 亚洲性夜色噜噜噜7777| 国产一区二区三区四区福利| 欧美亚洲午夜视频在线观看| 红桃视频成人在线观看| 中文日韩在线观看| 人妖精品videosex性欧美| 久久久久免费精品国产| 国产一区二区三区免费视频| 精品一区二区三区电影| 最新国产成人av网站网址麻豆| 精品成人国产在线观看男人呻吟| 欧美日韩免费区域视频在线观看| 精品人伦一区二区三区蜜桃网站| 97精品欧美一区二区三区| 亚洲一区二区久久久久久| 韩国国内大量揄拍精品视频| 91av视频在线播放| 亚洲国产高清高潮精品美女| 国产精品美女av| 欧美激情视频三区| 欧美最近摘花xxxx摘花| 中日韩美女免费视频网站在线观看| 欧美日本精品在线| 国产精品1234| 亚洲成人激情视频| 国产精品96久久久久久| 亚洲区一区二区| 国产精品久久久久久久7电影| 色偷偷偷亚洲综合网另类| 国产亚洲精品久久久久久| 中文字幕日韩精品有码视频| 亚洲欧美综合区自拍另类| 亚洲成人精品av| 国内偷自视频区视频综合| 色av中文字幕一区| 欧美自拍视频在线观看|