JAVA面向过程(三) 桌球小游戏

一、源代码:

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.jpeg");

double x=100; //小球的横坐标
double y=100; //小球的纵坐标

boolean right=true; //方向   (二: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);/*(int)x是将double型强制转化类型为整型*/
(1)版本一:让小球水平方向来回弹
if(right) {
x = x+10;
}else {
x = x-10;
}
if(x>470) {
right=false;
}
if(x<-70) {
right=true;
}

}

      (2)版本二:让小球沿任意角度来回弹

         x = x+10*Math.cos(degree);//三角函数得出横坐标变化
y = y+10*Math.sin(degree);//三角函数得出横坐标变化

//碰到上下边界关于x轴对称
if(y>358-118||y<-8) {
degree=-degree;
}
//碰到左右边界关于y轴对称
if(x>470||x<-70) {
degree=3.14-degree;//表示pai-degree,即关于y轴对称的角度
}


//窗口加载
void launchFrame() {
setSize(647,358); /*设置窗口尺寸大小*/
setLocation(50,50); /*设置窗口位置,以页面左上角为原点*/
setVisible(true); /*设置为一直可见*/

//重画窗口
while(true) {  /*while(true)表示一直死循环*/
repaint(); /*表示每次遇到该代码都会调用paint方法*/
try { /*try内是为了解决写Thread时遇到的异常机制*/
Thread.sleep(40); /*为了避免一直重画过度的限制,表示40ms画一次,1000ms=1秒,即1秒画25次*/
}catch(Exception e) {
e.printStackTrace();
}

}
}


public static void main(String[] args) {
System.out.println("hello java");
BallGame game = new BallGame();
game.launchFrame();
}


}


二、遇见问题

1、问题:小球图片加载时有外围白色边框


原因:由于找不到原图片素材下载地址,百度上找来的图片格式为jpge就直接使用了。

解决:先用ps将图片转换为png格式,发现小球的图片直接不见了,然后想起一开始的images包里的图片还没换成png的导致路径中不存在该图。

2、在设置上下左右边界时,由于图片找的不是原本的素材大小有不同,自己调试了很久。


猜你喜欢

转载自blog.csdn.net/ljn2409336331/article/details/80915511