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. 给定一列数字将其平移n位

    原题的意思是给定一个指定长度的数组,然后接受一个数字m,将原数组前m位移动到最后,且顺序不变. 看到这个题,想到的第一个方法就是在用一个数组来储存改变后的数字,代码如下 int func(){ int ...

  2. css 三(清除浮动专题)

    1.  三个关于浮动的概念  不浮动float:none; 清除周围的浮动元素   float:both   这是清除浮动的本意 清除子元素浮动对父元素的影响  clearfix    很多人都理解成 ...

  3. 也记一次性能优化:LINQ to SQL中Contains方法的优化

    距离上一篇博文更新已经两个月过去了.在此,先表一表这两个月干了些啥: 世界那么大,我也想去看看.四月份的时候,我入职了上海的一家电商公司,职位是.NET高级开发工程师.工作一个月,最大的感受是比以前小 ...

  4. Accord.NET入门

    0.序 园子里介绍Accord.NET的文章不少,但是具体讲如何使用的反而不多,可能跟.NET在机器学习领域应用不多有关.诚然,如果做项目的话,可能用Python更好一些,但是如果把了解Accord. ...

  5. 视频H5のVideo标签在微信里的坑和技巧

    随着 4G 的普遍以及 WiFi 的广泛使用,手机上的网速已经足够稳定和高速,以视频为主的 HTML5 也越来越普遍了,相比帧动画,视频的表现更加丰富,前段时间开发了一个以视频为主的移动端 HTML5 ...

  6. Python 实现腾讯新闻抓取

    原文地址:http://www.cnblogs.com/rails3/archive/2012/08/14/2636780.htm 思路: 1.抓取腾讯新闻列表页面: http://news.qq.c ...

  7. Struts2 + MySQL 实现分页

    代码结构: package com.action; import java.util.List; import java.util.Map; import com.bean.Pager; import ...

  8. UVa 221 Urban Elevations 城市正视图 离散化初步 无限化有限

    转载请注明: 仰望高端玩家的小清新 http://www.cnblogs.com/luruiyuan/ 题目大意: 题目传送门:UVa 221 Urban Elevations 给出城市中建筑物的x, ...

  9. Sqli-labs less 3

    Less-3 我们使用?id=' 注入代码后,我们得到像这样的一个错误: MySQL server version for the right syntax to use near "&qu ...

  10. 静态call 动态call LINK

    COBOL的调用可以是静态调用(Static Call),这时,被调用的子程序必须与调用程序一起链接(link-edited)起来形成一个完整的装载模块(Load module),但子程序依然可以单独 ...