示例:模拟台球在台球桌上移动。
这一版是通过分别定义x轴y轴方向和速度来计算小球坐标。也可以只定义角度和总速度,通过三角函数来计算小球坐标。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
| import java.awt.*; import javax.swing.*;
public class BallGame extends JFrame { Image desk = Toolkit.getDefaultToolkit().getImage("src/main/resources/desk.png"); Image ball = Toolkit.getDefaultToolkit().getImage("src/main/resources/ball.png");
double fixHeight = 30; double ballR = 18; double mx = 600; double my = 300; double x = 100; double y = 100; double dx = 0.8; double dy = 0.8; double gap = 38; boolean isRight = true; boolean isTop = true;
void launchFrame() { setTitle("Ball Game"); setSize((int) mx, (int) my); setLocation(200, 100); setDefaultCloseOperation(EXIT_ON_CLOSE); setVisible(true);
while (true) { try { Thread.sleep(16); repaint(); } catch (InterruptedException e) { throw new RuntimeException(e); } } }
public void paint(Graphics g) { System.out.println("窗口绘制了一次"); g.drawImage(desk, 0, (int) fixHeight, null); g.drawImage(ball, (int)x, (int)y, null);
if (isRight) { x += dx; } else { x -= dx; } if (isTop) { y += dy; } else { y -= dy; }
if (x > (mx - gap - ballR)) { isRight = false; } else if (x <= gap) { isRight = true; }
if (y > (my - gap - ballR + fixHeight)) { isTop = false; } else if (y <= (gap + fixHeight)) { isTop = true; } }
public static void main(String[] args) { System.out.println("我的第一个java小游戏开始了!"); BallGame bg = new BallGame(); bg.launchFrame(); } }
|


