1. Herencia
Para trabajar con el motor de juego de CodeGym, deberá utilizar la herencia . Pero, ¿y si no sabes qué es eso? Por un lado, es necesario comprender y estudiar este tema. Por otro lado, el motor está especialmente diseñado para ser muy simple, de modo que pueda arreglárselas con un conocimiento superficial de la herencia.
Entonces, ¿qué es la herencia? En términos simples, la herencia es una relación entre dos clases. Uno de ellos actúa como la clase principal y el otro se convierte en la clase secundaria (descendiente). Es más, es posible que una clase principal ni siquiera sepa que tiene clases descendientes. En otras palabras, el padre no se beneficia mucho de tener clases descendientes.
Pero la herencia da muchas ventajas a la clase secundaria. El más importante de ellos es que todas las variables y métodos de la clase principal aparecen en la clase secundaria, como si el código de la clase principal se hubiera copiado directamente en la clase secundaria. Esto no es del todo exacto, pero será suficiente para una comprensión básica de la herencia.
Aquí hay algunos ejemplos para ayudarlo a comprender mejor la herencia.
Ejemplo 1 : este es el ejemplo más simple
|
La Child clase hereda la Parent clase con la ayuda de la extends palabra clave. |
|
Ejemplo 2: usar las variables de la clase principal
|
La Child clase puede usar los campos age y name de la Parent clase como si estuvieran declarados en la Child clase misma. |
|
Ejemplo 3: uso de métodos de la clase principal
|
La Child clase puede usar las variables y métodos de la clase Padre como si estuvieran declarados en la Child clase. En este ejemplo, usamos el getName() método. |
|
Omitiendo algunos detalles, podemos decir que desde la perspectiva del compilador de Java, simplemente copiamos el código de la clase principal en el código de la clase secundaria:
public class Child extends Parent
{
public int age; // An inherited variable
public String name; // An inherited variable
public getName() { // An inherited method
return name;
}
public void printInfo()
{
System.out.println(getName() + " " + age);
}
}
2. Anulación de métodos
A veces hay situaciones en las que hacemos que nuestra Child
clase herede una clase muy útil Parent
, lo que hace que el hijo herede todas las variables y métodos del padre. Pero algunos de esos métodos pueden no funcionar de la manera que queremos o no funcionar de la manera que queremos.
¿Qué haces en este caso? Podemos anular un método cuya implementación no nos guste . Esto es algo simple de hacer: en nuestra Child
clase simplemente declaramos un método con la misma firma que el método en la Parent
clase y luego escribimos nuestro propio código en él.
Ejemplo 1 : anulación de método
|
El printInfo() método mostrará la siguiente frase:
|
|
Simplificando un poco la situación, la herencia hace que el código de la clase principal se copie en la clase secundaria. Pero si una clase descendiente ya es un método que existe en una clase antepasada, ese método no se copia de la clase antepasada. Aquí decimos que el método en la clase secundaria anula el método en la clase principal. Mira el ejemplo de abajo. Tal vez ayude a aclarar un poco las cosas:
Así es como aparece la clase Child desde el punto de vista del compilador: |
---|
|
Ejemplo 2: un poco de magia de herencia (y anulación de métodos)
public class Parent
{
public getName() {
return "Luke";
}
public void printInfo()
{
System.out.println( getName() );
}
}
public class Child extends Parent
{
public getName() {
return "Luke, I am your father";
}
}
Si el printInfo()
método se llama en un Parent
tipo, a su vez llama al getName()
método de la Parent
clase.
Si el printInfo()
método se llama en un Child
objeto, a su vez llama al getName()
método de la Child
clase.
En otras palabras, el printInfo()
método se declara solo en la Parent
clase, pero llama al getName()
método de la Child
clase si el printInfo()
método se llama en un Child
objeto.
Ejemplo:
|
Este código muestra el siguiente texto en la pantalla:
|
|
Este código muestra el siguiente texto en la pantalla:
|
Y todo porque desde el punto de vista del compilador (una versión muy simplificada del mismo), el código de la Child
clase queda así:
public class Child extends Parent
{
public getName() {
return "Luke, I am your father";
}
public void printInfo()
{
System.out.println(getName());
}
}
3. Listas
He aquí un breve recordatorio acerca de las listas ( List
). Las listas tienen mucho en común con las matrices:
- Pueden almacenar una gran cantidad de datos de un tipo específico.
- Te permiten obtener elementos por su índice.
- Los índices de los elementos comienzan en
0
.
Ventajas de las listas:
A diferencia de las matrices, las listas pueden cambiar de tamaño dinámicamente. Inmediatamente después de la creación, el tamaño de una lista es 0
. A medida que se agregan elementos a la lista, su tamaño aumenta. Ejemplo de creación de una lista:
ArrayList<String> myList = new ArrayList<String>();
El valor indicado entre paréntesis angulares es el tipo de datos que la lista puede almacenar.
Estos son algunos métodos para trabajar con una lista:
Código | Breve descripción |
---|---|
|
Crear una nueva lista de cadenas |
|
Agregar un elemento al final de la lista |
|
Agregar un elemento al inicio de la lista |
|
Obtener un elemento por su índice |
|
Cambiar un elemento por su índice |
|
Obtener el número de elementos en la lista |
|
Eliminar un elemento de la lista |
Para obtener más información sobre las listas, puede leer los siguientes artículos:
4. Números aleatorios
El motor de juego CodeGym tiene dos métodos que se pueden usar para generar números aleatorios. Estos métodos son:
int getRandomNumber(int max)
int getRandomNumber(int min, int max)
El primer método — getRandomNumber(int max)
— devuelve un número aleatorio en el rango 0
, 1
, 2
, ... max-1
. Debajo del capó, usa la Random
clase del java.util
paquete, pero eso no cambia la forma en que usa un número aleatorio.
getRandomNumber(int)
acepta un número entero como argumento. Este número será el límite superior de los números que puede devolver el generador de números aleatorios. El límite inferior es 0. ¡Atención! El generador de números aleatorios NUNCA devolverá el valor del límite superior. Por ejemplo, si llama a getRandomNumber(3)
, devolverá aleatoriamente 0, 1 o 2. Como puede ver, no devolverá 3. Usar un generador de números aleatorios de esta manera es bastante simple, pero es adecuado para muchos casos.
El segundo método, getRandomNumber(int min, int max)
devuelve un número entero aleatorio en el rango [min, max-1]
. Nunca devolverá un número menor que min
, y nunca devolverá un número mayor que max-1
.
¿Cómo se pueden utilizar estos métodos en la práctica?
1. Dados
Suponga que desea simular el lanzamiento de un dado y obtener un número aleatorio en el rango 1-6
. ¿Como lo harias? Esto se puede hacer con un código como este:
int dice = getRandomNumber(1, 7);
Este método devolverá un número entero aleatorio en el rango 1-6
.
2. Práctica de tiro
Suponga que desea simular disparar a un objetivo y la precisión de un disparo incluye un componente aleatorio que varía en el rango de -10
hasta +10
inclusive. Esto se puede hacer con un código como este:
int dx = getRandomNumber(-10, 11);
Este método devolverá un entero aleatorio en el rango -10
de +10
.
Hay muchas formas de usar números aleatorios en los juegos. Solo estás limitado por tu imaginación. Escriba sus propios juegos, refínelos y disfrute el proceso.
Todos pueden jugar juegos, pero solo los programadores pueden crearlos.
GO TO FULL VERSION