Volvemos a Java! por fin!.
Bueno, estábamos con el juego de hundir la flota, había puesto las tres clases de la que constaba el juego, tres clases bastante grandes como para entenderlo todo a la primera.
Lo que voy a hacer es sacar la información útil de este gran ejemplo, por lo tanto, vamos a ello.
Para entender mejor el código debemos estudiar primero un par de aspectos importantes, el primero se trata de "los ArrayList"
ArrayList
Primero vamos a ver la necesidad de utilizar un arraylist, como nuestro juego va sobre localizar un conjunto de "posiciones" con el fin de hundir un barco vamos a ver que es mas o menos lo que deberíamos hacer.Cuando iniciamos el programa, éste nos crea 3 barcos aleatorios (la creación de "barcos" se lleva a cabo en la clase GameHelper, es un proceso un poco complejo para estudiarlo por ahora) los barcos no son más que 3 celdas consecutivas, ya sea en horizontal o en vertical, que han sido elegidas y puestas en una "especie de Array inteligente"... de eso se trata un ArrayList. Pongamos un ejemplo para entenderlo mejor.
Imaginar que queremos colocar un "barco" (3 celdas) dentro de una tabla 1x7 (una fila y 7 columnas):
[1][2][3][4][5][6][7]
Por ejemplo, el barco estará localizado en la posición 2,3,4.
para guardas estas posiciones vamos a crear un Array de los que hemos estudiado.
int [] posicion = {2,3,4};
El usuario tiene que adivinar los 3 valores que se encuentran dentro del array. Cuando adivina uno de estos valores el array debería cambiar para evitar que el usuario no vuelva a elegir el mismo valor.
Forma 1:
Creando un nuevo array que contenga los valores que el usuario ha adivinado. Así, si la elección del usuario vuelve a ser la misma, no será válida puesto que ya está guardada en el array.
Forma 2:
Cambiando el valor original de los valores adivinados por -1. De esta forma el código solo se percatará de los valores positivos (Trabajando así con un solo array)
Forma 3:
Cada vez que el usuario adivine un valor creamos otro nuevo array con los valores restantes.
Como vemos, son muy "rudimentarios" estas soluciones, pero gracias a la librería de Java nuestros problemas se harán realidad!
"Imagina un array que pudiese cambiar su tamaño cuando borremos cosas, un array al que solo basta con preguntarle si contiene el elemento que buscamos y que él nos conteste. Además de poder extraer elementos sin necesidad de saber en que posición está realmente."
Aquí es donde entra la Clase ArrayList, viene incorporada en la librería de Java (API) .
Declarando un ArrayList:
ArrayList <caja> miArrayList = new ArrayList <caja>
Lo que está entre < > es el tipo de objeto que vamos a introducir en Array. Recordar que es un array "automático" en el cual no tenemos que preocuparnos en la posición en la que se encuentran los objetos que agregamos, pero justo a causa de esto, tenemos que especificarle o, mejor dicho, asegurarle al Array que lo que vamos a introducir son objetos de la MISMA CLASE.
Introduciendo valores:
caja a = new caja();
miArrayList.add (a);
caja b = new caja();
miArrayList.add (b);
Cuantas cosas hay en el array:
int elTamaño = miArrayList.size ();
Descubrir si contiene algún objeto:
boolean contiene = miArrayList.contains (b);
Descubrir en que posición se encuentra un objeto:
int donde = miArrayList.indexOf (b);
Saber si está vacio:
boolean vacio = miArrayList.isEmpty ();
Borrar algo del array:
miArrayList.remove (a);
Arrays vs ArrayList:
* Los arrays requieren que se le definan un tamaño, los ArrayList no.
* Los arrays usan una sintaxis que no se usa en ninguna parte más de java, me refiero a los corchetes [ ]
cuando decimos miArray [2] refiriéndonos a aquello que hay en la tercera posición del array [0][1][2]
* Para añadir algo a un array tenemos que elegir nosotros la posición en la que queremos añadirlo, en los ArrayList NO.
* A pesar de ello, los ArrayList tienen una "parametrización" (lo que va dentro de < >) que te obliga a introducirle dentro SOLAMENTE objetos de esa clase.
* Los ArrayList necesitan ser importados de la librería de java mediante el código:
import java.util.ArrayList;
al inicio del código.
Convertir un String a un Int
Esto se estudiará más adelante de una forma mucho más detallada pero como lo necesitamos para entender el código...
int guess = Integer.parseInt(stringGuess);
Pasamos la cadena de caracteres "stringGuess" a un "int", lógicamente la cadena de caracteres stringGuess debería ser un valor entero (sin decimales).
Función "For" mejorada y no mejorada.
Con la versión 5 de Java llegó una revolución a la función "for", que nos permitía ahorrarnos varios pasos facilitando la creación del código.
"for" clásico:
for (int i = 0; i < 10; i++) {
//Repetir esto 10 veces
}
"for" mejorado:
for (String name: nameArray) {
//Para cada valor del Array "nameArray" copia dicho valor en la variable name y recorre el array.
}
No hay comentarios:
Publicar un comentario