Something.java 9.9 KB
Newer Older
Pedro Rolon committed
1 2 3 4 5 6 7 8 9 10 11 12
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;  
13 14 15 16 17
import javafx.scene.control.Button;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.input.KeyEvent;
import javafx.scene.input.KeyCode;
18
import javafx.scene.paint.Color;
19 20 21
import javafx.scene.media.*;
import java.io.File;
import java.io.*;
22
//import Bicicleta;
Pedro Rolon committed
23 24 25 26 27 28 29 30 31 32 33

public class Something extends Application
{
    public static void main(String[] args)
    {
        Application.launch(args);
    }

    @Override
    public void start(Stage stage)
    {
34
        //Variable para la distancia que va a avanzar la bici
35
        double distancia = 10;
36
        
37
        Canvas canvas = new Canvas(1300, 800);
Pedro Rolon committed
38
        GraphicsContext gc = canvas.getGraphicsContext2D();
39
       
40
        gc.setLineWidth(5.0);
41 42
        //gc.setStroke(Color.BLUE); //Para poner en azul la linea
        
43
        Pane root = new Pane();
44
        
45
        ImageView imagen;
Pedro Rolon committed
46 47
        Bicicleta bicicleta = new Bicicleta();

48 49
        

Pedro Rolon committed
50
        try{
51
            
52
            FileInputStream inputstream = new FileInputStream("bici.png");
53
            
Pedro Rolon committed
54
            //se setea el tamaño de la imagen!
55
            Image img = new Image(inputstream, 70, 70, false, false);
56
           
57 58 59 60

            imagen = new ImageView(img);

            imagen.setX(5+bicicleta.x);
61
            imagen.setY(bicicleta.y-40);
62 63 64 65 66 67 68 69 70 71 72 73 74
            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();
75 76 77 78 79 80 81 82 83 84 85 86 87


            //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
88
            boton1.setPrefSize(40, 40);
89 90 91 92 93 94 95 96 97
            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
98 99
            boton1.setLayoutX(0);
            boton1.setLayoutY(0);
100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124

            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            
125 126 127
            boton1.setOnAction(new EventHandler<ActionEvent>() {
                @Override
                public void handle(ActionEvent event) {
128
                    mover(gc, bicicleta, distancia, 2.3561944901865, imagen);
129 130 131 132 133 134 135 136 137 138 139 140 141
                }
            });

            boton2.setOnAction(new EventHandler<ActionEvent>() {
                @Override
                public void handle(ActionEvent event) {
                    mover(gc, bicicleta, distancia, 1.570796326791001, imagen);
                }
            });

            boton3.setOnAction(new EventHandler<ActionEvent>() {
                @Override
                public void handle(ActionEvent event) {
142
                    mover(gc, bicicleta, distancia, 0.7853981633955001, imagen);
143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162
                }
            });

            boton4.setOnAction(new EventHandler<ActionEvent>() {
                @Override
                public void handle(ActionEvent event) {
                    mover(gc, bicicleta, distancia, 3.141592653582001, imagen);
                }
            });

            boton5.setOnAction(new EventHandler<ActionEvent>() {
                @Override
                public void handle(ActionEvent event) {
                    mover(gc, bicicleta, distancia, 0, imagen);
                }
            });

            boton6.setOnAction(new EventHandler<ActionEvent>() {
                @Override
                public void handle(ActionEvent event) {
163
                    mover(gc, bicicleta, distancia, 3.9269908169775, imagen);
164 165 166 167 168 169 170 171 172 173 174 175 176
                }
            });

            boton7.setOnAction(new EventHandler<ActionEvent>() {
                @Override
                public void handle(ActionEvent event) {
                    mover(gc, bicicleta, distancia, 4.712388980373, imagen);
                }
            });

            boton8.setOnAction(new EventHandler<ActionEvent>() {
                @Override
                public void handle(ActionEvent event) {
177
                    mover(gc, bicicleta, distancia, 5.4977871437685, imagen);
178 179 180 181
                }
            });


182
            //Se setea el background de la ventana
183
            root.setStyle("-fx-background-image: url(\"mapamundi.jpg\");");
184 185
            
            //Se agrega el canvas al root
186
            root.getChildren().add(canvas);
187 188

            //Agrega los botones al root
189 190 191 192 193 194 195 196 197
            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);
            
198
            //No sé que hace pero vos podés googlear tigre
199 200
            Scene scene = new Scene(root);

201
            //Agrega los eventos del teclado numérico
202 203
            scene.setOnKeyPressed(e -> {
                if (e.getCode() == KeyCode.NUMPAD1) {
204
                    mover(gc, bicicleta, distancia, 3.9269908169775, imagen);
205 206 207 208 209
                }
                else if (e.getCode() == KeyCode.NUMPAD2) {
                    mover(gc, bicicleta, distancia, 4.712388980373, imagen);
                }
                else if (e.getCode() == KeyCode.NUMPAD3) {
210
                    mover(gc, bicicleta, distancia, 5.4977871437685, imagen);
211 212 213 214 215 216 217 218
                }
                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) {
219
                    mover(gc, bicicleta, distancia, 2.3561944901865, imagen);
220 221 222 223 224
                }
                else if (e.getCode() == KeyCode.NUMPAD8) {
                    mover(gc, bicicleta, distancia, 1.570796326791001, imagen);
                }
                else if (e.getCode() == KeyCode.NUMPAD9) {
225
                    mover(gc, bicicleta, distancia, 0.7853981633955001, imagen);
226 227 228 229 230 231 232 233 234 235
                }
                else if (e.getCode() == KeyCode.PLUS) {
                    //distancia++;
                }
                else if (e.getCode() == KeyCode.MINUS) {
                    //distancia--;
                }
                
            });

236 237 238 239 240 241 242 243
            //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);


244
            stage.setScene(scene);
245
            stage.setTitle("izi pizi me paseo en BICI");
246
            stage.show();
247

Pedro Rolon committed
248 249 250 251 252 253 254
        }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());
        }
255 256

        
Pedro Rolon committed
257 258 259 260
    } 

    //Mueve la bicicleta y dibuja su recorrido
    //Recibe como parámetro la distancia y dirección de la bicicleta
261
    private void mover(GraphicsContext gc, Bicicleta bicicleta, double distancia, double direccion, ImageView imagen){
Pedro Rolon committed
262 263 264 265 266 267 268 269 270 271 272 273 274
        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");

275 276
        imagen.setX(xFinal);
        imagen.setY(yFinal-40);
Pedro Rolon committed
277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296
    }

    //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");

    }
    
}