SXT的台球小游戏
需求
**有白球,有球桌,白球运动不会超过桌面的范围,弹到边缘会反弹**
//很多地方加了我自己的理解,注释比老师给的代码丰富
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;//x,y代表小球的坐标(小球最左边一点的坐标),初始坐标为(100,100)
double degree = 3.14/3;//用弧度表示角度,此处表示,运动方向与X轴正向的夹角是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 < 0+40+40) {//40的桌子边框+40的标题栏
degree = -degree;
}
//碰到左右边界
if (x > 856-40-30||x < 0 + 40) {
degree = 3.14 - degree ;
}
}
//窗口加载
void launchFrame() {/*按delete键时如果不小心按到insert键会导致鼠标光标从竖线变成黑方块,这时候再按一遍就好了*/
setSize(856,500);//窗口的尺寸
setLocation(50,50);//窗口的位置,窗口左上角的位置
setVisible(true);//窗口是否可见?
//重画窗口,每秒画25次
while(true) {
repaint();
try {
Thread.sleep(40);//40ms,1s=1000ms,1s画25次窗口
}catch(Exception e) {
e.printStackTrace();
}
}
}//eclipse的技巧:Ctrl+Z 上一步,Ctrl+Y 下一步
//main方法是程序执行的入口
public static void main(String[]args) {
System.out.println("游戏项目,寓教于乐!");
BallGame2 game = new BallGame2();//new一个对象出来
game.launchFrame();
}
}
不足
1.忽略了桌面摩擦力,小球可以一直运动下去
2.没有添加球洞部分的代码,小球遇到球洞还是会反弹,不会掉下去
3.从代码来看,小球的位置坐标以最左边的点为准,而不是俯视图的圆心,在考虑运动规律时比较复杂