Java小案例

行星移动:参考:三百集

使用软件:idea2017,java

1,图片集:这里  (idea图片源放在target目录下,才能访问到),建议从小往上看。。。

2,定义MyFrame

package my.university;

import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class MyFrame extends Frame { public void launchFram(){ setSize(Content.Game_With,Content.Game_High);
setLocation(100,100);
setVisible(true); new PaintThread().start(); addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
private class PaintThread extends Thread{
public void run(){
while(true){
repaint();
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
} }

2,定义ImageUtil类:

package my.university;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL; public class ImageUtil {
private ImageUtil(){}//工具类构成私有的,? public static Image getImage(String path){
URL url=ImageUtil.class.getResource(path);
/*System.out.println(ImageUtil.class.getClassLoader().getResource(""));
result is file:/d:/xxxxx/sparkDemo/sparksql/target/classes/*/
BufferedImage image =null;
try {
image=ImageIO.read(url);
} catch (IOException e) {
e.printStackTrace();
}
return image;
}
}

3,定义常量类,相当于配置文件

package my.university;
public class Content {
public static final int Game_With=500;
public static final int Game_High=500;
}

4,定义Start类

package my.university;

import java.awt.*;

public class Start {
public double x;
public double y;
public double with;
public double height;
Image image; public Start(){}//默认构造起,用于子类继承 public Start(Image image){
this.image=image;
this.with=image.getWidth(null);
this.height=image.getHeight(null);
}
public Start(Image image,double x,double y){
this(image);
this.x=x;
this.y=y;
}
public Start(String path,double x,double y){
this(ImageUtil.getImage(path),x,y);
} public void draw(Graphics g){
g.drawImage(image,(int)x,(int)y,null);
} }

5,定义Plant类

package my.university;

import java.awt.*;

/**
* Created by Administrator on 2017/8/12.
*/
public class Plant extends Start {
double longAxis; //椭圆的长轴
double shortAxis; //椭圆的短轴
double speed; //飞行的速度
double degree;
Start center;
boolean statellite; public Plant(){}
public Plant(Start center,String path,double longAxis,double shortAxis,double speed){
super(ImageUtil.getImage(path)); this.center=center;
this.x=center.x+longAxis;
this.y=center.y; this.longAxis=longAxis;
this.shortAxis=shortAxis;
this.speed=speed;;
}
public Plant(Start center,String path,double longAxis,double shortAxis,double speed,Boolean statellite){
this(center, path, longAxis, shortAxis, speed);
this.statellite=statellite;
} public Plant(Image image){
super(image);
}
public Plant(Image image,double x,double y){
super(image, x, y);
} //画轨迹
public void drawTrace(Graphics g){
double ovalX,ovalY,ovalWidth,ovalHeight; ovalWidth = longAxis*2;
ovalHeight = shortAxis*2;
ovalX = (center.x+center.with/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.with/2+longAxis*Math.cos(degree);
y=center.y+center.height/2+shortAxis*Math.sin(degree);
degree+=speed;
} public void draw(Graphics g){
super.draw(g);
move();
if(!statellite){
drawTrace(g);
} } }

6,定以调用类

package my.university;

import java.awt.*;
public class SolarFrame extends MyFrame {
Image bg=ImageUtil.getImage("images/bg.jpg");
Start sun=new Start("images/sun.jpg",Content.Game_With/2,Content.Game_High/2);
Plant mercurys = new Plant(sun, "images/Mercury.jpg", 50, 30, 0.2);
Plant venus = new Plant(sun, "images/Venus.jpg", 60, 40, 0.3);
Plant earth=new Plant(sun,"images/Earth.jpg",100,50,0.4);
Plant mars = new Plant(sun, "images/Mars.jpg", 120, 60, 0.5);
Plant jupiter = new Plant(sun, "images/jupiter.jpg", 140, 70, 0.6);
Plant saturn =new Plant(earth,"images/Saturn.jpg",160,80,0.7,true);
Plant uranus = new Plant(sun, "images/Uranus.jpg", 180, 90, 0.8);
Plant neptune = new Plant(sun, "images/Neptune.jpg", 200, 100, 0.9);
Plant moon = new Plant(earth, "images/moon.jpg", 30, 20, 0.3,true);
public void paint(Graphics g){
g.drawImage(bg,0,0,null); sun.draw(g);
mercurys.draw(g);
venus.draw(g);
earth.draw(g);
mars.draw(g);
jupiter.draw(g);
saturn.draw(g);
uranus.draw(g);
neptune.draw(g);
moon.draw(g);
}
public static void main(String[] args){
new SolarFrame().launchFram();
}
}

最后附上代码

Java小案例(行星移动)的更多相关文章

  1. Java小案例-(逃离迷宫)

    Java小案例-(逃离迷宫) 一,迷宫需求描述: 1,用户输入迷宫图(限制方形):字母1位墙,0为通,e为出口,m为入口,*为已访问的位置,用外围1围住迷宫 2,运行轨迹右,左,下,上 3,判断该迷宫 ...

  2. 《java入门第一季》之类小案例(模拟用户登录)

    首先是做一个用户登录的小案例.在此基础上加入其它逻辑. import java.util.Scanner; /* * 模拟登录,给三次机会,并提示还有几次.如果登录成功,就可以玩猜数字小游戏了. * ...

  3. Session与Cookie的原理以及使用小案例>从零开始学JAVA系列

    目录 Session与Cookie的原理以及使用小案例 Cookie和Session所解决的问题 Session与Cookie的原理 Cookie的原理 Cookie的失效时机 小提示 Session ...

  4. 《java入门第一季》之Character类小案例

    /*  * Character 类在对象中包装一个基本类型 char 的值  * 此外,该类提供了几种方法,以确定字符的类别小写字母,数字,等等,并将字符从大写转换成小写,反之亦然  * */ 下面通 ...

  5. 02SpringMvc_springmvc快速入门小案例(XML版本)

    这篇文章中,我们要写一个入门案例,去整体了解整个SpringMVC. 先给出整个项目的结构图:

  6. Java小例子(学习整理)-----学生管理系统-控制台版

    1.功能介绍: 首先,这个小案例没有使用数据库,用集合的形式暂时保存数据,做测试! 功能: 增加学生信息 删除学生信息 修改学生信息 查询学生信息:  按照学号(精确查询)  按照姓名(模糊查询) 打 ...

  7. Session小案例------完成用户登录

    Session小案例------完成用户登录     在项目开发中,用户登陆功能再平常只是啦,当用户完毕username和password校验后.进入主界面,须要在主界面中显示用户的信息,此时用ses ...

  8. MVC 小案例 -- 信息管理

    前几次更新博客都是每次周日晚上到周一,这次是周一晚上开始写,肯定也是有原因的!那就是我的 Tomact 忽然报错,无法启动,错误信息如下!同时我的 win10 也崩了,重启之后连 WIFI 的标志也不 ...

  9. JAVA实用案例之文件导出(JasperReport踩坑实录)

    写在最前面 想想来新公司也快五个月了,恍惚一瞬间. 翻了翻博客,因为太忙,也有将近五个多月没认真总结过了. 正好趁着今天老婆出门团建的机会,记录下最近这段时间遇到的大坑-JasperReport. 六 ...

随机推荐

  1. 数据库SQL调优之"执行计划"【未完待续】

    什么是“执行计划”?“执行计划”怎么用于SQL调优? 内容待添加... 参考文章: [1]写SQL要学会使用"执行计划" by 鹏霄万里展雄飞      

  2. jdk1.6错误:no such provider: BC jdk1.6支持SSL问题

    程序调用https请求,由于jdk1.6只支持1024的DH,需要调整 1.在$JAVA_HOME/jre/lib/ext 下添加加密组件包 bcprov-jdk15on-1.52.jar和bcpro ...

  3. 洛谷——P1680 奇怪的分组

    P1680 奇怪的分组 题目背景 终于解出了dm同学的难题,dm同学同意帮v神联络.可dm同学有个习惯,就是联络同学的时候喜欢分组联络,而且分组的方式也很特别,要求第i组的的人数必须大于他指定的个数c ...

  4. 【LA 3641】 Leonardo's Notebook (置换群)

    [题意] 给出26个大写字母组成 字符串B问是否存在一个置换A使得A^2 = B [分析] 置换前面已经说了,做了这题之后有了更深的了解. 再说说置换群.   首先是群. 置换群的元素是置换,运算时是 ...

  5. 最优贸易 NOIP 2009 提高组 第三题

    题目描述 C 国有 n 个大城市和 m 条道路,每条道路连接这 n 个城市中的某两个城市.任意两个 城市之间最多只有一条道路直接相连.这 m 条道路中有一部分为单向通行的道路,一部分 为双向通行的道路 ...

  6. 2017icpc 乌鲁木齐网络赛

    A .Banana Bananas are the favoured food of monkeys. In the forest, there is a Banana Company that pr ...

  7. 【字符串哈希】【哈希表】Aizu - 1370 - Hidden Anagrams

    给你两个4k长度的串,问你最长公共子串.两个子串相同被定义为所有字母的出现次数分别相同即可. 就枚举第一个串的所有子串,将字母出现的次数看作一个大数,进行哈希(双关键字),塞到哈希表里面.然后枚举第二 ...

  8. 【后缀自动机】hihocoder1441 后缀自动机一·基本概念

    时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi:今天我们来学习一个强大的字符串处理工具:后缀自动机(Suffix Automaton,简称SAM).对于一个字符串 ...

  9. 【最优比率生成树】poj2728 Desert King

    最优比率生成树教程见http://blog.csdn.net/sdj222555/article/details/7490797 个人觉得很明白易懂,但他写的代码略囧. 模板题,但是必须Prim,不能 ...

  10. 【SPFA】POJ3259-Wormhole

    普通的SPFA的负环判定.犯了三个错误,全部写在注释里了. #include<iostream> #include<cstdio> #include<cstring> ...