Advertisement
Guest User

Breakout Code (Finicky Paddle)

a guest
Apr 29th, 2018
448
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.37 KB | None | 0 0
  1. package dreadking.breakout;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.List;
  5.  
  6. import javafx.animation.AnimationTimer;
  7. import javafx.application.Application;
  8. import javafx.event.EventHandler;
  9. import javafx.scene.Group;
  10. import javafx.scene.Scene;
  11. import javafx.scene.input.KeyEvent;
  12. import javafx.scene.paint.Color;
  13. import javafx.scene.shape.Circle;
  14. import javafx.scene.shape.Rectangle;
  15. import javafx.scene.text.Font;
  16. import javafx.scene.text.FontPosture;
  17. import javafx.scene.text.FontWeight;
  18. import javafx.scene.text.Text;
  19. import javafx.stage.Stage;
  20.  
  21. public class Breakout extends Application {
  22.  
  23.     Stage window;
  24.    
  25.     Circle dot;
  26.     Rectangle player;
  27.    
  28.     double dotVelX;
  29.     double dotVelY;
  30.    
  31.     double maxAngle = 75;
  32.    
  33.     double dotSpeed = .0000002;
  34.    
  35.     int score = 0;
  36.    
  37.     @Override
  38.     public void start(Stage mainStage) throws Exception {
  39.         window = mainStage;
  40.        
  41.         Group root = new Group();
  42.         Scene scene = new Scene(root, 1280, 720);
  43.        
  44.         scene.setFill(Color.BLACK);
  45.        
  46.         window.setTitle("Breakout");
  47.        
  48.         window.setScene(scene);
  49.        
  50.         player = new Rectangle(560, 680, 160, 20);
  51.         player.setFill(Color.BLUE);
  52.        
  53.         dot = new Circle(640, 600, 10, Color.AQUA);
  54.        
  55.         root.getChildren().addAll(player, dot);
  56.        
  57.         List<Rectangle> bricks = new ArrayList<Rectangle>();
  58.        
  59.         for (int i = 0; i < 20; i++) {
  60.             for (int j = 1; j < 5; j++) {
  61.                 Rectangle rect = new Rectangle(i*64, j*60, 64, 60);
  62.                 rect.setStroke(Color.BLACK);
  63.                 rect.setFill(Color.RED);
  64.                
  65.                 root.getChildren().add(rect);
  66.                 bricks.add(rect);
  67.             }
  68.         }
  69.        
  70.         List<String> codes = new ArrayList<String>();
  71.  
  72.         scene.setOnKeyPressed(new EventHandler<KeyEvent>() {
  73.             @Override
  74.             public void handle(KeyEvent e) {
  75.                 String code = e.getCode().toString();
  76.  
  77.                 if (!codes.contains(code)) {
  78.                     codes.add(code);
  79.                 }
  80.             }
  81.         });
  82.  
  83.         scene.setOnKeyReleased(new EventHandler<KeyEvent>() {
  84.             @Override
  85.             public void handle(KeyEvent e) {
  86.                 String code = e.getCode().toString();
  87.  
  88.                 codes.remove(code);
  89.             }
  90.         });
  91.        
  92.         dotVelY = .00000005;
  93.        
  94.         Text scoreText = new Text("Score: " + score);
  95.         scoreText.setFont(Font.font("Comic Sans MS", FontWeight.BOLD, FontPosture.REGULAR, 20));
  96.         scoreText.setFill(Color.WHITE);
  97.         scoreText.setStroke(Color.WHITE);
  98.         scoreText.setX(scene.getWidth()-scoreText.getLayoutBounds().getWidth());
  99.         scoreText.setY(scoreText.getLayoutBounds().getHeight());
  100.        
  101.         root.getChildren().add(scoreText);
  102.         new AnimationTimer() {
  103.            
  104.             long lnt = System.nanoTime();
  105.            
  106.             @Override
  107.             public void handle(long cnt) {
  108.                 long elapsed = cnt - lnt;
  109.                 lnt = cnt;
  110.                
  111.                 scoreText.setText("Score: " + score);
  112.                 scoreText.setX(scene.getWidth()-scoreText.getLayoutBounds().getWidth());
  113.                
  114.                 if (dot.getCenterX()-dot.getRadius()-4 <= 0)
  115.                     dotVelX=Math.abs(dotVelX);
  116.                    
  117.                 if(dot.getCenterX()+dot.getRadius()+4 >= scene.getWidth())
  118.                     dotVelX = Math.abs(dotVelX)*-1;
  119.                
  120.                 if (dot.getCenterY()-dot.getRadius()-4 <= 0)
  121.                     dotVelY *= -1;
  122.                
  123.                 if (dot.getCenterY()+dot.getRadius() >= scene.getHeight())
  124.                     this.stop();
  125.                
  126.                 if (player.getBoundsInLocal().intersects(dot.getBoundsInLocal())) {
  127.                     double relIntersectX = ((player.getX()+player.getWidth())/2)-dot.getCenterX();
  128.                    
  129.                     double normRelIntersectX = (relIntersectX/(player.getWidth()/2));
  130.                     double bounceAngle = normRelIntersectX * maxAngle;
  131.                    
  132.                     dotVelX = dotSpeed * Math.cos(bounceAngle);
  133.                     dotVelY = dotSpeed * Math.sin(bounceAngle);
  134.                 }
  135.                
  136.                 for (Rectangle brick : bricks) {
  137.                     if (brick.getBoundsInLocal().intersects(dot.getBoundsInLocal())) {
  138.                         //--[This Physics doesn't work]--//
  139. //                      double relIntersectX = ((brick.getX()+brick.getWidth())/2)-dot.getCenterX();
  140. //                     
  141. //                      double normRelIntersectX = (relIntersectX/(brick.getWidth()/2));
  142. //                     
  143. //                      double relIntersectY = ((brick.getY()+brick.getHeight())/2)-dot.getCenterY();
  144. //                     
  145. //                      double normRelIntersectY = (relIntersectY/(brick.getHeight()/2));
  146. //                     
  147. //                      double bounceAngle = normRelIntersectX*normRelIntersectY*maxAngle;
  148. //                     
  149. //                      dotVelX = ((normRelIntersectX==1||normRelIntersectX==-1)?(dotVelX*-1):(dotSpeed*Math.cos(bounceAngle)));
  150. //                     
  151. //                      dotVelY = ((normRelIntersectY == 1 || normRelIntersectY == -1)?(dotVelY*-1):(dotSpeed*Math.sin(bounceAngle)));
  152.                        
  153.                         //--[Implement Working Physics]--//
  154.                         if (dot.getCenterX() <= brick.getX() || dot.getCenterX() >= brick.getX()+brick.getWidth())
  155.                             dotVelX *= -1;
  156.                        
  157.                         if (dot.getCenterY() <= brick.getY() || dot.getCenterY() >= brick.getY()+brick.getHeight())
  158.                             dotVelY *= -1;
  159.                        
  160.                         bricks.remove(brick);
  161.                         root.getChildren().remove(brick);
  162.                        
  163.                         score += 100;
  164.                         dotSpeed += .00000001;
  165.                        
  166.                         if (bricks.isEmpty())
  167.                             this.stop();
  168.                        
  169.                         break;
  170.                     }
  171.                 }
  172.                
  173.                 if (codes.contains("LEFT")) {
  174.                     if (player.getX()>0) {
  175.                         player.setX(player.getX()-3);
  176.                     }
  177.                 }
  178.                 if (codes.contains("RIGHT")) {
  179.                     if (player.getX()+player.getWidth()<scene.getWidth()) {
  180.                         player.setX(player.getX()+3);
  181.                     }
  182.                 }
  183.                
  184.                 update(elapsed);
  185.             }
  186.            
  187.         }.start();
  188.        
  189.         window.show();
  190.     }
  191.    
  192.     public static void main(String[] args) {
  193.         launch(args);
  194.     }
  195.    
  196.     private void update(long time) {
  197.         dot.setCenterX(dot.getCenterX() + (dotVelX*time));
  198.         dot.setCenterY(dot.getCenterY() + (dotVelY*time));
  199.     }
  200.  
  201. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement