球在图形窗口运动/** File:BouncingBall.java* ----------------------------*球体规则移动碰壁取反运行*/import acm.graphics.*;import acm.program.*;public class BouncingBall extends GraphicsProgram{\x05public void run(){\x05\x05double w

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/03 23:00:42
球在图形窗口运动/** File:BouncingBall.java* ----------------------------*球体规则移动碰壁取反运行*/import acm.graphics.*;import acm.program.*;public class BouncingBall extends GraphicsProgram{\x05public void run(){\x05\x05double w

球在图形窗口运动/** File:BouncingBall.java* ----------------------------*球体规则移动碰壁取反运行*/import acm.graphics.*;import acm.program.*;public class BouncingBall extends GraphicsProgram{\x05public void run(){\x05\x05double w
球在图形窗口运动
/*
* File:BouncingBall.java
* ----------------------------
*球体规则移动碰壁取反运行
*/
import acm.graphics.*;
import acm.program.*;
public class BouncingBall extends GraphicsProgram{
\x05public void run(){
\x05\x05double wallUp = 0;\x05\x05\x05\x05\x05\x05\x05\x05//上面的墙壁
\x05\x05double wallDown = getHeight() - BALL_SIZE;;\x05\x05//下面的墙壁
\x05\x05double wallLeft = 0;\x05\x05\x05\x05\x05\x05\x05//左边的墙壁
\x05\x05double wallRight = getWidth() - BALL_SIZE;\x05\x05//右边的墙壁
\x05\x05
\x05\x05
\x05\x05
\x05\x05double dx = (getWidth() - BALL_SIZE)/2;\x05\x05//将圆形初始X坐标定在屏幕中间
\x05\x05double dy = (getHeight() - BALL_SIZE)/2;\x05//将圆形初始Y坐标定在屏幕中间
\x05\x05double ddx = 1;\x05\x05\x05\x05\x05\x05\x05\x05//球前进的方向和距离
\x05\x05double ddy = 1;\x05\x05\x05\x05\x05\x05\x05\x05//球前进的方向和距离
\x05\x05
\x05\x05GOval ball = new GOval (dx,dy,BALL_SIZE,BALL_SIZE);
\x05\x05add(ball);
\x05\x05
\x05\x05while(true){
\x05\x05\x05if(dy < wallUp || dy > wallDown){\x05\x05//判断球碰到上面或下面的墙壁
\x05\x05\x05\x05\x05ddy *= -1;
\x05\x05\x05}else if(dx < wallLeft || dx > wallRight){\x05\x05//判断球碰到左边或右边的墙壁
\x05\x05\x05\x05\x05ddx *= -1;
\x05\x05\x05}else if(( dx < wallLeft && dy < wallUp )||\x05\x05//判断球碰到左上墙角
\x05\x05\x05\x05\x05( dx < wallLeft && dy > wallDown) || \x05//判断球碰到左下墙角
\x05\x05\x05\x05\x05(dx > wallRight && dy < wallUp) || \x05\x05//判断球碰到右上墙角
\x05\x05\x05\x05\x05(dx > wallRight && dy > wallDown)){\x05\x05//判断球碰到右下墙角
\x05\x05\x05\x05\x05ddx *= -1;
\x05\x05\x05\x05\x05ddy *= -1;
\x05\x05\x05}else{
\x05\x05\x05\x05dx += ddx;
\x05\x05\x05\x05dy += ddy;
\x05\x05\x05\x05ball.move(dx,dy);
\x05\x05\x05\x05pause(PAUSE_TIME);
\x05\x05\x05}
\x05\x05}
\x05}
\x05
\x05private static final int PAUSE_TIME = 1000;\x05\x05//延迟多少毫秒.
\x05private static final double BALL_SIZE = 50;\x05\x05//球的长度
}
请问这个思路是否有问题。如果没有 那么代码哪里出错了呢。为什么它一去不回了。

球在图形窗口运动/** File:BouncingBall.java* ----------------------------*球体规则移动碰壁取反运行*/import acm.graphics.*;import acm.program.*;public class BouncingBall extends GraphicsProgram{\x05public void run(){\x05\x05double w
/*
* File:BouncingBall.java
* ----------------------------
*球体规则移动碰壁取反运行
*/
import acm.graphics.*;
import acm.program.*;
public class BouncingBall extends GraphicsProgram{
\x05public void run(){
\x05\x05double wallUp = 0;\x05\x05\x05\x05\x05\x05\x05\x05//上面的墙壁
\x05\x05double wallDown = getHeight() - BALL_SIZE;;\x05\x05//下面的墙壁
\x05\x05double wallLeft = 0;\x05\x05\x05\x05\x05\x05\x05//左边的墙壁
\x05\x05double wallRight = getWidth() - BALL_SIZE;\x05\x05//右边的墙壁
\x05\x05
\x05\x05
\x05\x05
\x05\x05double dx = (getWidth() - BALL_SIZE) /2;\x05\x05//将球初始X坐标定在屏幕中间
\x05\x05double dy = (getHeight() - BALL_SIZE) /2;\x05\x05//将球初始Y坐标定在屏幕中间
\x05\x05double ddx = 1;\x05\x05\x05\x05\x05\x05\x05\x05//球前进的方向和距离
\x05\x05double ddy = 1;\x05\x05\x05\x05\x05\x05\x05\x05//球前进的方向和距离
\x05\x05
\x05\x05GOval ball = new GOval (dx,dy,BALL_SIZE,BALL_SIZE);
\x05\x05add(ball);
\x05\x05
\x05\x05while(true){
\x05\x05\x05if(dy < wallUp || dy > wallDown){\x05\x05//判断球碰到上面或下面的墙壁\x05如果为真就将方向取反
\x05\x05\x05\x05\x05ddy *= -1;
\x05\x05\x05}else if(dx < wallLeft || dx > wallRight){\x05\x05//判断球碰到左边或右边的墙壁
\x05\x05\x05\x05\x05ddx *= -1;
\x05\x05\x05}else if(( dx < wallLeft && dy < wallUp )||\x05\x05//判断球碰到左上墙角
\x05\x05\x05\x05\x05( dx < wallLeft && dy > wallDown) || \x05//判断球碰到左下墙角
\x05\x05\x05\x05\x05(dx > wallRight && dy < wallUp) || \x05\x05//判断球碰到右上墙角
\x05\x05\x05\x05\x05(dx > wallRight && dy > wallDown)){\x05\x05//判断球碰到右下墙角
\x05\x05\x05\x05\x05ddx *= -1;
\x05\x05\x05\x05\x05ddy *= -1;
\x05\x05\x05}
\x05\x05\x05
\x05\x05\x05dx += ddx;\x05\x05\x05\x05\x05//记录当前球的X坐标
\x05\x05\x05dy += ddy;\x05\x05\x05\x05\x05//记录当前球的Y坐标
\x05\x05\x05ball.move(ddx,ddy);
\x05\x05\x05pause(PAUSE_TIME);
\x05\x05\x05
\x05\x05}
\x05}
\x05
\x05private static final int PAUSE_TIME = 5;\x05\x05//延迟多少毫秒.
\x05private static final double BALL_SIZE = 50;\x05\x05//球的直径
}

球的长度是什么?直径?
1)坐标有问题:double wallUp = BALL_SIZE/2; //上面的墙壁
double wallDown = getHeight() - BALL_SIZE/2;//下面的墙壁
double wallLeft = BALL_SIZE/2; //左边的墙壁
double wallRight = getWidth()...

全部展开

球的长度是什么?直径?
1)坐标有问题:double wallUp = BALL_SIZE/2; //上面的墙壁
double wallDown = getHeight() - BALL_SIZE/2;//下面的墙壁
double wallLeft = BALL_SIZE/2; //左边的墙壁
double wallRight = getWidth() - BALL_SIZE/2; //右边的墙壁
2)判断条件
while(true){

if(dy ==wallUp){//判断球碰到上面墙壁
ddy = 1;
}
if(dy==wallDown){
ddy=-1;
}
if(dx==wallLeft){
ddx=1;
}
if(dx==wallRight){
ddx=-1;
}
dx += ddx;
 dy += ddy;
ball.move(dx,dy);
 pause(PAUSE_TIME);
}

收起

budong