模拟台球运动

package game;

/**
* 球桌的像素为856*486
* 球的像素为30*30
* 网上搜索球桌和球的图片再设置像素即可
*/
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class BallGame extends Frame {
//桌球和桌球图片
Image ball = Toolkit.getDefaultToolkit().getImage("C:\\Users\\SunLei\\Pictures\\ball.png");
Image desk = Toolkit.getDefaultToolkit().getImage("C:\\Users\\SunLei\\Pictures\\desk.png");
//球桌的起始位置和速度
private double x = 100;
private double y = 100;
private double speed = 20;
//桌球移动的初始角度
double degree = 3.14/3;
/**
* 绘制一次桌面和桌球
*/
public void paint(Graphics g) {
//绘制一次桌面和桌球
g.drawImage(desk,0,0,null);
g.drawImage(ball,(int)x,(int)y,null);
//减速
if(speed > 0){
speed -= 0.1;
}else{
speed = 0;
}
//桌球下一次坐标位置
x = x + speed * Math.cos(degree);
y = y + speed * Math.sin(degree);
//到了桌球四个边框后桌球角度的变化
//1.如果到了底部改变角度
if(y > 486 - 30 - 30) {//480是球桌高度,30是球的直径,30是桌边框宽度
degree = -degree;
}
//2.如果到了右边界改变角度
if(x > 856 - 30 - 30) {
degree = 3.14 - degree;
}
//3.如果到了上边界改变角度
if(x < 20 + 20) {
degree = 3.14 - degree;
}
//4.如果到了左边界改变角度
if( y < 20 + 20) {
degree = -degree;
}
}
/**
* 绘制多次桌面和桌球
*/
public void launchFrame() {
setSize(856, 480);//窗口大小
setLocation(50,50);//窗口位置
setTitle("模拟台球运动");//窗口标题
setVisible(true);//窗口可视化
//关闭窗口
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
//每隔50ms绘制一次桌面和桌球
while(true) {
repaint();//重画窗口
try {
Thread.sleep(50);
}catch (Exception w) {
w.printStackTrace();
}
}
}
public static void main(String[] args) {
BallGame bg = new BallGame();//创建BallGame对象
bg.launchFrame();//加载窗口
}
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值