Skip to content

Commit

Permalink
Fix juego wollok game ts
Browse files Browse the repository at this point in the history
  • Loading branch information
fdodino committed May 25, 2024
1 parent 40c90e8 commit 0b93adf
Show file tree
Hide file tree
Showing 7 changed files with 161 additions and 14 deletions.
75 changes: 72 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,76 @@

[![Build Status](https://github.com/wollok/farmvilleGame/actions/workflows/ci.yml/badge.svg)](https://github.com/wollok/farmvilleGame/actions/workflows/ci.yml)

Ejemplo de juego estilo Farmville hecho con Wollok-Game
# Ejemplo de juego estilo Farmville hecho con Wollok-Game

Wollok v1.5.0
Adaptado a v1.8.1
## Instrucciones

### Intro

Héctor es un granjero que se gana la vida cultivando maíz, trigo y tomaco.
Para ello tiene que sembrar, regar y cosechar sus cultivos.
Al cosecharlas obtiene ganancias en monedas de oro.
Héctor es muy ahorrativo y todo el oro que obtiene por sus cosechas lo acumula.

Nuestro objetivo es construir un juego en el que podamos controlar a héctor,
utilizando el teclado para moverlo alrededor del tablero.

Contamos con imágenes en la carpeta assets para ilustrar el juego.

TIP: En los nombres de las imágenes, recordar que "corn" es maíz y "wheat" es trigo en inglés.

### Sembrar
Además de moverse, Héctor debe poder realizar las siguientes acciones:
- Al apretar la M siembra una semilla de maíz en su posición actual.
- Al apretar la T siembra una semilla de trigo en su posición actual.
- Al apretar la O siembra una semilla de tomaco en su posición actual.

Al sembrar una planta, la planta nace en estado "bebé".
Podemos usar las imágenes con nombres terminados en "_baby" para mostrarlas.

Atención: para no complicar la implementación del juego,
lo mejor es permitir que haya más de una planta en la misma posición.

### Regar
Una vez sembrado un cultivo, para que crezca debe ser regado.
Cuando presionamos la R, Héctor debe regar la planta que se encuentre en su misma posición.
Si no hay una planta, podemos tirar una excepción.

Al sembrar, la planta pasa a su estado "adulto".
Para mostrarlas podemos usar las imágenes terminadas en "_adult".

TIP: Buscar la docentación de Wollok game en http://www.wollok.org/documentacion/wollokdoc/
para saber cómo obtener los objetos que están en la misma posición que Héctor.
Ojo que al hacer eso, entre los objetos que encuentren va a estar el propio Héctor.

## Cosecha
Las plantas adultas se pueden cosechar.
Cuando presionamos la C, se espera que Héctor coseche la planta que se encuentra en su misma posición.

Al hacerlo, obtiene el oro por la venta de la planta.
Al cosechar maíz obtiene 150 monedas de oro,
al cosechar trigo 100 monedas
y al cosechar tomaco 50 monedas.

Héctor debe acumular el oro y recordar cuánto oro obtuvo.
Al presionar la barra espaciadora, queremos que Héctor nos diga cuánto oro juntó en total.

## Posibles errores de Héctor.
Para poder obtener oro es necesario seguir la secuencia de sembrar-regar-cosechar.
En caso contrario, no vamos a obtener nada, es decir:
- Si regamos una planta adulta, esta no puede volver a crecer y se muere.
- Si intentamos cosechar una planta bebé, no es posible y también se muere la planta.

Para mostrar nuestras plantas muertas podemos usar la imagen "dead_plant.png".
Luego de cosechar una planta adulta, también la planta queda "muerta"
y la mostramos con la misma imagen (la única diferencia es que en este caso sí obtuvimos oro a cambio).

Otro error posible es tratar de regar o cosechar en donde no hay plantas,
en ese caso el juego debe indicar el problema al usuario.

TIP: Si al presionar una tecla, se manda un mensaje a héctor que lance una excepción,
Wollok Game automáticamente va a hacer que Héctor le diga eso al usuario.

## Demo

![demo](./videos/demo.gif)
2 changes: 1 addition & 1 deletion arbustos.wlk
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ class Arbusto {
var property position

method dibujar() {
position.drawElement(self)
game.addVisual(self)
game.whenCollideDo(self, { granjero => self.empuja(granjero) })
}

Expand Down
16 changes: 8 additions & 8 deletions granjero.wlk
Original file line number Diff line number Diff line change
Expand Up @@ -3,38 +3,38 @@ import cultivos.*

object granjero {
var property oro = 0
var cultivos = []
const cultivos = []
var property position = new Position(x = 3, y = 3)

method plantaMaiz() {
self.planta(new Maiz())
self.planta(new Maiz(position = position))
}

method plantaTrigo() {
self.planta(new Trigo())
self.planta(new Trigo(position = position))

}
method plantaTomaco() {
self.planta(new Tomaco())
self.planta(new Tomaco(position = position))
}

method planta(cultivo) {
position.clone().drawElement(cultivo)
game.addVisual(cultivo)
cultivos.add(cultivo)
}

method rega() {
var cultivosARegar = position.allElements()
const cultivosARegar = position.allElements()
.filter { obj => !(self == obj) }

if (cultivosARegar.isEmpty())
throw new Exception(message = "Solo las plantas se pueden regar!")
throw new DomainException(message = "Solo las plantas se pueden regar!", source = self)

cultivosARegar.forEach { cultivo => cultivo.crece() }
}

method cosechaTodo() {
cultivos.forEach { c => c.cosechate(self) }
cultivos.forEach { cultivo => cultivo.cosechate(self) }
cultivos.clear()
}

Expand Down
Loading

0 comments on commit 0b93adf

Please sign in to comment.