import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.canvas.Canvas; import javafx.scene.canvas.GraphicsContext; import javafx.scene.layout.Pane; import javafx.scene.paint.Color; import javafx.scene.shape.ArcType; import javafx.stage.Stage; import java.io.FileInputStream; import java.io.FileNotFoundException; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.control.Button; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.scene.input.KeyEvent; import javafx.scene.input.KeyCode; import javafx.scene.paint.Color; import javafx.scene.media.*; import java.io.File; import java.io.*; //import Bicicleta; public class Something extends Application { public static void main(String[] args) { Application.launch(args); } @Override public void start(Stage stage) { //Variable para la distancia que va a avanzar la bici double distancia = 10; Canvas canvas = new Canvas(1300, 800); GraphicsContext gc = canvas.getGraphicsContext2D(); gc.setLineWidth(5.0); //gc.setStroke(Color.BLUE); //Para poner en azul la linea Pane root = new Pane(); ImageView imagen; Bicicleta bicicleta = new Bicicleta(); try{ FileInputStream inputstream = new FileInputStream("bici.png"); //se setea el tamaño de la imagen! Image img = new Image(inputstream, 70, 70, false, false); imagen = new ImageView(img); imagen.setX(5+bicicleta.x); imagen.setY(bicicleta.y-40); root.getChildren().add(imagen); //Crea los botones Button boton1 = new Button(); Button boton2 = new Button(); Button boton3 = new Button(); Button boton4 = new Button(); Button boton5 = new Button(); Button boton6 = new Button(); Button boton7 = new Button(); Button boton8 = new Button(); //Setea el texto de los botones boton1.setText("NO"); boton2.setText("N"); boton3.setText("NE"); boton4.setText("O"); boton5.setText("E"); boton6.setText("SO"); boton7.setText("S"); boton8.setText("SE"); //Se define el tamaño de los botones boton1.setPrefSize(40, 40); boton2.setPrefSize(40, 40); boton3.setPrefSize(40, 40); boton4.setPrefSize(40, 40); boton5.setPrefSize(40, 40); boton6.setPrefSize(40, 40); boton7.setPrefSize(40, 40); boton8.setPrefSize(40, 40); //Se setea la ubicación de los botones boton1.setLayoutX(0); boton1.setLayoutY(0); boton2.setLayoutX(50); boton2.setLayoutY(0); boton3.setLayoutX(100); boton3.setLayoutY(0); boton4.setLayoutX(0); boton4.setLayoutY(50); boton5.setLayoutX(100); boton5.setLayoutY(50); boton6.setLayoutX(0); boton6.setLayoutY(100); boton7.setLayoutX(50); boton7.setLayoutY(100); boton8.setLayoutX(100); boton8.setLayoutY(100); //Se agrega el eventHandler a cada boton //Se setea la acción que va a ejecutar al //ser Clickeado boton1.setOnAction(new EventHandler() { @Override public void handle(ActionEvent event) { mover(gc, bicicleta, distancia, 2.3561944901865, imagen); } }); boton2.setOnAction(new EventHandler() { @Override public void handle(ActionEvent event) { mover(gc, bicicleta, distancia, 1.570796326791001, imagen); } }); boton3.setOnAction(new EventHandler() { @Override public void handle(ActionEvent event) { mover(gc, bicicleta, distancia, 0.7853981633955001, imagen); } }); boton4.setOnAction(new EventHandler() { @Override public void handle(ActionEvent event) { mover(gc, bicicleta, distancia, 3.141592653582001, imagen); } }); boton5.setOnAction(new EventHandler() { @Override public void handle(ActionEvent event) { mover(gc, bicicleta, distancia, 0, imagen); } }); boton6.setOnAction(new EventHandler() { @Override public void handle(ActionEvent event) { mover(gc, bicicleta, distancia, 3.9269908169775, imagen); } }); boton7.setOnAction(new EventHandler() { @Override public void handle(ActionEvent event) { mover(gc, bicicleta, distancia, 4.712388980373, imagen); } }); boton8.setOnAction(new EventHandler() { @Override public void handle(ActionEvent event) { mover(gc, bicicleta, distancia, 5.4977871437685, imagen); } }); //Se setea el background de la ventana root.setStyle("-fx-background-image: url(\"mapamundi.jpg\");"); //Se agrega el canvas al root root.getChildren().add(canvas); //Agrega los botones al root root.getChildren().add(boton1); root.getChildren().add(boton2); root.getChildren().add(boton3); root.getChildren().add(boton4); root.getChildren().add(boton5); root.getChildren().add(boton6); root.getChildren().add(boton7); root.getChildren().add(boton8); //No sé que hace pero vos podés googlear tigre Scene scene = new Scene(root); //Agrega los eventos del teclado numérico scene.setOnKeyPressed(e -> { if (e.getCode() == KeyCode.NUMPAD1) { mover(gc, bicicleta, distancia, 3.9269908169775, imagen); } else if (e.getCode() == KeyCode.NUMPAD2) { mover(gc, bicicleta, distancia, 4.712388980373, imagen); } else if (e.getCode() == KeyCode.NUMPAD3) { mover(gc, bicicleta, distancia, 5.4977871437685, imagen); } else if (e.getCode() == KeyCode.NUMPAD4) { mover(gc, bicicleta, distancia, 3.141592653582001, imagen); } else if (e.getCode() == KeyCode.NUMPAD6) { mover(gc, bicicleta, distancia, 0, imagen); } else if (e.getCode() == KeyCode.NUMPAD7) { mover(gc, bicicleta, distancia, 2.3561944901865, imagen); } else if (e.getCode() == KeyCode.NUMPAD8) { mover(gc, bicicleta, distancia, 1.570796326791001, imagen); } else if (e.getCode() == KeyCode.NUMPAD9) { mover(gc, bicicleta, distancia, 0.7853981633955001, imagen); } else if (e.getCode() == KeyCode.PLUS) { //distancia++; } else if (e.getCode() == KeyCode.MINUS) { //distancia--; } }); //Para agregar la música Media media = new Media(new File("audio.mp3").toURI().toString()); MediaPlayer player = new MediaPlayer(media); player.setAutoPlay(true); MediaView mediaView = new MediaView(player); root.getChildren().add(mediaView); stage.setScene(scene); stage.setTitle("izi pizi me paseo en BICI"); stage.show(); }catch(FileNotFoundException e){ System.out.println("Ocurió un error en la carga de imagen!"); System.out.println(e.getMessage()); }catch(Exception e){ System.out.println("error: no se pudo cargar la imagen"); System.out.println(e.getMessage()); } } //Mueve la bicicleta y dibuja su recorrido //Recibe como parámetro la distancia y dirección de la bicicleta private void mover(GraphicsContext gc, Bicicleta bicicleta, double distancia, double direccion, ImageView imagen){ double xInicial = 10+bicicleta.x; //El 400 se le resta para que aparezca hacia abajo, pues las coordenadas están invertidas double yInicial = 400-bicicleta.y; bicicleta.girar(direccion); bicicleta.avanzar(distancia); double xFinal = 10+bicicleta.x; double yFinal = 400-bicicleta.y; gc.strokeLine(xInicial, yInicial, xFinal, yFinal); System.out.println(bicicleta.x+" "+ bicicleta.y+" elo"); imagen.setX(xFinal); imagen.setY(yFinal-40); } //Mueve la bicicleta y dibuja su recorrido //Recibe como parámetro solo la distancia //Avanza en la dirección que ya tenía private void mover(GraphicsContext gc, Bicicleta bicicleta, double distancia){ double xInicial = 10+bicicleta.x; double yInicial = 400-bicicleta.y; bicicleta.avanzar(distancia); double xFinal = 10+bicicleta.x; double yFinal = 400-bicicleta.y; gc.strokeLine(xInicial, yInicial, xFinal, yFinal); System.out.println(bicicleta.x+" "+ bicicleta.y+"alo"); } }