gpt4 book ai didi

java - Java 中的乒乓球游戏

转载 作者:太空宇宙 更新时间:2023-11-04 06:55:23 24 4
gpt4 key购买 nike

我正在尝试制作一个简单的乒乓球游戏,但我无法让我的球移动。我为球和桨创建了 2 个类,但我不知道如何调用 Pong 类中移动和弹跳的方法(如果我从 Ball 类启动,它可以正常工作)。

每次我尝试从 Ball 类调用方法时,我都会得到以下信息:

无法从 Ball 类型中静态引用非静态方法ounce(GOval)

如果我尝试快速修复,我只会从不同的方法中得到另一个错误,直到遇到一个我无法更改的错误,例如 getHeight();

如何让 Ball 中的方法在 Pong 中工作?我是否应该将所有方法移至 Pong 类,并仅将 makeBall(); 保留在 Ball 中?

我还没有将球从 Racket 上弹开或移动 Racket 的代码,但我稍后会进行处理。我只是想让球开始移动。

球:

package MyObjects;
import java.awt.Color;
import acm.graphics.GOval;
import acm.program.GraphicsProgram;


public class Ball extends GraphicsProgram{
private static final double BALL_SIZE=10;
private static final double SPEED=1;
private static final double PAUSE = 1000/48.0;
private static boolean HIT = false;
public double dx=SPEED;
public double dy=1;

public void run(){
GOval ball = makeBall();
add(ball);
bounce(ball);
}

public static GOval makeBall(){
GOval result = new GOval (20,20,BALL_SIZE,BALL_SIZE);
result.setFilled(true);
result.setColor(Color.BLUE);
return result;

}

public void bounce(GOval ball){
while(true){
ball.move(dx,dy);
if(ballHitBottom(ball) && dy>=0){
dy*=-1;
if(HIT==false)
HIT=true;
}
if(ballHitTop(ball) && dy<=0){
if(HIT){
dy*=-1;
}
}
pause(PAUSE);
}
}

private boolean ballHitBottom(GOval ball){
double bottomY=ball.getY() + ball.getHeight();
return bottomY >= getHeight();
}

private boolean ballHitTop(GOval ball){
double topY=ball.getY();
return topY <= 0;
}
}

桨:

package MyObjects;

import java.awt.Color;

import acm.graphics.GOval;
import acm.graphics.GRect;
import acm.program.GraphicsProgram;

public class Paddle extends GraphicsProgram{
private static double HEIGHT=100;
private static double WIDTH=5;

public void run(){
GRect paddle = makePaddle();
add(paddle);
paddle.sendToBack();
}

public static GRect makePaddle(){
GRect result = new GRect(10,10,WIDTH,HEIGHT);
result.setFilled(true);
result.setColor(Color.BLACK);
return result;

}

}

乒:

import MyObjects.Ball;
import MyObjects.Paddle;
import acm.graphics.GOval;
import acm.graphics.GRect;
import acm.program.GraphicsProgram;


public class Pong extends GraphicsProgram{
public void run(){
GOval ball = Ball.makeBall();
add(ball);
GRect paddle = Paddle.makePaddle();
add(paddle);

Ball.bounce(ball); // this won't work

}

}

最佳答案

老实说,我认为我们需要看看 GraphicsProgram 做了什么。但我只是声明 Ball 的非静态实例:

public class Pong extends GraphicsProgram {
public void run() {
// you'll need to add a constructor to the Ball class
Ball base = new Ball();
GOval ball = base.makeBall();
add(ball);
GRect paddle = Paddle.makePaddle();
add(paddle);
base.bounce(ball);
}
}

关于java - Java 中的乒乓球游戏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22808269/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com