1 项目需求:
桌球在球桌中按照一定线路和角度移动,遇到边框会自动弹回。

讯享网
要求:即使看不太懂,也要照着敲如下游戏代码,至少 5 遍。要求所有字符和源文件一致。 能够经过调试实现代码的正常运行即可。 下面我们将分以下四个步骤来实现桌球游戏:
第一步:创建项目和窗口。
第二步:加载两个图片。
第三步:实现动画,小球沿着水平方向移动并做边界检测。
第四步:实现小球沿着任意角度飞行(会用到初中学习的三角函数,如果忘记了就 想想你们的体育老师吧)。
1.选择Projects,点击New Projects.如图所示:

2…选择Java,点击Next。如图所示: 
3.选择默认的模板,点击Next。如图所示: 
4.填写项目名称以及包名。点击Finish。如图所示:

5.在项目名ballgame上单击右键,在菜单中依次选择 new–>Directory, 创建一个名称是 images 的文件夹,并复制两张图片到该目录下。如图所示: 
6.桌球游戏代码—绘制窗口的代码如下:
package com.txw; import javax.swing.*; / * 桌球游戏 * @author Adair * @:@.com */ @SuppressWarnings("all") // 注解警告信息 public class BallGame extends JFrame {
// 窗口加载 void launchFrame() {
setSize(800,800); setLocation(400,400); setVisible(true); } // main 方法是程序执行的入口 public static void main(String[] args) {
BallGame ballGame = new BallGame(); ballGame.launchFrame(); } }
讯享网
如图所示:
执行结果如图所示:

7.加载两个图片:我们要在 BallGame 类中添加小球和桌面的路径,并指定小球出现在窗 口的的初始位置。然后添加 paint 方法,加载小球和桌面。
代码如下:
讯享网package com.txw; import javax.swing.*; import java.awt.*; / * 桌球游戏 * @author Adair * @:@.com */ @SuppressWarnings("all") // 注解警告信息 public class BallGame extends JFrame {
// 添加小球和桌面图片的路径 Image ball = Toolkit.getDefaultToolkit().getImage("images/ball.png"); Image desk = Toolkit.getDefaultToolkit().getImage("images/desk.png"); // 指定小球的初始位置 double x=100; // 小球的横坐标 double y=100; // 小球的纵坐标 // 画窗口的方法:加载小球与桌面 public void paint(Graphics graphics){
System.out.println("窗口被画了一次!"); graphics.drawImage(desk,0,0,null); graphics.drawImage(ball, (int)x, (int)y, null); } // 窗口加载 void launchFrame() {
setSize(300,300); setLocation(400,400); setVisible(true); } // main 方法是程序执行的入口 public static void main(String[] args) {
BallGame ballGame = new BallGame(); ballGame.launchFrame(); } }
如图所示:
执行结果如图所示:

注意:由于懒加载问题,有可能出现第一次加载图片无效的情况;请最大化窗口再打开即可。稍后 大家完成第三步后,就完全不存在这个问题了。
讯享网package com.txw; import javax.swing.*; import java.awt.*; / * 桌球游戏 * @author Adair * @:@.com */ @SuppressWarnings("all") // 注解警告信息 public class BallGame extends JFrame {
// 添加小球和桌面图片的路径 Image ball = Toolkit.getDefaultToolkit().getImage("images/ball.png"); Image desk = Toolkit.getDefaultToolkit().getImage("images/desk.png"); // 指定小球的初始位置 double x = 100; // 小球的横坐标 double y = 100; // 小球的纵坐标 boolean right = true; // 判断小球移动的方向 // 画窗口的方法:加载小球与桌面 public void paint(Graphics graphics){
System.out.println("窗口被画了一次!"); graphics.drawImage(desk,0,0,null); graphics.drawImage(ball, (int)x, (int)y, null); // 改变小球的坐标 if (right){
x = x + 10; }else {
x = x - 10; } // 边界检测 // 856 是窗口宽度,40 是桌子边框的宽度,30 是小球的直径 if (x > 856 -40 -30){
right = false; } if (x < 40){
right = true; } } // 窗口加载 void launchFrame() {
setTitle("桌球游戏"); setSize(300,300); setLocation(400,400); setVisible(true); // 重画窗口,每秒画25次 while (true){
repaint(); // 调用repaint方法,窗口即可重画 try {
Thread.sleep(40); // 40ms, 1秒=1000毫秒. 大约一秒画25次窗口 } catch (Exception e){
e.printStackTrace(); } } } // main 方法是程序执行的入口 public static void main(String[] args) {
BallGame ballGame = new BallGame(); ballGame.launchFrame(); } }
如图所示:
执行结果如图所示:

9.实现小球沿着任意角度飞行:此时小球的运动方向不能再单纯的使用 right 来表示,需 要一个表示角度的变量 degree,小球坐标的改变也要依据这个角度。
代码如下:
package com.txw; import javax.swing.*; import java.awt.*; / * 桌球游戏 * @author Adair * @:@.com */ @SuppressWarnings("all") // 注解警告信息 public class BallGame extends JFrame {
// 添加小球和桌面图片的路径 Image ball = Toolkit.getDefaultToolkit().getImage("images/ball.png"); Image desk = Toolkit.getDefaultToolkit().getImage("images/desk.png"); // 指定小球的初始位置 double x = 100; // 小球的横坐标 double y = 100; // 小球的纵坐标 double degree = 3.14 / 3; // 弧度:小球的运动角度,此处就是60度 // 画窗口的方法:加载小球与桌面 public void paint(Graphics graphics){
System.out.println("窗口被画了一次!"); graphics.drawImage(desk,0,0,null); graphics.drawImage(ball, (int)x, (int)y, null); // 根据角度degree改变小球坐标 x = x + 10 * Math.cos(degree); y = y + 10 * Math.sin(degree); // 边界检测:碰到上下边界 // 500 是窗口高度;40是桌子边框,30是球直径;最后一个40是标题栏的高度 if (y > 500 - 40 - 30 || y < 40 + 40){
degree = - degree; } //边界检测:碰到左右边界 //856是窗口宽度,40是桌子边框的宽度,30是小球的直径 if(x < 40 || x > 856 - 40 - 30){
degree = 3.14 - degree; } } // 窗口加载 void launchFrame() {
setTitle("桌球游戏"); setSize(300,300); setLocation(400,400); setVisible(true); // 重画窗口,每秒画25次 while (true){
repaint(); // 调用repaint方法,窗口即可重画 try {
Thread.sleep(40); // 40ms, 1秒=1000毫秒. 大约一秒画25次窗口 } catch (Exception e){
e.printStackTrace(); } } } // main 方法是程序执行的入口 public static void main(String[] args) {
BallGame ballGame = new BallGame(); ballGame.launchFrame(); } }
如图所示:
执行结果如图所示:
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/69713.html