下面的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相关推荐

  1. 手把手教你做一个Java贪吃蛇小游戏

    大家好,我是孙不坚1208,这篇博客给大家分享一下:如何做一个贪吃蛇小游戏(Java版)的exe应用程序,希望能给需要帮助的朋友带来方便. 手把手教你做一个Java贪吃蛇小游戏的exe应用程序 一.J ...

  2. 不愧是大厂牛人!用Java实现象棋小游戏(附超详细,超长究极无敌代码)

    本文实例为大家分享了java实现象棋小游戏的具体代码,供大家参考,具体内容如下 用Eclipse编写 java环境1.8jdk 代码如下 package xiangqi象棋; /***中国象棋Java ...

  3. JAVA实现2048小游戏

    2048小游戏也算是一款好玩的益智休闲小游戏,下面本博主用 java 语言将该游戏复现,感兴趣的小伙伴点击 关注 哦! 同时博主还用 python 语言复现了该游戏,可点击以下链接浏览博主的另一篇文章 ...

  4. Java Swing 经典小游戏《飞机大战》———— (四)碰撞检测 游戏状态与得分 玩家升级

    前期回顾 Java Swing 经典小游戏<飞机大战>---- (一)获取素材,创建窗口,添加滚动背景,双缓冲 Java Swing 经典小游戏<飞机大战>---- (二)玩家 ...

  5. Java实现五子棋小游戏(附源码)

    今天给大家分享一个用java写的小游戏--<五子棋> (完整代码可在[资源下载]目录查看) . 推荐学习专栏: Java基础学习专栏:[Java]基础篇 Java进阶学习专栏:[Java] ...

  6. Java编写五子棋小游戏

    Java编写五子棋小游戏 代码如下: package org.liky.game.frame; import java.awt.Color; import java.awt.Font; import ...

  7. Java写五子棋小游戏

    Java写五子棋小游戏 最近用Java写了个五子棋小游戏,遇到了许多细节问题,在此不得不总结一下,以便有同样需求朋友参考. 1.]面板发生变化,重绘棋盘与棋局问题: 必须调用父类的paint方法,因为 ...

  8. java毕业设计网页小游戏交流论坛源码+lw文档+mybatis+系统+mysql数据库+调试

    java毕业设计网页小游戏交流论坛源码+lw文档+mybatis+系统+mysql数据库+调试 java毕业设计网页小游戏交流论坛源码+lw文档+mybatis+系统+mysql数据库+调试 本源码技 ...

  9. java对拼图小游戏的简单实现(详解)

    使用Java编写拼图小游戏主要包括: 初始化界面 初始化菜单 初始化数据 初始化图片 其他必要功能的实现 这几部分.在进行细分时包括了菜单的搭建,添加图片,打乱图片位置,让图片移动起来,查看完整图片, ...

最新文章

  1. docker-compose 简介以及常用命令
  2. 简单粗暴方便好用树莓派FTP远程文件服务器
  3. 微型计算机技术习题,微型计算机技术课后习题一二三章答案
  4. feach同步 git_git fetch 更新远程代码到本地仓库
  5. IPSec之security acl
  6. android 开源病毒库,ClamAV+ClamTK,开源杀毒软件
  7. 正点原子STM32f4系列其他串口通信失败问题解决
  8. 高等数学(第七版)同济大学 习题1-8 个人解答
  9. VMware虚拟机安装使用及系统安装教程
  10. EVO自动处理SLAM数据脚本
  11. shift键计算机功能,电脑shift键常用快捷键使用攻略
  12. 离职前需要注意的事情?
  13. 都说谷歌浏览器翻译插件好用,这些必不可少
  14. 【Unity Editor编辑器】 代码获取project面板选中资源路径(自定义右键菜单)
  15. python爬虫获取网站销售情况(内置源码)
  16. python独立样本t检验 图_Python-两独立样本资料t检验
  17. 【建议收藏】6款高质量Windows软件,好用到无法拒绝
  18. Qt 免注册版本下载
  19. hdu-7113 Matrix 组合数学(计算贡献
  20. Python网络数据采集9(译者:哈雷)

热门文章

  1. P8400 [CCC 2022 J1] Cupcake Party
  2. Redis入门(五):Redis set命令和 Redis zset命令
  3. 王者荣耀为何如此受欢迎
  4. 使用光纤网络安装监控摄像头的6套方案
  5. onbeforeunload与onunload事件总结:
  6. 承包商在工程结算争议里能扭转乾坤的几点
  7. IP网络电话呼叫转移设置
  8. 《一道论证题》by孙宇晨
  9. 计算机图形学五角星c语言,计算机图形学五角星的裁剪代码
  10. 基于FFmpeg实现屏幕录制