java solarsystem,桌面小游戏二:模拟太阳系solarSystem
下面的3个类都在包cn.bjsxt.util中
1,Constant.java 中程序如下:
package cn.bjsxt.util;
public class Constant {
public static final int GAME_WIDTH = 800;
public static final int GAME_HEIGHT = 600;
}
2,GameUtil.java 中程序如下:
package cn.bjsxt.util;
import java.awt.Image;
import java.io.IOException;
import java.net.URL;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
public class GameUtil {
private GameUtil(){} //工具类将构造函数私有
public static Image GetImage(String
path){
URL u =
GameUtil.class.getClassLoader().getResource(path);
BufferedImage img = null;
try{
img =
ImageIO.read(u);
}catch (IOException e){
e.printStackTrace();
}
return img;
}
}
3,MyFrame.java中程序如下:
package cn.bjsxt.util;
import java.awt.Frame;
import java.awt.Image;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
//import cn.bjsxt.test.GameFrame.PaintThread;
public class MyFrame extends Frame{
public void launchFrame(){
setSize(Constant.GAME_WIDTH,
Constant.GAME_HEIGHT);
setLocation(100, 100);
setVisible(true);
addWindowListener(new
WindowAdapter(){
@Override
public void
windowClosed(WindowEvent e) {
System.exit(0);
} });
new
PaintThread().start();//启动重画线程
}
class PaintThread extends
Thread{
public void
run(){
while(true){
repaint();
try{
Thread.sleep(200);
}
catch (InterruptedException e){
e.printStackTrace();
}
}
}
}
}
下面的类都在包cn.bjsxt.solar中
4,Planet.java 中程序如下:
package cn.bjsxt.solar;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import cn.bjsxt.util.GameUtil;
public class Planet extends Star {
//除了star中拥有的图片,坐标外,行星沿着椭圆运行:长轴,短轴,速度,角度绕着一个star飞
double longAxis;//长轴
double shortAxis;//短轴
double speed;//速度
double degree;
Star center;
boolean satellite;
public void draw(Graphics g){
//g.drawImage(img, (int)x,
(int)y, null);
super.draw(g);
if (!satellite){
drawTrace(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);
}
//
center.width/2 center.height/2
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;
}
public Planet(String imgpath, double
longAxis,
double
shortAxis, double speed, Star center) {
super(GameUtil.GetImage(imgpath));
this.x = center.x +
longAxis;
this.y = center.y;
//this.img =
GameUtil.GetImage(imgpath);
this.longAxis = longAxis;
this.shortAxis =
shortAxis;
this.speed = speed;
this.center = center;
}
//?????理论上来说,应该先有构造基类构造函数的情况,但是上面基类的x,
y,都没有构造???/??//star中有个默认构造函数,理解成直接调用不用参数的默认构造函数了????其实super还是调用了
public Planet(String imgpath, double
longAxis,
double
shortAxis, double speed, Star center, boolean satellite) {
this(imgpath, longAxis,
shortAxis, speed, center);
this.satellite =
satellite;
}
//??????/、/?//下面两个函数没有调用??????/?//下面测试当我注释掉时整个程序是可以运行的
public Planet(Image img, double x, double
y){
super(img, x, y);
}
public Planet(String imgpath, double x, double
y){
super(imgpath, x, y);
}
}
5, star.java 中程序如下:
package cn.bjsxt.solar;
import java.awt.Graphics;
import java.awt.Image;
import cn.bjsxt.util.GameUtil;
public class Star {
Image img;
double x, y;
int width, height;
public void draw(Graphics g){
g.drawImage(img, (int)x,
(int)y, null);
}
public Star(){}
public Star(Image img){
this.img = img;
this.width =
img.getWidth(null);
this.height =
img.getHeight(null);
}
public Star(Image img, double x, double y){
//this.img = img;
this(img);
this.x = x;
this.y = y;
//this.width =
img.getWidth(null);
//this.height =
img.getHeight(null);
}
public Star(String imgpath, double x, double
y){
this(GameUtil.GetImage(imgpath),
x, y);
}
}
6, solarFrame.java 中程序如下
package cn.bjsxt.solar;
import java.awt.Graphics;
import java.awt.Image;
import cn.bjsxt.util.Constant;
//import cn.bjsxt.test.MyFrame.PaintThread;
import cn.bjsxt.util.GameUtil;
import cn.bjsxt.util.MyFrame;
public class solarFrame extends MyFrame {
Image bg =
GameUtil.GetImage("images/bg4.jpg");
//????有一个疑问,此处Image类怎么可以自动调用???,难道是下面主函数中创建new出solarFrame对象时会自动调用???一般是从主函数开始啊,主函数调用继承自MyFrame的launchFrame()
//该方法中规定了加载窗口的一些内容,包括起始位置,长宽等参数,同时该方法类中调用了 new PaintThread().start();//启动重画线程
//然后在同一个类中调用 class PaintThread extends
Thread,其中有repaint()函数调用,即会自动调用太阳主窗口中下面的paint方法,并在while循环中线程会每隔一段时间调用一次,实现动态效果
Star sun = new Star("images/sun5.jpg",
Constant.GAME_HEIGHT/1.5, Constant.GAME_WIDTH/2.8);
Planet earth = new Planet( "images/planet.jpg",
150, 100, 0.1, sun);
Planet moon = new Planet( "images/planet.jpg",
25, 10, 0.3, earth, true);
Planet mars = new Planet( "images/planet.jpg",
200, 130, 0.2, sun);
public void paint(Graphics g){
g.drawImage(bg,
0, 0, null);
sun.draw(g);
earth.draw(g);
moon.draw(g);
mars.draw(g);
}
public static void main(String[] args){
new
solarFrame().launchFrame();
}
//?????????利用双缓冲技术解决背景屏幕经常闪烁的问题
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);
}
}
运行效果如下:
java solarsystem,桌面小游戏二:模拟太阳系solarSystem相关推荐
- 手把手教你做一个Java贪吃蛇小游戏
大家好,我是孙不坚1208,这篇博客给大家分享一下:如何做一个贪吃蛇小游戏(Java版)的exe应用程序,希望能给需要帮助的朋友带来方便. 手把手教你做一个Java贪吃蛇小游戏的exe应用程序 一.J ...
- 不愧是大厂牛人!用Java实现象棋小游戏(附超详细,超长究极无敌代码)
本文实例为大家分享了java实现象棋小游戏的具体代码,供大家参考,具体内容如下 用Eclipse编写 java环境1.8jdk 代码如下 package xiangqi象棋; /***中国象棋Java ...
- JAVA实现2048小游戏
2048小游戏也算是一款好玩的益智休闲小游戏,下面本博主用 java 语言将该游戏复现,感兴趣的小伙伴点击 关注 哦! 同时博主还用 python 语言复现了该游戏,可点击以下链接浏览博主的另一篇文章 ...
- Java Swing 经典小游戏《飞机大战》———— (四)碰撞检测 游戏状态与得分 玩家升级
前期回顾 Java Swing 经典小游戏<飞机大战>---- (一)获取素材,创建窗口,添加滚动背景,双缓冲 Java Swing 经典小游戏<飞机大战>---- (二)玩家 ...
- Java实现五子棋小游戏(附源码)
今天给大家分享一个用java写的小游戏--<五子棋> (完整代码可在[资源下载]目录查看) . 推荐学习专栏: Java基础学习专栏:[Java]基础篇 Java进阶学习专栏:[Java] ...
- Java编写五子棋小游戏
Java编写五子棋小游戏 代码如下: package org.liky.game.frame; import java.awt.Color; import java.awt.Font; import ...
- Java写五子棋小游戏
Java写五子棋小游戏 最近用Java写了个五子棋小游戏,遇到了许多细节问题,在此不得不总结一下,以便有同样需求朋友参考. 1.]面板发生变化,重绘棋盘与棋局问题: 必须调用父类的paint方法,因为 ...
- java毕业设计网页小游戏交流论坛源码+lw文档+mybatis+系统+mysql数据库+调试
java毕业设计网页小游戏交流论坛源码+lw文档+mybatis+系统+mysql数据库+调试 java毕业设计网页小游戏交流论坛源码+lw文档+mybatis+系统+mysql数据库+调试 本源码技 ...
- java对拼图小游戏的简单实现(详解)
使用Java编写拼图小游戏主要包括: 初始化界面 初始化菜单 初始化数据 初始化图片 其他必要功能的实现 这几部分.在进行细分时包括了菜单的搭建,添加图片,打乱图片位置,让图片移动起来,查看完整图片, ...
最新文章
- docker-compose 简介以及常用命令
- 简单粗暴方便好用树莓派FTP远程文件服务器
- 微型计算机技术习题,微型计算机技术课后习题一二三章答案
- feach同步 git_git fetch 更新远程代码到本地仓库
- IPSec之security acl
- android 开源病毒库,ClamAV+ClamTK,开源杀毒软件
- 正点原子STM32f4系列其他串口通信失败问题解决
- 高等数学(第七版)同济大学 习题1-8 个人解答
- VMware虚拟机安装使用及系统安装教程
- EVO自动处理SLAM数据脚本
- shift键计算机功能,电脑shift键常用快捷键使用攻略
- 离职前需要注意的事情?
- 都说谷歌浏览器翻译插件好用,这些必不可少
- 【Unity Editor编辑器】 代码获取project面板选中资源路径(自定义右键菜单)
- python爬虫获取网站销售情况(内置源码)
- python独立样本t检验 图_Python-两独立样本资料t检验
- 【建议收藏】6款高质量Windows软件,好用到无法拒绝
- Qt 免注册版本下载
- hdu-7113 Matrix 组合数学(计算贡献
- Python网络数据采集9(译者:哈雷)