- Obtener enlace
- X
- Correo electrónico
- Otras aplicaciones
- Obtener enlace
- X
- Correo electrónico
- Otras aplicaciones
Buen día para
todos mis lectores, después de algunos días de ausencia, aquí les tengo la cuarta
parte del proyecto de la tortuga en el entorno Greenfoot, como les había dicho
ya, nuestra tortuga enfrentará una situación aún más peligrosa (porque ya bastante
riesgo era morir de una sobredosis de pizza), la pondremos en la mira de un
depredador, para ser más precisos, una serpiente, así que aquí les va...
Hemos creado ya
una tortuga controlada por teclado que camina y come pizza. En este articulo,
empezaremos a hacer las cosas más interesantes introduciendo un depredador que
está tras nuestra tortuga—nuestra
tortuga no solo debe recolectar las rebanadas de pizza, ¡sino que también debe
evitar ser comida por una serpiente mientras o hace! Vamos a continuar desde
donde dejamos nuestro proyecto la vez anterior, así que si te perdiste los
artículos pasados, quizá sea una buena idea verlos primero para ver cómo
llegamos hasta aquí (Parte 1, Parte 2, Parte 3).
Limpiando Nuestro Código
El
método act de
nuestra tortuga, como lo dejamos la última vez, se muestra a continuación:
Antes de que vayamos a añadir más funcionalidad a nuestro programa (y, en el proceso, hacer nuestro código más complejo), es una buena idea tomarse un minuto para mejorar la estructura de nuestro código. Especialmente, nuestro método act se está volviendo un poco largo, y está comenzando a tomar algo de esfuerzo para leerlo y darse cuenta de lo que hace.
En
general, deberíamos apegarnos a mantener nuestros métodos cortos y claros (o
como diría Steve Oualline, apegarnos al principio KISS: “Keep It Simple, Stupid”). Podemos hacer esto rompiendo el método act en
múltiples métodos, cada uno definiendo una tarea lógica. En nuestro ejemplo,
nuestro método act hace
dos tareas lógicas distintas:
Antes de que vayamos a añadir más funcionalidad a nuestro programa (y, en el proceso, hacer nuestro código más complejo), es una buena idea tomarse un minuto para mejorar la estructura de nuestro código. Especialmente, nuestro método act se está volviendo un poco largo, y está comenzando a tomar algo de esfuerzo para leerlo y darse cuenta de lo que hace.
- Movimiento (moverse hacia adelante y posiblemente girando)
- Buscar pizza (y posiblemente comiéndola)
Podemos mover cada una de estas dos tareas en un método por
separado, y entonces llamar a cada método desde el método act. En esta versión del código,
hemos definido dos métodos adicionales, moveAndTurn
y eat. Da una buena mirada a continuación para ver cómo fue hecho esto:
Cada una
de las definiciones de método tiene una sección al inicio conteniendo algunos
asteriscos. Por ejemplo, el método eat comienza con esto:
Este es un comentario de método.Un comentario es escrito para el programador (no para la computadora). El comentario explica, en tus palabras, (o las de otro programador si estás viendo el comentario de alguien más) el propósito del método que está debajo. Las líneas siguientes al comentario definen el método. Te darás cuenta que los cuerpos de los métodos contienen exactamente el mismo código que estaba previamente en el cuerpo del método act.
Podemos hacer el primer cambio dirigiéndonos al método eat de la serpiente y reemplazando todas las menciones de “pizza” con “turtle”, como se muestra a continuación:
Este es un comentario de método.Un comentario es escrito para el programador (no para la computadora). El comentario explica, en tus palabras, (o las de otro programador si estás viendo el comentario de alguien más) el propósito del método que está debajo. Las líneas siguientes al comentario definen el método. Te darás cuenta que los cuerpos de los métodos contienen exactamente el mismo código que estaba previamente en el cuerpo del método act.
Ahora, el
método act contiene sólo llamadas a los dos nuevos métodos:
Nota que esta versión de nuestro código hace exactamente lo mismo que la
versión anterior—es funcionalmente equivalente. De todas formas, a causa de que lo hemos
cortado en partes más pequeñas, es ahora más fácil de leer, y podemos reconocer
más fácilmente qué hace el método act.
Deberías
hacer los mismos cambios en tu propio código.
¡Serpientes Abordo!
Ahora que
hemos mejorado la estructura de nuestro código, podemos seguir adelante
añadiendo cosas a nuestro proyecto. Queremos introducir un enemigo de nuestra
tortuga: serpientes.
Comienza por crear otra
subclase de Actor, llamada Snake, con la imagen de una serpiente. Recuerda, puedes crear una subclase de
Actor dando click derecho a la clase Actor y eligiendo New subclass.
Nombra a la clase Snake y elige una imagen de serpiente de la categoría Animals como se muestra a continuación:
Compila tu
scenario y pon unas cuantas
serpientes en el mundo como se muestra a continuación:
Quizá
quieras salvar el mundo de nuevo (click derecho en la imagen de fondo del mundo
y elige Save the World) agrega tus
serpientes al mundo salvado.
Comportamiento de la serpiente
Inicialmente,
nuestra serpiente no hace nada.
Nos
gustaría que ellas se movieran en toda la pantalla al azar y trataran de
comerse a la tortuga.
La meta
para el jugador, entonces, es controlar a la tortuga y comer todas las
rebanadas de pizza mientras evade las serpientes.
Podemos
empezar copiando todos los tres métodos de la clase Turtle (act, moveAndTurn, eat) en la clase Snake.
Haz esto usando copy y paste para
remplazar el método act que está vacío por default en la clase Snake. Asegúrate de ver
las llaves { } —El cuerpo de la clase aún necesita una llave que abra ‘{’ y
otra que cierre ‘}’. En este punto, quizá quieras compilar y correr tu scenario para probar lo que hace. No es
exactamente lo que queremos aún, pero hace algo. (Verás que las serpientes
siguen tus presiones de tecla, exactamente como lo hace la tortuga.)
Hay dos cosas que nos gustaría cambiar en la
clase Snake del comportamiento copiado de la tortuga. Primero, las serpientes
deberían comer tortugas, no pizza. Y segundo, las serpientes deberían moverse
por su cuenta (al azar), en lugar de ser controladas por el teclado.
Presta atención a la capitalización: Letras mayúsculas y minúsculas
deben ser usadas exactamente como se muestran. Cuando escribimos Turtle (con T mayúscula), nos estamos refiriendo a la clase Turtle. Cuando escribimos
en minúsculas (turtle), nos estamos
refiriendo a una variable.
Entradas Relacionadas:
Aprender Java creando un juego (Parte 6)
Aprender Java creando un juego (Parte 5)
Aprender Java creando un juego (Parte 3)
Aprender Java creando un juego (Parte 2)
Aprender Java creando un juego (Parte 1)
Prueba tu scenario.
Las serpientes deberían comer tortugas, no pizza.
Caminando
al azar
En este momento, las serpientes siguen
controladas por las mismas teclas que dirigen a las tortugas. Eso no es bueno.
Podemos cambiar esto, primer haciendo a la serpiente correr en círculos.
Elimina el código del cuerpo del método moveAndTurn de la serpiente
que implementa un giro controlado por teclado, y reemplazalo con una simple
sentencia turn(3). El método debería verse ahora así:
Inténtalo. Las serpientes ahora se mueven por su cuenta (aún cuando es en un patrón muy predecible).
Ahora queremos hacer el movimiento más aleatorio. Para hacer esto, podemos usar un método de la clase Greenfoot llamado getRandomNumber. Este método va a darnos un número aleatorio entre 0 y el límite especificado. Por ejemplo, lo siguiente nos dará un número aleatorio entre 0 y 19 (el límite especificado en sí siempre es excluido):
Podemos usar este método para hacer las vueltas de las serpientes menos predecibles.Si usamos un número aleatorio como parámetro para el método turn (en lugar del número 3 que usábamos anteriormente), la serpiente debería caminar más aleatoriamente:
Si intentas esto, te darás cuenta de que la serpiente sigue moviéndose en círculo, aunque es un círculo algo irregular. La razón es que las vueltas—aún cuando tienen algo de aleatorias—son siempre vueltas a la derecha.
Inténtalo. Las serpientes ahora se mueven por su cuenta (aún cuando es en un patrón muy predecible).
Ahora queremos hacer el movimiento más aleatorio. Para hacer esto, podemos usar un método de la clase Greenfoot llamado getRandomNumber. Este método va a darnos un número aleatorio entre 0 y el límite especificado. Por ejemplo, lo siguiente nos dará un número aleatorio entre 0 y 19 (el límite especificado en sí siempre es excluido):
Podemos usar este método para hacer las vueltas de las serpientes menos predecibles.Si usamos un número aleatorio como parámetro para el método turn (en lugar del número 3 que usábamos anteriormente), la serpiente debería caminar más aleatoriamente:
Si intentas esto, te darás cuenta de que la serpiente sigue moviéndose en círculo, aunque es un círculo algo irregular. La razón es que las vueltas—aún cuando tienen algo de aleatorias—son siempre vueltas a la derecha.
Para arreglar esto, necesitamos
hacer a la serpiente girar a la izquierda también. Girar a la izquierda puede
hacerse girando en un ángulo negativo. En lugar de girar entre 0 y 20 grados,
nos gustaría girar entre menos 20 grados y 20 grados.
Podemos
lograr esto con el siguiente cambio:
Eso es, primero obtenemos un número aleatorio usando 40 como el límite especificado, y entonces restamos 20 de él. El resultado estará entre -20 y 20. (En realidad, si
piensas con cuidado sobre ello, esto es un tanto incorrecto. El resultado sería
entre -20 y 19. ¿Puedes descubrir por qué? ¿Puedes corregirlo? No es realmente
muy importante en nuestro contexto corregir esta ligera imprecisión—la
serpiente se mueve erráticamente, así que un poco de tendencia no duele mucho.)
Tip: Puedes ver y descargar muchos programas
Greenfoot Java en el sitio web de Greenfoot.
Intenta esta instrucción de giro (en lugar del anterior turn(3)) en tu propio código.
¡Verás que el juego de pronto se vuelve mucho más
interesante!
Mejorando el
juego
Hay muchas formas en las cuales podrías mejorar este juego.
En lugar de hablarlo deberías probar algo de eso ahora mismo, te mostraré algo
más útil: cómo puedes averiguar más por tu cuenta.
Hasta ahora, introdujimos varios métodos útiles que podemos
usar, como move
y
turn en la
clase Actor
y getRandomNumber de la clase Greenfoot. Así que, ¿cómo descubrir que
otros métodos están para usarlos?
La respuesta está en buscar la documentación de clase. Elige Greenfoot
Class Documentation del menú Help
de Greenfoot. Esto abrirá un explorador web que enlista todas las clases en el
sistema Greenfoot. (Verás que hay seis clases: Actor, World, Greenfoot, GreenfootImage, GreenfootSound y MouseInfo.)
Da click en la clase Greenfoot para ver la documentación para esta clase. Si tú te
desplazas un poco en la página, verás una lista d métodos disponibles en la
clase. Están los métodos getRandomNumber e isKeyDown
que ya hemos usado y un buen número de otros tantos.
El formato mostrado está en el llamado javadoc. Es un formato estándar para documentar métodos Java, y
esto ayuda a determinar lo que clases particulares pueden hacer. La
documentación incluye el tipo devuelto (lo que el método regresa cuando lo
llamas), la firma (que es, el nombre y parámetros), y un comentario explicando
lo que hace el método. Aquí, puedes averiguar todo acerca de otros métodos
disponibles y cómo puedes llamarlos.
Por ahora, te dejaré explorar estos métodos por tu cuenta.
(Las clases más interesantes para mirar inicialmente son Actor y Greenfoot.)
Conclusión
En este artículo, aprendiste unas cuantas cosas
específicas acerca del código Java y algunos principios generales:- El código debe ser estructurado de manera que tengas métodos pequeños y cada uno haga una tarea lógica. (El método act en sí debería muchas veces contener sólo llamadas a otros métodos.)
- Los números aleatorios se pueden usar para crear comportamiento aleatorio en nuestro programa (como movimiento aleatorio).
- Puedes encontrar acerca de los métodos disponibles en las clases Greenfoot buscando en la documentación de clase Greenfoot.
- La documentación de clase es provista en formato javadoc, el cual te muestra información acerca de todas las clases disponibles y acerca de cada método dentro de cada clase.
Y bien, eso es todo por
este artículo, espero lo hayan disfrutado, no se pierdan los siguientes porque
se añadirá más “inteligencia” a la serpiente y en el camino aprenderemos más de
la clase World de Greenfoot.
Si no quieren perderse
lo que sigue, pero tampoco pueden venir a revisar mis entradas cada que
recuerden, lo ideal sería suscribirse vía mail, ¿cómo? Escribiendo su correo en
la parte superior derecha de mi blog, donde dice “Noticias del blog a tu Email”
dan click en “Submit” y de esa forma cada que suba una entrada tendrán un aviso
en su bandeja de correo, y pues ya saben, criticas, dudas, peticiones o
comentarios abajo, saludos.
Traducción: El Blog De Baro.
Escrito por: Michael Kölling.
Fuente: Java Magazine.Entradas Relacionadas:
Aprender Java creando un juego (Parte 6)
Aprender Java creando un juego (Parte 5)
Aprender Java creando un juego (Parte 3)
Aprender Java creando un juego (Parte 2)
Aprender Java creando un juego (Parte 1)
aprender java creando un juego
Greenfoot
java
Java Greenfoot
Java magazine
java poo
Juegos
Juegos en java
poo
Principiantes java
Programación
Video juegos
Video juegos Greenfoot
- Obtener enlace
- X
- Correo electrónico
- Otras aplicaciones
Comentarios
Publicar un comentario