实现小球在球桌上任意角度滚动,有边缘碰撞
未实现摩擦力、球杆、小球进洞等
素材:
desk.png
ball.png
代码:
import java.awt.*;
import javax.swing.JFrame;
public class BallGame extends JFrame{
//加载图片
Image ball=Toolkit.getDefaultToolkit().getImage("images/ball.png");
Image desk=Toolkit.getDefaultToolkit().getImage("images/desk.png");
//设置小球的起始位置
double x=50;
double y=50;
/*
boolean right=true; //控制小球的水平位移方向
//绘制窗口
public void paint(Graphics g) {
System.out.println("窗口被画了一次");
g.drawImage(desk,10,25,null);
g.drawImage(ball, (int)x, (int)y, null);
if(right){
x=x+10;
}else {
x=x-10;
}
//设置边界
if(x>880-40-20)
right=false;
if(x<0+40)
right=true;
}
*/
double degree =3.14/3;//弧度。3.14=180° 60°
//绘制窗口
public void paint(Graphics g) {
System.out.println("窗口被画了一次");
g.drawImage(desk,10,25,null);
g.drawImage(ball, (int)x, (int)y, null);
x=x+10*Math.cos(degree);
y=y+10*Math.sin(degree);
//碰到上下边界
if(y>520-40-20||y<53)
degree=-degree;
//碰到左右边界
if(x>880-40-15||x<32)
degree =3.14-degree;
}
//窗口加载
void launchFrame() {
setSize(880,520); //设置窗口的宽和高
setLocation(200,200); //设置窗口在屏幕中出现的位置
setVisible(true);
//this.setVisible(false);
//隐藏当前窗体,如果当前窗体Frame的名为f则写成:f.setVisible(false);
//实现动画,每秒绘制窗口25次
while(true) {
repaint();
try {
Thread.sleep(40);
} catch (InterruptedException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}
//main方法
public static void main(String[]args) {
System.out.println("游戏开始!");
BallGame game=new BallGame();
game.launchFrame();
}
}