他日若回首

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

一、学习Java视频,尝试做BallGame小游戏,实验笔记如下:

1.准备工作:创建项目Mypro01,创建与src文件夹同级的以images命名的文件夹,在其内存入图片:ball.png、desk.png

2.实验过程:

     版本1:实验目的:显示窗口;

                  代码:1.先导入两个包;

import java.awt.*;
import javax.swing.*;

                             2. 窗口加载模块;LanchFrame;

public class BallGame  extends JFrame{
void launchFrame(){
setSize(100,100);
setLocation(100,100);
setVisible(true);
}

public static void main(String args []){
//main方法是程序的入口
System.out.println("welcome java");
BallGame game=new BallGame();
game.launchFrame();;
}
}

 

                   运行结果如图:

 

 

     版本2:实验目的:加载两个图片到窗口上;

                  代码:1.引入image里两张素材图;

Image  ball=Toolkit.getDefaultToolkit().getImage("image/ball.png");//路径
Image desk=Toolkit.getDefaultToolkit().getImage("image/desk.jpg");

                             2.配置窗口;

//画窗口的配置方法paint
public void paint(Graphics g){
System.out.println("画了一次窗口");//方法执行一次显示一次
g.drawImage(desk,0,0,null);
g.drawImage(ball,100,100,null);
}

                             运行问题:在直接替换ball.png后运行窗口出现图片加载失败的情况,百度搜索未发现合适的解决方法,后关闭IDEA并重新下载ball.png作为元素即解决;但此时ball.png元素size太大,后面解决此问题。

                   运行结果如图:

    版本3:实验目的:使小球图片水平动起来并实现边界检测,实现动画;

                 代码:1.实现窗口的不断重画;

//窗口重画
while (true) {
repaint();
try {
Thread.sleep(40);//40ms,1s=1000ms,大约1s画20次窗口;
} catch (Exception e) {
e.printStackTrace();
}
}
}

while(true)部分在输入过程中报错(Unexpected token),检查后发现①输入全角符号,已更改;②该部分输入位置错误,应在launchFrame方法内输入,已更改;错误更正完毕;

                            2.用变量代替小球(坐标);

double x=100;//小球的横坐标;
double y=100;//纵坐标;
......
x=x+1;//每秒调用25次,调用一次小球横坐标+1;连续调用即实现实现人眼中动画效果;

                            3.实现边界检测:小球运动时不会超出桌子边界;(由于找不到合适直径的png小球图片,运行结果有点不合适0.0)

前面添加一个布尔变量;

Boolean right=true;

......

   if(right){
x=x+10;
}else{
x=x-10;
}
if(x>900-60-50){//40为桌边到运行窗口的距离,30为范例中白色小球的直径;
right=false;
}
if(x<60){
right=true;
}



x=x+1;//调用1次横坐标+1;
}

                           运行问题:边界数据要不断调整

                           运行结果:可以实现边界检测,小球动画运行成功;

 版本4:实验目的:使小球沿任意角度运行,实现动画;

                 代码:1.实现窗口的不断重画;删掉小球水平运动及其边界检测代码;

 

double  degree=3.14/3;//弧度即60度;

x = x+ 10*Math.cos(degree);
y = y+ 10*Math.sin(degree);

                             运行问题:①小球无法按照预定路径运动;

                             解决方法:①main方法中类名输入错误,将BallGame  game=new  BallGame();改为

                                                                                               BallGame2  game=new  BallGame2();即可

                             运行结果:小球按照60度路径运动但无法检测边界;

 

                            2.实现小球边界检测并回弹效果;

//上下边界检测;
if(y>500-40-20-15||y<40+25){
degree=-degree;//关于X轴对称;
}
//左右边界检测;
if(x>856-60||x<50){
degree=3.14-degree;//关于Y轴对称;
}

                             运行问题:无法准确分析出边框坐标,导致小球在边界处有误差;

                             运行结果:边界可成功检测,但无法测出准确数据;

 

 

 

二、基本知识今天没看,下午背教资简答

posted on 2020-10-21 15:48  他日若回首  阅读(55)  评论(0)    收藏  举报