Ich kodiere ein primitives Pong-Spiel und habe es so programmiert, dass der Ball von der linken Seite des Bildschirms zur Mitte geht des Bildschirms und bewegt sich in einem zufälligen directton. Jedoch nach dem Ball beginnen bleibt immer in der Mitte und bewegt sich nie (trotz der Tatsache, X-Koordinate des Balls ist nicht weniger als 0 beim Start.)Mein Ball bewegt sich nicht und bleibt in der Mitte, obwohl er sich bewegen sollte.
import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import java.awt.Color;
import javax.swing.JPanel;
import javax.swing.Timer;
public class Pong extends JPanel
{
private static final int FRAME_WIDTH = 400;
private static final Color BACKGROUND = new Color(204, 204, 204);
private static final Color BALL_COLOR = Color.BLACK;
private static final Color PRIZE_COLOR = Color.BLACK;
private static final int BALL_DIAM = 50;
private static final int PRIZE_DIAM = 25;
private static final int PRIZE_SHIFT = 10;
private BufferedImage myImage;
private Graphics myBuffer;
private Ball ball;
private int score1;
private int score2;
private Polkadot prize;
private Bumper bumper;
private Bumper bumper2;
private Timer t;
private int hits;
public Pong()
{
myImage = new BufferedImage(400, 400, 1);
myBuffer = this.myImage.getGraphics();
myBuffer.setColor(BACKGROUND);
myBuffer.fillRect(0, 0, 400, 400);
ball = new Ball(0, 0, 35, BALL_COLOR);
ball.jump(400, 400);
prize = new Polkadot(0, 0, 25, PRIZE_COLOR);
prize.jump(400, 400);
bumper = new Bumper(380,70,50,100,Color.RED);
bumper2 = new Bumper(30,70,50,100,Color.BLUE);
hits = 0;
t = new Timer(5, new Listener());
t.start();
addMouseListener(new Mouse());
addKeyListener(new Key());
setFocusable(true);
}
public void paintComponent(Graphics g)
{
g.drawImage(myImage, 0, 0, getWidth(), getHeight(), null);
}
private class Mouse extends MouseAdapter
{
private Mouse() {}
public void mousePressed(MouseEvent e)
{
if (e.isMetaDown())
{
ball.setX(e.getX());
ball.setY(e.getY());
}
else if (e.isShiftDown())
{
ball.setdx((int)(Math.random() * 11.0D - 6.0D));
ball.setdy((int)(Math.random() * 11.0D - 6.0D));
}
else
{
prize.setX(e.getX());
prize.setY(e.getY());
}
}
}
private class Key extends KeyAdapter
{
private Key() {}
public void keyPressed(KeyEvent e)
{
if ((e.getKeyCode() == 38) && (bumper.getY() > 0)) {
bumper.setY(bumper.getY() - 10);
} else if ((e.getKeyCode() == 40) && (bumper.getY() < 438)) {
bumper.setY(bumper.getY() + 10);
} else if ((e.getKeyCode() == 87) && (bumper2.getY() > 0)) {
bumper2.setY(bumper2.getY() - 10);
} else if ((e.getKeyCode() == 83) && (bumper2.getY() < 438)) {
bumper2.setY(bumper2.getY() + 10);
}
}
}
private class Listener implements ActionListener
{
private Listener() {}
public void actionPerformed(ActionEvent e)
{
myBuffer.setColor(BACKGROUND);
myBuffer.fillRect(0, 0, 400, 400);
ball.move(400, 400);
collide(ball, prize);
BumperCollision.collide(bumper,ball);
BumperCollision.collide(bumper2,ball);
ball.draw(myBuffer);
prize.draw(myBuffer);
bumper.draw(myBuffer);
bumper2.draw(myBuffer);
myBuffer.setColor(Color.red);
myBuffer.setFont(new Font("Comic Sans MS", 1, 24));
myBuffer.drawString("Count: " + score1, 100, 25);
if(score1 >= 10)
myBuffer.drawString("This man is the Legend27", 50, 102);
if(score2 >= 10)
myBuffer.drawString("The other man might be the legend27", 160, 102);
if(ball.getX() < -100)
score1++;
ball.setX(208);
ball.setY(50);
ball.setdx(20);
repaint();
}
}
public void collide(Ball b, Polkadot p)
{
double dist = distance(b.getX(), b.getY(), p.getX(), p.getY());
if (dist < 37.0D)
{
hits += 1;
p.jump(400, 400);
}
}
private double distance(double x1, double y1, double x2, double y2)
{
return Math.sqrt(Math.pow(x1 - x2, 2.0D) + Math.pow(y1 - y2, 2.0D));
}
}
Ball:
//Name: Date:
import java.awt.*;
public class Ball extends Polkadot
{
private double dx; // pixels to move each time step() is called.
private double dy;
// constructors
public Ball() //default constructor
{
super(200, 200, 50, Color.BLACK);
dx = Math.random() * 12 - 6; // to move vertically
dy = Math.random() * 12 - 6; // to move sideways
}
public Ball(double x, double y, double dia, Color c)
{
super(x, y, dia, c);
dx = Math.random()* 12 - 6;
dy = Math.random() * 12 - 6;
}
//modifier methods
public void setdx(double x)
{
dx = x;
}
public void setdy(double y)
{
dy = y;
}
//accessor methods
public double getdx()
{
return dx;
}
public double getdy()
{
return dy;
}
//instance methods
public void move(double rightEdge, double bottomEdge)
{
setX(getX()+ dx); // move vert.
setY(getY()+ dy);
if(getX() >= rightEdge - getRadius())
{
setX(rightEdge - getRadius());
dx = dx * -1;
}
else if(getX() <= getRadius())
{
setX(getRadius());
dx = dx * -1;
}
if(getY() >= bottomEdge - getRadius())
{
setY(bottomEdge - getRadius());
dy = dy * -1;
}
else if (getY() <= getRadius())
{
setY(getRadius());
dy = dy * -1;
}
}
}
was genau haben bisher versucht, den Code zu debuggen? –
Es wird viel einfacher sein, Ihre Frage zu beantworten, wenn Sie minimal vollständigen Code zur Verfügung stellen - gerade genug, um uns den Fehler zu verstehen und zu reproduzieren, aber nicht mehr. https://stackoverflow.com/help/mcve – Keara
@MarcinOrlowski Ich habe -100 zu 0 geändert, ändern Sie score1 to score2, und ich habe