You are on page 1of 12

Programando con Greenfoot

Greenfoot es una herramienta de software diseada para que los principiantes obtengan experiencia en programacin orientada a objetos. Apoya el desarrollo de aplicaciones grficas en Java . http://www.greenfoot.org/

Abrir el escenario Crabs En el lado derecho, vemos las clases que participan en este escenario. Clic derecho sobre la clase Crab y seleccionar new Crab(). Una nueva instancia de la clase Crab es creada, arrastrarla y colocarla en el mundo. Clic Run. No pasa nada Tendremos que programar al cangrejo para que pueda moverse.

Hagamos que el cangrejo haga algo. Abrir el editor del cangrejo. Vemos que la clase contiene el mtodo vaco:
public void act(){ }

Insertar el mtodo move(); en el cuerpo del mtodo act().


public void act(){ move(); }

Cerrar el editor y hacer clic sobre el botn Compille All. Colocar nuevamente un cangrejo en el mundo. Probar haciendo clic sobre Run.

Ahora el cangrejo ya sabe moverse, hagamos ahora que aprenda a girar. Modificar el cdigo, usando el editor, para incluir el comando turn(). Notar que el mtodo turn necesita de un parmetro (valor entero) que indica el nmero de grados que girar. En el ejemplo usaremos 5 grados.
public void act(){ move(); turn(5); }

Compilar, colocar un cangrejo en el mundo otra vez. Probar haciendo clic en Run. Probar tambin aadiendo mltiples cangrejos.

Los mtodos move y turn pertenecen a la clase animal. Observemos que otros mtodos tiene disponible. Abrir el editor de la clase Animal, y cambiar a la vista Documentation para cambiar de vista ir al men ubicado en la parte superior derecha del editor. Los mtodos de la clase Animal son:
Animal() -> constructor de la clase Animal. act() -> mtodo vaco. Por defecto los animales no realizan ninguna accin. atWordEdge() -> Determina si estamos cerca de unos de los bordes del mundo. De ser as retorna true. canSee(java.lang.Class clss ) -> Retorna true si puede ver un objeto de la clase clss. Retorna false de no ser as. eat(java.lang.Class clss )-> Intenta comer un objeto de la clase clss. Solamente ser exitoso si encuentra un objeto en el mismo lugar en donde estamos. De otra manera el mtodo no hace nada. move() -> Mueve hacia adelante en la direccin actual. turn(int angle) -> gira angle grados hacia la derecha.

Como vimos en la diapositiva (slide) anterior, el mtodo atWorldEdge() chequea si nos encontramos cerca de unos de los bordes del mundo. Modificar el cdigo, utilizando este mtodo para girar solo cuando sea necesario.
public void act() { if (atWorldEdge()) { turn(13); } move(); }

Colocar varios cangrejos y probar que sucede.

Antes de seguir con el ejemplo, veremos algunas reglas de notacin. En la POO el tipo de notacin que se utiliza para la definir clases, mtodos y atributos, es la notacin camello. La notacin camello es el uso de letras minsculas y maysculas para identificar las diferentes palabras que conforman el nombre de una clase, mtodo, etc.
Las clases, siempre deben comenzar con letra mayscula y deben continuar con minscula, de conformarse el nombre por ms de una palabra, comenzar la prxima con letra mayscula.
Ejemplos: Animal, CrabWorld

Los objetos, mtodos y atributos, siempre deben escribirse en letra minscula, slo usaremos una letra mayscula si es que el nombre se compone por ms de una palabra, ir una mayscula en la primer letra de la palabra que continua.
Ejemplos: move(), turn(), atWorldEdge(), angle.

Las constantes, siempre se escriben utilizando letras maysculas. Se permite el uso del guin bajo para separar las palabras que componen el nombre.
Ejemplos: WALKING_SPEED, EAST, NORT, WEST, SOUTH. Ejemplos: java.util, java.text, javax.swing.

Los paquetes, conjuntos de clases agrupadas, se representan siempre en letra minuscula.

Ahora vamos a crear una nueva clase, de otro tipo de animal. Seleccionar new subClass() en el men de la clase Animal. Nombrar a la clase Worm. Seleccionar de las imgenes disponibles la imagen del gusano de arena y hacer clic en Ok Compilar nuevamente y colocar un gusano en el mundo.

A continuacin, vamos a modificar al cangrejo, para que pueda capturar a los gusanos. El primer paso, consiste poder ser capaces de controlar al cangrejo con el teclado. Cada tecla del teclado se identifica con un nombre, por ejemplo, la tecla del cursor izquierda se llama left. Para agregar el control del teclado:
public void act() { if (Greenfoot.isKeyDown("left")) { turn(-7); } if (Greenfoot.isKeyDown("right")) { turn(7); } move(); }
Notar que el mtodo isKeyDown, es un mtodo esttico de la clase Greenfoot. Los metdos estticos (tambin llamados mtodos de clase) son aquellos metdos que se puden invocar sin la necesidad de crear una instancia de una clase, es decir, son accesibles desde afuera del contexto del objeto Son utilizados para producir acciones que no estn asociadas a ningn objeto en particular.

Ahora, haremos que el cangrejo se coma a los gusanos cuando se cruce con ellos. Podemos usar los mtodos eat() y canSee() de la clase Animal.
public void act() { if (Greenfoot.isKeyDown("left")) { turn(-7); } if (Greenfoot.isKeyDown("right")) { turn(7); } move(); if (canSee(Worm.class)) { eat(Worm.class); } }

Compilar, colocar un cangrejo y algunos gusanos. Probar que sucede.

Si queremos hacer este escenario un poco ms interesante, podemos aadir otra criatura que persiga el cangrejo. Vamos a aadir una langosta que se ejecuta en torno al azar y trata de comer los cangrejos. Aadir como sub clase de Animal a una langosta o lobster de la forma en que lo hicimos antes. Agregar el siguiente cdigo en el mtodo act() de la clase Lobster. Ahora aadir un cangrejo, tres langostas y unos gusanos al mundo y ver si puedes conseguir todos los gusanos antes de que la langosta te capture!
public void act() { if (atWorldEdge()) { turn(17); } move(); if (Greenfoot.getRandomNumber(100) > 90) { turn(Greenfoot.getRandomNumber(90)-45); } if (canSee(Crab.class)) { eat(Crab.class); } }

El ltimo paso es aadir algunos sonidos al pequeo juego que hemos creado. En la clase Crab, en el lugar del cdigo donde el cangrejo come al gusano, colocar un mtodo para reproducir un sonido. Dos archivos de sonido, con los nombres "slurp.wav" y "au.wav" se proporcionan en este escenario.
if (canSee(Worm.class)) { eat(Worm.class); Greenfoot.playSound("slurp.wav"); }

Del mismo modo, agregar el mtodo playSound que reproduzca el archivo au.wav en la clase Lobster cuando la langosta se come al gusano.

You might also like