java_2017.10.30_行星的转动

来源:互联网 发布:win8的mac地址怎么查 编辑:程序博客网 时间:2024/05/20 08:27


行星的转动

首先一个整体的框架:建立名称为circle的Java Project,在src下建立包名为ex01的包。

第一次写的这个没有用到集合,用了有很大瑕疵的数组。

1.GameFrame.java(游戏框架)

package ex01;import java.awt.Color;import java.awt.Frame;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;public class GameFrame extends Frame {private static final long serialVersionUID = 1L;public void loadFrame() {this.setSize(800, 800);this.setVisible(true);this.setTitle("行星的转动");this.setBackground(Color.black);addWindowListener(new WindowAdapter() {@Overridepublic void windowClosing(WindowEvent e) {System.exit(0);}});new PaintThread().start();}class PaintThread extends Thread {public void run() {while (true) {repaint();try {sleep(30);// 线程执行过程中会睡眠,当睡眠时间到期,则返回到可运行状态。} catch (InterruptedException e) {e.printStackTrace();}}}}}


2.Planet.java(中心行星类)

package ex01;import java.awt.Color;import java.awt.Graphics;public class Planet {int x, y;int radius;Color color;public Planet(int x, int y, int radius, Color color) {super();this.x = x;this.y = y;this.radius = radius;this.color = color;}/*public Planet(int x, int y, int radius) {super();this.x = x;this.y = y;this.radius = radius;this.color = Color.BLACK;}*/public void drawme(Graphics g) {g.setColor(this.color);g.fillOval(this.x - radius, this.y - radius, this.radius * 2,this.radius * 2);//在这里的x、y均为中心星体圆心的x、y坐标}}


3.Star.java(绕行的行星类)

package ex01;import java.awt.Color;import java.awt.Graphics;public class Star extends Planet {// 角速度double speed;// 轨道半径double dist;// 起始角度double deg = 0;// 中心点 以某个星体为中心Planet center;public Star(int radius, Color color, double speed, double dist,Planet center) {super(0, 0, radius, color);this.dist = dist;this.speed = speed;this.center = center;}// 重写 画自己public void drawme(Graphics g) {        //这里的x、y代表圆心的坐标。this.x = center.x+ (int) (this.dist * Math.cos(deg));this.y = center.y+ (int) (this.dist * Math.sin(deg));// 角度增加this.deg += speed;// 画笔设置颜色g.setColor(this.color);g.fillOval(this.x - this.radius, this.y - this.radius, this.radius * 2,this.radius * 2);// 画轨道g.drawOval(center.x - (int) dist, center.y- (int) dist, (int) dist * 2,(int) dist * 2);// //这里的x、y代表圆心的坐标。}}


4.PlanetFrame.java(主窗口类)

package ex01;import java.awt.Color;import java.awt.Graphics;public class PlanetFrame extends GameFrame {private static final long serialVersionUID = 1L;Planet[] planets = new Planet[3];Star[] star = new Star[3];// 加入中心行星public void addPlanet() {int j = 0;for (int i = 0; i < 3; i++) {planets[i] = new Planet(230 + j, 250 + j, 50, Color.red);j += 100;}}//加入环绕行星public void addStar() {for (int i = 0; i < 3; i++) {star[i] = new Star(40, Color.blue, 0.1d, 200d, planets[i]);}}    //必须要写构造方法,调用add的方法,否则就会planets[]为空。public PlanetFrame() {this.addPlanet();this.addStar();}@Override// 重写public void paint(Graphics g) {for (int i = 0; i < 3; i++) {planets[i].drawme(g);star[i].drawme(g);}}}


5.MyPlantGame.java(程序运行的入口类)

package ex01;public class MyPlantGame {public static void main(String[] args) {PlanetFrame pframe = new PlanetFrame();pframe.loadFrame();}}




1.GameFrame.java(游戏框架) :同上
2.Planet.java(中心行星类)

package ex01;import java.awt.Color;import java.awt.Graphics;class Planet implements Body {int x, y;int radius;Color color;public Planet(int x, int y, int radius, Color color) {super();this.x = x;this.y = y;this.radius = radius;this.color = color;}public Planet(int x, int y, int radius) {super();this.x = x;this.y = y;this.radius = radius;this.color = Color.BLACK;} public void drawme(Graphics g) {g.setColor(this.color);//这里的x、y表示圆形左上角的坐标g.fillOval(this.x, this.y, this.radius * 2,this.radius * 2);}}


3.Star.java(绕行的行星类)

package ex01;import java.awt.Color;import java.awt.Graphics;public class Star extends Planet {// 角速度double speed;// 轨道半径double dist;// 起始角度double deg = 0;// 中心点 以某个星体为中心Planet center;public Star(int radius, Color color, double speed, double dist,Planet center) {super(0, 0, radius, color);this.dist = dist;this.speed = speed;this.center = center;}// 重写 画自己public void drawme(Graphics g) {this.x = center.x+ (int) (this.dist * Math.cos(deg));this.y = center.y+ (int) (this.dist * Math.sin(deg));// 角度增加this.deg += speed;// 画笔设置颜色,画绕行星体g.setColor(this.color);g.fillOval(this.x, this.y, this.radius * 2,this.radius * 2);// 画轨道g.drawOval(center.x - (int) dist+center.radius, center.y- (int) dist +center.radius, (int) dist * 2,(int) dist * 2); }}

4.Body(定义一个接口Body)

package ex01;import java.awt.Graphics;//接口public interface Body {// 画自己void drawme(Graphics g);}


5.PlanetFrame.java(主窗口类)

package ex01;import java.awt.Graphics;import java.util.ArrayList;public class PlanetFrame extends GameFrame {private static final long serialVersionUID = 1L;// 集合-ArrayList-所有行星的集合ArrayList<Body> plantList = new ArrayList<Body>();// 加入行星public void addPlanet(Body p) {this.plantList.add(p);}@Override// 重写public void paint(Graphics g) {// 遍历plantList,调用drawme()方法for (int i = 0; i < plantList.size(); i++) {plantList.get(i).drawme(g);}}}


6.MyPlantGame.java(程序运行的入口类)

package ex01;import java.awt.Color;public class MyPlantGame {public static void main(String[] args) {PlanetFrame pframe = new PlanetFrame();pframe.loadFrame();Planet p1 = new Planet(380, 350, 60, Color.red);pframe.addPlanet(p1);// Planet p2 = new Planet(300, 300, 100);Star s1 = new Star(40, Color.blue, 0.1d, 200d, p1);pframe.addPlanet(s1);Star s2 = new Star(30, Color.yellow, 0.2d, 100d, s1);pframe.addPlanet(s2);}}