//摘自 尚学堂 百战程序员 Java300集
简化的代码
MyPro01 里 new – Folder – images(与 src 同层)
src – new – class – BallGame
开头导入俩个包
import java.awt.*; //窗口,按钮、文本框
import javax.swing.*; //图形可视包,导入这个包后才能进行GUI图形化软件的开发
BallGame 继承 JFrame
①窗口加载
void launchFrame(){
setSize(856,500); //窗口尺寸
setLocation(50,50); //窗口位置(左上角)
setVisible(true); //显示/隐藏GUI组件的。需要显示则使用true,需要隐藏则使用false。
}
在 main 里创建对象
BallGame game = new BallGame();
game.launchFrame();
②图片加载
ball.png
desk.jpg
//ball、desk俩个对象代表两张图片
Image ball = Toolkit.getDefaultToolkit().getImage("image/ball.png");
Image desk = Toolkit.getDeafultToolkit().getImage("images/desk.png");
//画窗口方法
public void paint(Graphics g){
System.out.println("窗口被画了一次!");
//先画桌面再画小球
g.drawImage(desk,0,0,null); //img,x,y,observer
g.drawImage(ball,100,100,null);
③小球动起来 (关键一步)
//反复画 ball 窗口(在窗口加载项)
while(true){
repaint(); //调用时,再调用 paint 方法
try{
Thread.sleep(40); //40 ms 一秒画25次窗口
}catch(Exception e){
e.printStackTrace();
}
}
//图片加载
double x = 100;
double y = 100;
//画窗口 x = x + 10;
//判断条件
boolean right = true;
//具体判断条件需要计算
if(right){
x = x+10;
}else{
x = x-10;
}
if(x>856){
right = false;
}
if(x<0){
right = true;
}
BallGame 最终代码
import java.awt.*;
import javax.swing.*;
public class BallGame extends JFrame {
//图片加载
Image ball = Toolkit.getDefaultToolkit().getImage("images/ball.png");
Image desk = Toolkit.getDefaultToolkit().getImage("images/desk.jpg");
double x = 100; //小球横坐标
double y = 100; //小球纵坐标
boolean right = true; //方向
//画窗口
public void paint(Graphics g){
System.out.println("窗口被画了一次");
g.drawImage(desk,0,0,null);
g.drawImage(ball,(int)x,(int)y,null);
if(right) {
x = x + 10;
}
else {
x = x - 10;
}
//改变方向
if(x>856-40-30) { //856是窗口宽度,40是桌子边框的宽度,30是小球的直径
right = false;
}
if(x<40) //40是桌子边框的宽度
{
right = true;
}
}
//窗口加载
void launchFrame() {
setSize(856,500);
setLocation(50,50);
setVisible(true);
//反复画窗口 一秒25次
while(true) {
repaint();
try {
Thread.sleep(40);
}catch(Exception e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
BallGame game = new BallGame();
game.launchFrame();
}
}
效果图
BallGame 2 加入弧度机制
double degree = 3.14 / 3; //弧度
x = x + 10 * Math.cos(degree);
y = y + 10 * Math.sin(degree);
//判断条件
if(y>500-40-30||y<40+40){ //小球不能超出桌面宽度,弹回
degree = -degree;
}
if(x<40||x>856-40-30){ //小球不能超出桌面长度,弹回
degree = 3.14 - degree;
}
BallGame2 最终代码
import java.awt.*;
import javax.swing.*;
public class BallGame2 extends JFrame {
//图片加载
Image ball = Toolkit.getDefaultToolkit().getImage("images/ball.png");
Image desk = Toolkit.getDefaultToolkit().getImage("images/desk.jpg");
double x = 100; //小球横坐标
double y = 100; //小球纵坐标
double degree = 3.14/3; //弧度,此处就是60°
//画窗口
public void paint(Graphics g){
System.out.println("窗口被画了一次");
g.drawImage(desk,0,0,null);
g.drawImage(ball,(int)x,(int)y,null);
x = x + 10*Math.cos(degree);
y = y + 10*Math.sin(degree);
//碰到上下边界
if(y>500-40-30||y<40+40) { //500是窗口高度,40是桌子边框,30是球直径,还有一个40是标题栏高度
degree = -degree;
}
//碰到左右边界
if(x<40||x>856-40-30) {
degree = 3.14 - degree;
}
}
//窗口加载
void launchFrame() {
setSize(856,500);
setLocation(50,50);
setVisible(true);
//反复画窗口 一秒25次
while(true) {
repaint();
try {
Thread.sleep(40);
}catch(Exception e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
BallGame2 game = new BallGame2();
game.launchFrame();
}
}
效果图