Anuncios

Bienvenidos sean a este post, hasta ahora declaramos nuestras variables pero no las definimos, tambien agregamos funciones pero que solo nos notifican en el log de la app, hoy haremos nuestros primeros pasos.

Anuncios

La primera accion en nuestra app sera la generacion de las primeras coordenadas de nuestro submarino para ello usaremos a la clase Random y la implementaremos dentro de la funcion nuevo, para ello modificaremos de la siguiente forma a la funcion nuevo en MainActivity:

    void nuevo()
    {
        Random alazar = new Random();
        subHorPosicion = alazar.nextInt();
        subVerPosicion = alazar.nextInt();
        Log.d("Depurando","En el nuevo()");
        Log.d("Depurando","subHorPosicion: " + subHorPosicion);
        Log.d("Depurando","subVerPosicion: " + subVerPosicion);
    }
Anuncios

Primero crearemos una variable llamada alazar de la clase Random y la construiremos, nuestro siguiente paso sera asignar valores a subHorPosicion y subVerPosicion por medio de alazar y el metodo nextInt, esta es la funcion que hace la “magia” y asigna numeros al azar, despues nuevamente por medio de Log mostraremos los valores asignados, veamos un ejemplo

Anuncios

Si lo corren en varias veces deberan obtener distintos valores cada vez que se inicia.

Anuncios
Nota: Deberia agregarse automaticamente por medio de Alt+Enter el paquete de esta clase pero en caso de no hacerlo, agreguen la siguiente linea con los otros paquetes:
import java.util.Random;
Anuncios

A las variables declaradas en este post les agregaremos las siguientes:

    Display vista;
    Point tamano;
Anuncios

En este caso crearemos dos objetos, uno de tipo Display y otro de tipo Point, el primero nos servira para establecer la pantalla de nuestro dispositivo y la segunda la usaremos para calcular el tamaño, pasemos a la siguiente modificacion.

Anuncios

Para nuestra siguiente modificacion definiremos algunas de las variables declaradas anteriormente, para ello agregaremos las siguientes lineas en la funcion nuevo:

        vista = getWindowManager().getDefaultDisplay();
        tamano = new Point();
        vista.getSize(tamano);
        numHorPixels = tamano.x;
        numVerPixels = tamano.y;
        ancGrilla = 40;
        tamBloque = numHorPixels / ancGrilla;
        altGrilla = numVerPixels / tamBloque;
        disparos = 0;
        distDesdeSub = 0;
        impacto = false;
        depuracion =false;
Anuncios
Anuncios

En la primera linea definimos al objeto para obtener la pantalla de manera predeterminada, con la segunda linea generamos un punto con una coordenada X e Y iniciales, la tercer linea se encargara de obtener el tamaño de la pantalla en conjunto al punto que generamos anteriormente e ira hasta el final de la misma, nuestras siguientes dos lineas almacenaran el valor en el eje X de tamano y el valor del eje Y de tamano en numHorPixels y numVerPixels respectivamente, luego definiremos un valor predeterminado para ancGrilla y con este valor dividiendo al valor obtenido en numHorPixels lo asignaremos a tamBloque, con este valor obtenido lo usamos para dividir a numVerPixels y lo asignaremos a altGrilla, y los valores booleanos seran false de manera predeterminada porque nuestro juego no esta iniciado y no ocurrio ninguna de esas dos acciones, nuestra siguiente modificacion sera en el bloque anterior y lo modificaremos de la siguiente manera:

        subHorPosicion = alazar.nextInt(numHorPixels);
        subVerPosicion = alazar.nextInt(numVerPixels);
Anuncios

En este caso estableceremos los limites en base a los valores definidos en numHorPixels y numVerPixels, nuestra siguiente modificacion sera para mostrar los valores en el log, agregaremos el siguiente bloque:

        Log.d("Depurando","numHorPixels: " + numHorPixels);
        Log.d("Depurando","numVerPixels: " + numVerPixels);
        Log.d("Depurando","tamBloque: " + tamBloque);
        Log.d("Depurando","ancGrilla: " + ancGrilla);
        Log.d("Depurando","altGrilla: " + altGrilla);
        Log.d("Depurando","disparos: " + disparos);
        Log.d("Depurando","distDesdeSub: " + distDesdeSub);
        Log.d("Depurando","impacto: " + impacto);
        Log.d("Depurando","depuracion: " + depuracion);
Anuncios

Trabajan de la misma forma que lo explicamos anteriormente, si lo compilamos y probamos al momento de ejecutarlo nos devolvera estos datos:

Anuncios
Anuncios

En este caso podemos ver como nos devolvio todos los datos, y dos particularidades, nos devolvio el ancho y alto de la pantalla, y tambien logramos reducir los valores de posicion del submarino, solo nos va a faltar las posiciones donde se toco en pantalla, para ello debemos agregar las siguientes lineas en nuevo:

        horizTocado = -100;
        vertTocado = -100;
