日志文章

2019-12-12 aflfte2011

BallGame桌球源码

实现ball小球的直线来回运动。
BallGame.java源码:
import java.awt.*;
import javax.swing.*;
public class BallGame extends JFrame {

Image ball = Toolkit.getDefaultToolkit().getImage("images/ball.png");
Image disk = Toolkit.getDefaultToolkit().getImage("images/disk.jpg");

double x=100;//ball的横坐标
double y=100;//ball的纵坐标
double c=30;//设置ball初始移动速度##源码中没有此代码这是自己想出的实现小球慢慢停止实现代码
boolean right = true;//判断ball的方向

//画窗口的方法
public void paint(Graphics g) {
System.out.println("窗口被画一次!");
g.drawImage(disk, 5, 30, null);
g.drawImage(ball,(int)x,(int)y,null);

c=c-0.05;//源码中没有此代码这是自己想出的实现小球慢慢停止实现代码
if(c > 0) {//当速度小于0时停止运动##源码中没有此代码这是自己想出的实现小球慢慢停止实现代码
if(right) {
x=x + c ;//+后面的数字是指每画一次窗口ball移动的距离##源码中C设置为数值10
}else {
x=x - c;
}
if(x > 613-20-20) {//613是窗口宽度,20是桌面边宽,20是ball的直径
right=false;
}
if(x < 20) {
right=true;
}
}
}

//加载窗口
void launchFrame(){
setSize(613,334);
setLocation(50,50);
setVisible(true);

//重画窗口
while(true) {
repaint();
try {
Thread.sleep(40);//每画完一次窗口暂停40ms,相当于1秒画25次窗口
}catch(Exception e) {
e.printStackTrace();
}

}
}
public static void main(String[] args) {//这里是每个程序都要有的程序入口
BallGame game = new BallGame();
game.launchFrame();
}
}


进阶部分实现小球折线运动
BallGame2.java源码:
import java.awt.*;
import javax.swing.*;//窗口基础
public class BallGame2 extends JFrame {
//加载图片
Image ball = Toolkit.getDefaultToolkit().getImage("images/ball.png");
Image disk = Toolkit.getDefaultToolkit().getImage("images/disk.jpg");

double x=100;//ball的横坐标
double y=100;//ball的纵坐标    类型是小数
double s=30;
double degree = 3.14/3;//弧度,此处设置的是60度

//画窗口的方法
public void paint(Graphics g) {
//System.out.println("窗口被画一次!");
g.drawImage(disk, 5, 30, null);
g.drawImage(ball,(int)x,(int)y,null);//int是小数转为整数
s=s-0.08;
if(s>0) {
x=x+s*Math.cos(degree);
y=y+s*Math.sin(degree);

if(y>334-20-20||y<20+40) {
degree = -degree;//设置角度反转 x
}
if(x>613-20-20||x<20) {
degree = 3.14-degree;//y
}
}
}

//加载窗口
void launchFrame(){
setSize(613,334);
setLocation(50,50);
setVisible(true);

//重画窗口
while(true) {
repaint();
try {
Thread.sleep(40);//每画完一次窗口暂停40ms,相当于1秒画25次窗口
}catch(Exception e) {
e.printStackTrace();
}

}
}
public static void main(String[] args) {
BallGame2 game = new BallGame2();
game.launchFrame();
}
}



« JAVA常量测试源码 | windows 10配置JAVA SE环境方法»