一.MyFrame
public class MyFrame extends Frame { /** * 加载窗口 */ public void launchFrame(){ setSize(Constant.GAME_WIDTH, Constant.GAME_HEIGHT); setLocation(100, 100); setVisible(true); new PaintThread().start(); //启动重画线程 addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { System.exit(0); } }); } 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); } /** * 定义一个重画窗口的线程类,是一个内部类 * @author dell * */ class PaintThread extends Thread { public void run(){ while(true){ repaint();//调用paint(); try { Thread.sleep(40); //1s = 1000ms } catch (InterruptedException e) { e.printStackTrace(); } } } } }
二.游戏工具类 GameUtil
1.获得图片:
private GameUtil(){} //工具类最好将构造器私有了。 public static Image getImage(String path){ BufferedImage bi=null; try { URL u = GameUtil.class.getClassLoader().getResource(path); bi = javax.imageio.ImageIO.read(u); } catch (IOException e) { e.printStackTrace(); } return bi; }
URL u = GameUtil.class.getClassLoader().getResource(path);
类 URL 代表一个统一资源定位符,它是指向互联网“资源”的指针。资源可以是简单的文件或目录,也可以是对更为复杂的对象的引用,例如对数据库或搜索引擎的查询。
bi = javax.imageio.ImageIO.read(u);
从资源定位中读取图片对象,然后就可以使用该图片资源
三.Constant
存放static final 常量
四.Star类
1.成员变量
1 Image img; 2 double x,y; 3 int width,height;
2.成员函数
1 public void draw(Graphics g){ 2 g.drawImage(img, (int)x, (int)y, null); 3 } 4 //.... 5 //一系列构造函数
五.Planet类继承于Star
1.成员变量
//除了图片,坐标。 行星沿着某个椭圆运行:长轴、短轴、速度、角度。 绕着某个Star飞。 double longAxis; //椭圆的长轴 double shortAxis; //椭圆的短轴 double speed; //飞行的速度 double degree; Star center;
2.成员函数
//画行星 public void draw(Graphics g){ super.draw(g); move(); } //画轨道 public void drawTrace(Graphics g){ double ovalX,ovalY,ovalWidth,ovalHeight; ovalWidth = longAxis*2; ovalHeight = shortAxis*2; ovalX = (center.x+center.width/2)-longAxis; ovalY = (center.y+center.height/2)-shortAxis; Color c =g.getColor(); g.setColor(Color.blue); g.drawOval((int)ovalX, (int)ovalY, (int)ovalWidth, (int)ovalHeight); g.setColor(c); } // public void move(){ //沿着椭圆轨迹飞行 x = (center.x+center.width/2) + longAxis*Math.cos(degree); y = (center.y+center.height/2)+ shortAxis*Math.sin(degree); degree += speed; }
六.运行类SolarFrame
public class SolarFrame extends MyFrame { Image bg = GameUtil.getImage("images/bg.jpg"); Star sun = new Star("images/sun.jpg", Constant.GAME_WIDTH/2, Constant.GAME_HEIGHT/2); Planet earth = new Planet(sun, "images/earth.jpg", 150, 100, 0.1); Planet moon = new Planet(earth, "images/moon.jpg", 30, 20, 0.3,true); Planet mars = new Planet(sun, "images/Mars.jpg", 200, 130, 0.2); public void paint(Graphics g){ g.drawImage(bg, 0, 0, null); sun.draw(g); earth.draw(g); mars.draw(g); moon.draw(g); } public static void main(String[] args) { new SolarFrame().launchFrame(); } }