package main;   import java.util.ArrayList;   import javafx.animation.AnimationTimer; import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.canvas.Canvas; import javafx.scene.canvas.GraphicsContext; import javafx.scene.input.KeyEvent; import javafx.scene.layout.Pane; import javafx.scene.layout.VBox; import javafx.scene.paint.Color; import javafx.scene.text.Font; import javafx.scene.text.Text; import javafx.stage.Stage;   public class Display extends Application {     static RenderEngine engine = new RenderEngine();     static double gridSize = 5;         static double zoom = 30;         static double beamX = (int)(Math.random()*3)+1;     static double beamY = 0;     static double playerX = 2;     static double playerY = 2;         static ArrayList keyinputs = new ArrayList();         static Canvas gameDisplay = new Canvas();     static GraphicsContext context = gameDisplay.getGraphicsContext2D();     static Text scoreDisplay = new Text("Click to begin!");     static VBox layout = new VBox(scoreDisplay);     static long score = 0;     static Pane basePane = new Pane(gameDisplay, layout);     static Scene scene = new Scene(basePane);       static boolean paused = true;           @Override     public void start(Stage stage) throws Exception {         engine.start();         gameDisplay.setHeight(gridSize*zoom);         gameDisplay.setWidth(gridSize*zoom);         gameDisplay.setLayoutX(0);         gameDisplay.setLayoutY(0);                 scoreDisplay.setLayoutX(0);         scoreDisplay.setLayoutY(0);         scoreDisplay.setFont(Font.getDefault());                         basePane.addEventHandler(KeyEvent.KEY_PRESSED, e -> {             String input = e.getText();             //System.out.println(input);             if(!keyinputs.contains(input)){                 //System.out.println(true);                 keyinputs.add(input);             }             e.consume();         });                 basePane.addEventHandler(KeyEvent.KEY_RELEASED, e -> {             String input = e.getText();             //System.out.println(input);             if(keyinputs.contains(input)){                 //System.out.println(false);                 keyinputs.remove(input);             }             e.consume();         });                 basePane.setOnMouseClicked(e ->{             paused = !paused;         });                 basePane.requestFocus();                 stage.setTitle("Dodge Pixel");         stage.setScene(scene);         stage.sizeToScene();         stage.show();     }       public static void main(String[] args) {         launch(args);     }             static class RenderEngine extends AnimationTimer{         static Color player = Color.LIMEGREEN;         static Color backdrop = Color.RED;         static Color warning = Color.YELLOW;         static Color beam = Color.CYAN;                 static int speed = 10;                 static boolean beamActive = false;         static long beamActivated;         static boolean vertical = false;         static long timer = 0;                 @Override         public void handle(long time) {             if(!paused){                 playerX = 2;                 playerY = 2;                 if(keyinputs.contains("w")){                     playerY--;                 }                 if(keyinputs.contains("a")){                     playerX--;                 }                 if(keyinputs.contains("s")){                     playerY++;                 }                 if(keyinputs.contains("d")){                     playerX++;                 }                                 if((timer%(int)(1000/speed) == 0)){                     setWarningLocation();                     beamActive = false;                     beamActivated = timer;                 }                 if(timer-beamActivated > 500/speed){                     beamActive = true;                 }                                 drawBackdrop(context);                                 if(beamActive){                     drawBeam(context);                     if(vertical){                         if(playerX == beamX){                             gameEnd();                         }                     } else if (playerY == beamY){                         gameEnd();                     }                 }                                 if(timer%10 > 5L){                     drawWarningLocation(context);                 }                                 timer++;                 if(timer % 500 == 0){                     speed+=2;                     System.out.println(speed);                 }                 score++;                 scoreDisplay.setText(score + "");                 drawPlayer(context);             }         }                 static void drawPlayer(GraphicsContext gc){             gc.setFill(player);             gc.fillRect(playerX*zoom, playerY*zoom, zoom, zoom);         }                 static void drawWarningLocation(GraphicsContext gc){             gc.setFill(warning);             gc.fillRect(beamX*zoom, beamY*zoom, zoom, zoom);             if(beamY == 0){                 gc.fillRect(beamX*zoom, zoom*gridSize-zoom, zoom, zoom);             } else {                 gc.fillRect(zoom*gridSize-zoom, beamY*zoom, zoom, zoom);             }         }                 static void drawBeam(GraphicsContext gc){             gc.setFill(beam);             if(beamY == 0){                 gc.fillRect(beamX*zoom, beamY*zoom, zoom, zoom*5);             } else {                 gc.fillRect(beamX*zoom, beamY*zoom, zoom*5, zoom);             }                     }                 static void drawBackdrop(GraphicsContext gc){             gc.setFill(backdrop);             gc.fillRect(0, 0, gridSize*zoom, gridSize*zoom);         }                 static void setWarningLocation(){             vertical = (int)Math.round(Math.random()) == 0;             if(vertical){                 beamX = (int)(Math.random()*3)+1;                 beamY = 0;             } else {                 beamX = 0;                 beamY = (int)(Math.random()*3)+1;             }         }     }     static void gameEnd(){         engine.stop();     } }