Java小案例(行星移动)
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小案例(行星移动)的更多相关文章
- Java小案例-(逃离迷宫)
Java小案例-(逃离迷宫) 一,迷宫需求描述: 1,用户输入迷宫图(限制方形):字母1位墙,0为通,e为出口,m为入口,*为已访问的位置,用外围1围住迷宫 2,运行轨迹右,左,下,上 3,判断该迷宫 ...
- 《java入门第一季》之类小案例(模拟用户登录)
首先是做一个用户登录的小案例.在此基础上加入其它逻辑. import java.util.Scanner; /* * 模拟登录,给三次机会,并提示还有几次.如果登录成功,就可以玩猜数字小游戏了. * ...
- Session与Cookie的原理以及使用小案例>从零开始学JAVA系列
目录 Session与Cookie的原理以及使用小案例 Cookie和Session所解决的问题 Session与Cookie的原理 Cookie的原理 Cookie的失效时机 小提示 Session ...
- 《java入门第一季》之Character类小案例
/* * Character 类在对象中包装一个基本类型 char 的值 * 此外,该类提供了几种方法,以确定字符的类别小写字母,数字,等等,并将字符从大写转换成小写,反之亦然 * */ 下面通 ...
- 02SpringMvc_springmvc快速入门小案例(XML版本)
这篇文章中,我们要写一个入门案例,去整体了解整个SpringMVC. 先给出整个项目的结构图:
- Java小例子(学习整理)-----学生管理系统-控制台版
1.功能介绍: 首先,这个小案例没有使用数据库,用集合的形式暂时保存数据,做测试! 功能: 增加学生信息 删除学生信息 修改学生信息 查询学生信息: 按照学号(精确查询) 按照姓名(模糊查询) 打 ...
- Session小案例------完成用户登录
Session小案例------完成用户登录 在项目开发中,用户登陆功能再平常只是啦,当用户完毕username和password校验后.进入主界面,须要在主界面中显示用户的信息,此时用ses ...
- MVC 小案例 -- 信息管理
前几次更新博客都是每次周日晚上到周一,这次是周一晚上开始写,肯定也是有原因的!那就是我的 Tomact 忽然报错,无法启动,错误信息如下!同时我的 win10 也崩了,重启之后连 WIFI 的标志也不 ...
- JAVA实用案例之文件导出(JasperReport踩坑实录)
写在最前面 想想来新公司也快五个月了,恍惚一瞬间. 翻了翻博客,因为太忙,也有将近五个多月没认真总结过了. 正好趁着今天老婆出门团建的机会,记录下最近这段时间遇到的大坑-JasperReport. 六 ...
随机推荐
- react-router 4.0 升级攻略
react-router 4.0 出来好9了,项目在4月份的时候对react-router进行了升级,升级耗费了3天,一个坑一个坑踩了过来. 按照公司项目情况说下升级改了哪些,项目使用的是hashHi ...
- 使用css中的flex布局弹性手风琴效果
不多说,直接上代码. <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...
- 【剑指offer】面试题 5. 替换空格
面试题 5. 替换空格 题目:请实现一个函数,将一个字符串中的空格替换成"%20".例如,当字符串为We Are Happy. 则经过替换之后的字符串为We%20Are%20Hap ...
- onethink 路由规则无效问题解决
修改文件 Application/Common/Conf/config.php 打开注释 //'MODULE_ALLOW_LIST' => array('Home','Admin'), // 1 ...
- Codeforces 429 B. Working out-dp( Codeforces Round #245 (Div. 1))
B. Working out time limit per test 2 seconds memory limit per test 256 megabytes input standard inpu ...
- PAT L3-011. 直捣黄龙
最短路. 先求出一个只包含最短路的$DAG$,然后在$DAG$上$dp$一下就可以了.英文变数字还有$map$转一下. #include<map> #include<set> ...
- Protocol Buffers 在前端项目中的使用
前言: 公司后端使用的是go语言,想尝试用pb和前端进行交互,于是便有了这一次尝试,共计花了一星期时间,网上能查到的文档几乎都看了一遍,但大多都是教在node环境下如何使用,普通的js环境下很多讲述的 ...
- JavaWeb中常见的乱码处理(亲测)
常见编码方式: ISO-8859-1 西欧码 GB2312 简体中文码 GBK 大五码 UTF-8 全球码(推荐) 1.页面(HTML,JSP,Servlet) <%@ page lan ...
- android studio安卓工作室 工具栏
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha android studio安卓工作室 工具栏 都有什么 . 打开.保存全部.刷新.撤 ...
- [P4064][JXOI2017]加法(贪心+树状数组+堆)
题目描述 可怜有一个长度为 n 的正整数序列 A,但是她觉得 A 中的数字太小了,这让她很不开心. 于是她选择了 m 个区间 [li, ri] 和两个正整数 a, k.她打算从这 m 个区间里选出恰好 ...