先把代码要用的2张图片放上来给大家
小球.png
桌球台.jpg
我的构造路径如下:
BallGame.java
package com.BallGame; import java.awt.*; //导入画布 import javax.swing.*; //导入画布 public class BallGame extends JFrame { Image ball=Toolkit.getDefaultToolkit().getImage("images/小球.png"); //获取图片 Image desk=Toolkit.getDefaultToolkit().getImage("images/桌球台.jpg"); double x=100; //横坐标 double y=100; //纵坐标 boolean right=true; //true表示向右,false表示向左 public void paint(Graphics g) { System.out.println("窗口内画了一次"); g.drawImage(desk, 0, 0, null); g.drawImage(ball, (int)x, (int)y, null); if(right) { x=x+10; } else { x=x-10; } if(x>(856-30-40)) { //30是小球直径,40是桌子边框的宽度 right=false; } if(x<40) { //40是桌子边框的宽度 right=true; } } void launchFrame() { setSize(856,500); 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) { System.out.println("你好"); BallGame game=new BallGame(); game.launchFrame(); } }
BallGame1.java
package com.BallGame; import java.awt.*; import javax.swing.*; public class BallGame1 extends JFrame { Image ball = Toolkit.getDefaultToolkit().getImage("images/小球.png"); Image desk = Toolkit.getDefaultToolkit().getImage("images/桌球台.jpg"); double x=100; //小球的横坐标 double y=100; //小球的纵坐标 double degree = 3.14/3; //弧度。此处就是: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<40+40){//500是窗口高度;40是桌子边框,30是球直径;最后一个40是标题栏的高度 degree = -degree; } //碰到左右边界 if(x<40||x>856-40-30){ degree = 3.14 - degree; } } //窗口加载 void launchFrame(){ setSize(856,500); setLocation(50,50); setVisible(true); //重画窗口,每秒画25次 while(true){ repaint(); try{ Thread.sleep(40); //40ms, 1秒=1000毫秒. 大约一秒画25次窗口 }catch(Exception e){ e.printStackTrace(); } } } //main方法是程序执行的入口 public static void main(String[] args){ System.out.println(" 你好"); BallGame1 game = new BallGame1(); game.launchFrame(); } }
其中BallGame.java实现的是水平回弹,BallGame1.java实现的是对角回弹。