Anuncios

Para obtener estos ultimos datos vamos a modificar la funcion onTouchEvent de la siguiente forma:

    @Override
    public boolean onTouchEvent(MotionEvent evento)
    {
        horizTocado = (int)evento.getX();
        vertTocado = (int)evento.getY();
        Log.d("Depurando","En el onTouchEvent");
        Log.d("Depurando","horizTocado: " + horizTocado);
        Log.d("Depurando","vertTocado: " + vertTocado);
        disparar();
        return true;
    }
Anuncios
Anuncios

Las dos primeras lineas son para asignar los valores de X e Y por medio de getX y getY a las variables horizTocado y vertTocado respectivamente, si se preguntan por el (int) esto es debido a que tanto getX como getY devuelven un valor de tipo float y nuestras variables son de tipo int, esta accion se llama “castear” y es una forma de convertir dichos valores en tipo int de lo contrario devolvera un error, con estos valores obtenidos nos encargamos de mostrarlos en el log de la aplicacion, con esto explicado veamos el codigo final de MainActivity:

package org.example.cazadordesub;

import android.app.Activity;
import android.graphics.Point;
import android.os.Bundle;
import android.util.Log;
import android.view.Display;
import android.view.MotionEvent;

import java.util.Random;

public class MainActivity extends Activity {
    int numHorPixels;
    int numVerPixels;
    int tamBloque;
    int ancGrilla;
    int altGrilla;
    int vertTocado;
    int horizTocado;
    int subHorPosicion;
    int subVerPosicion;
    boolean impacto;
    int disparos;
    boolean depuracion;
    int distDesdeSub;
    Display vista;
    Point tamano;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Log.d("Depurando","En el onCreate");
        nuevo();
        dibujar();
    }

    void dibujar()
    {
        Log.d("Depurando","En el dibujar()");
    }

    void nuevo()
    {
        vista = getWindowManager().getDefaultDisplay();
        tamano = new Point();
        vista.getSize(tamano);
        numHorPixels = tamano.x;
        numVerPixels = tamano.y;
        tamBloque = 44;
        ancGrilla = 40;
        altGrilla = 24;
        disparos = 0;
        distDesdeSub = 0;
        impacto = false;
        depuracion =false;
        Random alazar = new Random();
        subHorPosicion = alazar.nextInt(numHorPixels);
        subVerPosicion = alazar.nextInt(numVerPixels);
        horizTocado = -100;
        vertTocado = -100;

        Log.d("Depurando","En el nuevo()");
        Log.d("Depurando","subHorPosicion: " + subHorPosicion);
        Log.d("Depurando","subVerPosicion: " + subVerPosicion);
        Log.d("Depurando","numHorPixels: " + numHorPixels);
        Log.d("Depurando","numVerPixels: " + numVerPixels);
        Log.d("Depurando","tamBloque: " + tamBloque);
        Log.d("Depurando","ancGrilla: " + ancGrilla);
        Log.d("Depurando","altGrilla: " + altGrilla);
        Log.d("Depurando","disparos: " + disparos);
        Log.d("Depurando","distDesdeSub: " + distDesdeSub);
        Log.d("Depurando","impacto: " + impacto);
        Log.d("Depurando","depuracion: " + depuracion);

    }

    void disparar()
    {
        Log.d("Depurando","En el disparar()");
        dibujar();
    }

    void imprimirDebug()
    {
    }

    @Override
    public boolean onTouchEvent(MotionEvent evento)
    {
        horizTocado = (int)evento.getX();
        vertTocado = (int)evento.getY();
        Log.d("Depurando","En el onTouchEvent");
        Log.d("Depurando","horizTocado: " + horizTocado);
        Log.d("Depurando","vertTocado: " + vertTocado);
        disparar();
        return true;
    }
}
Anuncios

Para finalizar vamos a ver el siguiente video donde veremos como funciona nuestra aplicacion:

Anuncios

Con este video podemos observar como funciona el log tanto al inicio y despues vemos como reacciona nuestro log cuando tocamos la pantalla y nos devuelve las coordenadas del lugar donde presionamos.

Anuncios

En resumen, hoy hemos visto como dejar una aplicacion practicamente funcional a nivel interno, hemos visto como generar numeros al azar, como definir variables, como asignarles valores obtenidos por otros metodos, y por ultimo como obtener los datos de cuando se presiona la pantalla, espero les haya gustado sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios

Tengo un Patreon donde podes acceder de manera exclusiva a material para este blog antes de ser publicado, sigue los pasos del link para saber como.

Tambien podes donar

Es para mantenimiento del sitio, gracias!

$1.00