Перемщение фигуры - Java

Узнай цену своей работы

Формулировка задачи:

Пишу игру пинг понг и столкнулся с проблемой джижения ракетки. Как её решить?Вот мой вариант:
import javafx.application.Application;
import javafx.scene.shape.*;
import javafx.scene.Parent;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.layout.Pane;
import javafx.animation.KeyFrame;
import javafx.animation.Timeline;
import javafx.util.Duration;
import javafx.scene.input.KeyCode;
 
public class PingPong extends Application {
        Ball ball = new Ball(100, 300); 
        Player rect = new Player();
 
    @Override 
    public void start(Stage primaryStage) {
        Pane pane = new Pane();
        pane.getChildren().addAll(rect, ball);
//----------------------------------------------------------------------
        rect.setOnKeyPressed(e -> {
            if (e.getCode() == KeyCode.ENTER)
                pane.getChildren().clear();
                rect.moveUp();
                pane.getChildren().addAll(rect, ball);
        });
//-----------------------------------------------------------------------
        Scene scene = new Scene(pane, 400, 400);
        primaryStage.setScene(scene);
        primaryStage.show();
 
    }
 
    public class Player extends Rectangle {
        private int step = 1;
        public Player() {
            super(10, 50, 30, 200);
        } 
        public void moveUp() {
            rect.setY(rect.getY() + step);
        }
    }
 
    public class Ball extends Circle  {
        final static int RADIUS = 15;    
        private int dx = 1, dy = 1;
        private Timeline animation;
 
        public Ball(int x, int y) {
            super(x, y,RADIUS);
            animation = new Timeline(new KeyFrame(Duration.millis(5), e -> moveBall()));
            animation.setCycleCount(Timeline.INDEFINITE);
            animation.play();
        }

        protected void moveBall() {
                if(ball.getCenterX() < ball.getRadius() || ball.getCenterX() > 400 - ball.getRadius())
                    dx *=-1;
                if(ball.getCenterY() < ball.getRadius() || ball.getCenterY() > 400 - ball.getRadius())
                    dy *=-1;
                if(collideX() && collideY()) {
                    dx *=-1;
                    // dy *=-1;
                }
                ball.setCenterX(ball.getCenterX() + ball.dx);
                ball.setCenterY(ball.getCenterY() + ball.dy);
 
            }
        public boolean collideX() {
            if(ball.getCenterX() - RADIUS  < rect.getX() + rect.getWidth() && ball.getCenterX() > rect.getX())
                return true;
            return false;
        }
        public boolean collideY() {
            if(ball.getCenterY() - RADIUS < rect.getY() + rect.getHeight() && ball.getCenterY() > rect.getY())
                return true;
            return false;
        }
    }
}

Решение задачи: «Перемщение фигуры»

textual
Листинг программы
scene.setOnKeyPressed(e -> {
    if (e.getCode() == KeyCode.ENTER)
        pane.getChildren().clear();
        rect.moveUp();
        pane.getChildren().addAll(rect, ball);
});

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4 из 5