//摘自 尚学堂 百战程序员 Java300集
简化的代码
MyPro01 里 new – Folder – images(与 src 同层)
src – new – class – BallGame
开头导入俩个包
import java.awt.*; //窗口,按钮、文本框 import javax.swing.*; //图形可视包,导入这个包后才能进行GUI图形化软件的开发
BallGame 继承 Jframe
void launchframe(){ setSize(856,500); //窗口尺寸 setLocation(50,50); //窗口位置(左上角) setVisible(true); //显示/隐藏GUI组件的。需要显示则使用true,需要隐藏则使用false。 }
在 main 里创建对象
BallGame game = new BallGame(); game.launchframe();
②图片加载
ball.png
desk.jpg
//ball、desk俩个对象代表两张图片 Image ball = Toolkit.getDefaultToolkit().getImage("image/ball.png"); Image desk = Toolkit.getDeafultToolkit().getImage("images/desk.png"); //画窗口方法 public void paint(Graphics g){ System.out.println("窗口被画了一次!"); //先画桌面再画小球 g.drawImage(desk,0,0,null); //img,x,y,observer g.drawImage(ball,100,100,null);
③小球动起来 (关键一步)
//反复画 ball 窗口(在窗口加载项) while(true){ repaint(); //调用时,再调用 paint 方法 try{ Thread.sleep(40); //40 ms 一秒画25次窗口 }catch(Exception e){ e.printStackTrace(); } } //图片加载 double x = 100; double y = 100; //画窗口 x = x + 10; //判断条件 boolean right = true; //具体判断条件需要计算 if(right){ x = x+10; }else{ x = x-10; } if(x>856){ right = false; } if(x<0){ right = true; }
BallGame 最终代码
import java.awt.*; import javax.swing.*; public class BallGame extends Jframe { //图片加载 Image ball = Toolkit.getDefaultToolkit().getImage("images/ball.png"); Image desk = Toolkit.getDefaultToolkit().getImage("images/desk.jpg"); double x = 100; //小球横坐标 double y = 100; //小球纵坐标 boolean right = true; //方向 //画窗口 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-40-30) { //856是窗口宽度,40是桌子边框的宽度,30是小球的直径 right = false; } if(x<40) //40是桌子边框的宽度 { right = true; } } //窗口加载 void launchframe() { setSize(856,500); setLocation(50,50); setVisible(true); //反复画窗口 一秒25次 while(true) { repaint(); try { Thread.sleep(40); }catch(Exception e) { e.printStackTrace(); } } } public static void main(String[] args) { // TODO Auto-generated method stub BallGame game = new BallGame(); game.launchframe(); } }
效果图
BallGame 2 加入弧度机制
double degree = 3.14 / 3; //弧度 x = x + 10 * Math.cos(degree); y = y + 10 * Math.sin(degree); //判断条件 if(y>500-40-30||y<40+40){ //小球不能超出桌面宽度,弹回 degree = -degree; } if(x<40||x>856-40-30){ //小球不能超出桌面长度,d回 degree = 3.14 - degree; }
BallGame2 最终代码
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; //小球纵坐标 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); }catch(Exception e) { e.printStackTrace(); } } } public static void main(String[] args) { // TODO Auto-generated method stub BallGame2 game = new BallGame2(); game.launchframe(); } }
效果图
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)