Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feedback #1

Open
wants to merge 31 commits into
base: feedback
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
94dca78
Setting up GitHub Classroom Feedback
github-classroom[bot] Sep 29, 2024
1d85d49
primeros avances juego
IsiAliEmir Oct 3, 2024
4b7f672
subo foto pitch
IsiAliEmir Oct 3, 2024
cb073fa
Update main.wpgm
FranciscoBosi Oct 3, 2024
26d7030
Rename pepita.wlk to objects.wlk
FranciscoBosi Oct 3, 2024
b65a6a9
Update objects.wlk
FranciscoBosi Oct 3, 2024
917a992
Add files via upload
FranciscoBosi Oct 3, 2024
5f6dc41
Add files via upload
FranciscoBosi Oct 3, 2024
0b855c2
Add files via upload
FranciscoBosi Oct 3, 2024
aa38e04
Update main.wpgm
FranciscoBosi Oct 3, 2024
532e48e
Update main.wpgm
FranciscoBosi Oct 17, 2024
9780021
Update objects.wlk
FranciscoBosi Oct 17, 2024
c4c6dfd
Subo avances: instrucciones, diagrama, algunas pruebas y cambios en c…
IsiAliEmir Oct 19, 2024
fd8cac8
Agrego nuevas imagenes y cambio algunos nombres
IsiAliEmir Oct 23, 2024
590e5ab
Agrego mas consumibles, una pelota y sonido ambiente; cambio metodo p…
IsiAliEmir Oct 24, 2024
fcf86d5
Actualizo proximos pasos
IsiAliEmir Oct 24, 2024
a9c21ba
Subo avances colisiones con pelota, consumibles, prototipos arcos
IsiAliEmir Nov 6, 2024
01505b0
Update main.wpgm
FacuSoca Nov 6, 2024
46c2024
Update main.wpgm
FacuSoca Nov 6, 2024
5b16f80
hice un consumible que de vuelta los controles
FrancoGegon Nov 6, 2024
8efecf9
subo ultimos cambios cancha, colisiones, mas consumibles, etc.
IsiAliEmir Nov 7, 2024
20843c9
actualizo assets
IsiAliEmir Nov 7, 2024
37aac4c
Subo algunos cambios en main y proximosPasos (clase 7-11)
IsiAliEmir Nov 11, 2024
9985bd2
Delegué algo de logica pero no me andan las colisiones
FrancoGegon Nov 11, 2024
f490210
hice cambios con la logica de objetos pero ahora no andan las colisiones
FrancoGegon Nov 11, 2024
93ced53
subo lo de la branch al main
FrancoGegon Nov 13, 2024
ae719f7
Subo tests (chequeen los de movimiento)
FrancoGegon Nov 14, 2024
ef705ce
Subo casi ultimos cambios (menu inicial, colisiones con bordes, mejor…
IsiAliEmir Nov 14, 2024
f628543
Subo ultimos cambios, juego terminado
IsiAliEmir Nov 14, 2024
76a693f
Actualizar README.md
FrancoGegon Nov 14, 2024
9efc2eb
cambie 2 cosas que estaban mal
mfriedrich7 Nov 14, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 33 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,22 +1,47 @@
# (reemplazar nombre de juego acá)
# Fulbot

UTN - Facultad Regional Buenos Aires - Materia Paradigmas de Programación

## Equipo de desarrollo:

- completar...
- completar...

- Alí Isi
- Facundo Soca
- Francisco Bossi
- Franco Gegon
- Martín Friedrich


## Capturas

![pepita](assets/golondrina.png)
![menuInicio](assets/menuInicio.png)
![screenshot](assets/screenshot.png)

## Reglas de Juego / Instrucciones

(completar...)
Cada jugador debe desplazarse por el campo de juego tratando de recolectar consumibles en el camino
para no cansarse, y patear la pelota hacia el arco rival. El que hace más goles gana!

## Controles:
Notas importantes:
- Los goles solo cuentan cuando la pelota es pateada dentro del arco, no se puede anotar dribbleando.
- La partida finaliza cuando algún jugador llega a anotar 3 goles.

- `W` para...
## Controles:

- `W` para mover el jugador 1 hacia arriba.
- `A` para mover el jugador 1 hacia abajo
- `S` para mover el jugador 1 hacia la izquierda.
- `D` para mover el jugador 1 hacia la derecha.
- `SPACEBAR` para patear la pelota.

- `UP` para mover el jugador 2 hacia arriba.
- `DOWN` para mover el jugador 2 hacia abajo.
- `LEFT` para mover el jugador 2 hacia la izquierda.
- `RIGHT` para mover el jugador 2 hacia la derecha.
- `DELETE` para patear la pelota.

## Relaciones del juego con la materia y aclaraciones

En el desarrollo de este juego hicimos uso de tópicos vistos en la materia, y especialmente en el paradigma orientado a objetos.
Entre ellos podemos encontrar el uso de clases y herencias para los ítem que se ven el juego. Usando herencias, pudimos a partir de una clase de Ítem, generar las distintas clases de consumibles tanto los de comida, como los que modifican el desplazamiento.
Utilizamos a su vez el polimorfismo, ya que logramos que todos los Items que reciben el mensaje que realiza los efectos al jugador, genere en el mismo un efecto diferente dependiendo del consumible.
Finalmente, utilizamos Wollok Game para realizar todos los ajustes relacionados tanto con la interfaz del juego como con ciertas acciones de los objetos. Como es el caso del desplazamiento, de los lapsos de tiempo en que se realizan acciones, entre otros. Finalmente aclaramos que a pesar de que Wollok cuenta con una función especial para las colisiones, nuestro juego utiliza mucho el cambio de velocidad en los movimientos del jugador, desplazándose de a una celda, de a dos, o incluso tres. Con esto en mente al utilizar las colisiones se requería que el objeto esté posicionado exactamente en la celda, lo que en la mayoría de los casos complicaba el agarre de los mismos y la experiencia del juego. Es por eso que optamos por el uso de algunas ecuaciones de distancia para calcular proximidades y así poder realizar "agarres" de items que estén a un rango de cercanía del jugador.
Binary file added assets/agua.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/argentino.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/bananaPeel.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/bananas.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/brasilero.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/coke2.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/comida.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/cornerFlag.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file removed assets/golondrina.png
Binary file not shown.
Binary file added assets/gritoGol.mp3
Binary file not shown.
Binary file added assets/menuGameOver.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/menuInicio.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/pelota.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/pitchHorizontal.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/redCard.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/screenshot.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/sonidoAmbiente.mp3
Binary file not shown.
Binary file added assets/yellowCard.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added diagrama.jpeg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
204 changes: 204 additions & 0 deletions ejecucion.wlk
Original file line number Diff line number Diff line change
@@ -0,0 +1,204 @@
import objects.*

object jueguito{

const jugador1 = new Jugador (image = "argentino.png", position = new MutablePosition(x=xiJugador1, y=yiTodos))
const jugador2 = new Jugador (image = "brasilero.png", position = new MutablePosition(x=xiJugador2, y=yiTodos))
const pelota = new Pelota (position = game.at(xiPelota, yiTodos))
var configurado = false

// Consumibles y Tarjetas
const agua1 = new Agua() const agua2 = new Agua() const agua3 = new Agua() const agua4 = new Agua()
const gaseosa1 = new Gaseosa() const gaseosa2 = new Gaseosa()
const comida = new Comida()
const banana1 = new Banana() const banana2 = new Banana()
const bananaPeel1 = new BananaPeelDer() const bananaPeel2 = new BananaPeelIzq() const bananaPeel3 = new BananaPeelIzq()
const amarilla1 = new TarjetaAmarilla() const amarilla2 = new TarjetaAmarilla()
const roja = new TarjetaRoja()

const consumibles = [agua1, agua2, agua3, agua4, gaseosa1, gaseosa2, comida, banana1, banana2, bananaPeel1, bananaPeel2, bananaPeel3]
const tarjetas = [amarilla1, amarilla2, roja]

const xLineaArco1 = 10
const xLineaArco2 = 208
const yInfAmbosArcos = 42
const ySupAmbosArcos = 56

// Coordenadas iniciales
const xiJugador1 = 97
const xiJugador2 = 120
const yiTodos = 50
const xiPelota = 110

// Otros
var golesJugador1 = 0
var golesJugador2 = 0

method inicializar() {

game.title("Fulbot")
game.boardGround("pitchHorizontal.jpg")
game.height(100) // tenemos un alto de 100 celdas (1000 pixeles).
game.width(225) // tenemos un ancho de 225 celdas (2250 pixeles).
game.cellSize(10) // tenemos celdas de 10x10 pixeles.

// SONIDO DE FONDO
const sonidoAmbiente = game.sound("sonidoAmbiente.mp3")
sonidoAmbiente.shouldLoop(true)
sonidoAmbiente.play()

var sonidoAmbienteIsOn = true
keyboard.m().onPressDo({
if (sonidoAmbienteIsOn) {
sonidoAmbiente.volume(0)
sonidoAmbienteIsOn = false
} else {
sonidoAmbiente.volume(100)
sonidoAmbienteIsOn = true
}
})
}
method iniciarbanderas(){

// Coordenadas esquinas
const xBordeIzq = 11
const xBordeDer = 209
const yBordeInf = 1
const yBordeSup = 97

// Corner flags
const bandera1 = new Item (image = "cornerFlag.png", position = game.at(xBordeIzq, yBordeInf))
const bandera2 = new Item (image = "cornerFlag.png", position = game.at(xBordeIzq, yBordeSup))
const bandera3 = new Item (image = "cornerFlag.png", position = game.at(xBordeDer, yBordeInf))
const bandera4 = new Item (image = "cornerFlag.png", position = game.at(xBordeDer, yBordeSup))

game.addVisual(bandera1) game.addVisual(bandera2) game.addVisual(bandera3) game.addVisual(bandera4)
}

method jugar() {
self.inicializar()
self.iniciarbanderas()

golesJugador1 = 0
golesJugador2 = 0

if (!configurado) {
keyboard.w().onPressDo({ jugador1.moverseArriba(5) })
keyboard.a().onPressDo({ jugador1.moverseIzquierda(5) })
keyboard.s().onPressDo({ jugador1.moverseAbajo(5) })
keyboard.d().onPressDo({ jugador1.moverseDerecha(5) })
keyboard.space().onPressDo({ jugador1.patearPelota(pelota) })

keyboard.up().onPressDo({ jugador2.moverseArriba(5) })
keyboard.left().onPressDo({ jugador2.moverseIzquierda(5) })
keyboard.down().onPressDo({ jugador2.moverseAbajo(5) })
keyboard.right().onPressDo({ jugador2.moverseDerecha(5) })
keyboard.backspace().onPressDo({ jugador2.patearPelota(pelota) })
configurado = true
}
// VISUALS
const listaGrande =[jugador1,jugador2,pelota,agua1, agua2, agua3, agua4, gaseosa1, gaseosa2, comida, banana1, banana2, bananaPeel1, bananaPeel2, bananaPeel3,amarilla1, amarilla2, roja]
self.crearVisual(listaGrande)

game.say(jugador1, "Muchaaaaachoooooos")
game.say(jugador2, "Eu nao falo portugues...")

// EVENTOS DE INICIO
game.schedule (1000, { agua1.moverseAlAzar() agua2.moverseAlAzar() })
game.schedule (2000, { agua3.moverseAlAzar() agua4.moverseAlAzar() })
game.schedule (3000, { banana1.moverseAlAzar() bananaPeel1.moverseAlAzar() bananaPeel3.moverseAlAzar() })
game.schedule (4000, { gaseosa1.moverseAlAzar() gaseosa2.moverseAlAzar()})
game.schedule (6000, { banana2.moverseAlAzar() bananaPeel2.moverseAlAzar() })
game.schedule (8000, { comida.moverseAlAzar() })
game.schedule (10000, { amarilla1.moverseAlAzar() amarilla2.moverseAlAzar() })
game.schedule (20000, { roja.moverseAlAzar() })

// EVENTOS AUTOMATICOS
game.onTick (1000, "jugador1 recupera energia", { jugador1.ganarEnergia(10) })
game.onTick (1000, "jugador2 recupera energia", { jugador2.ganarEnergia(10) })
game.onTick (100, "chequeo de colisiones", {
[jugador1, jugador2].forEach({ jugador =>
jugador.agarrarConsumible (consumibles)
jugador.llevarPelota (pelota)
})
jugador1.agarrarTarjeta (tarjetas, jugador2)
jugador2.agarrarTarjeta (tarjetas, jugador1)
// Arco1
if (pelota.entraEnArcoIzq(xLineaArco1, yInfAmbosArcos, ySupAmbosArcos)) {
pelota.irseDePantalla()
golesJugador2 += 1
game.say(jugador2, "¡Gol para el Jugador 2! Total: " + golesJugador2)
game.sound("gritoGol.mp3").play()
game.schedule(3000, {
pelota.moverse(xiPelota, yiTodos)
self.setearPosicion(jugador1,xiJugador1,yiTodos)
self.setearPosicion(jugador2,xiJugador2,yiTodos)
})
self.checkFinal(golesJugador2)
}
// Arco2
if (pelota.entraEnArcoDer(xLineaArco2, yInfAmbosArcos, ySupAmbosArcos)) {
pelota.irseDePantalla()
golesJugador1 += 1
game.say(jugador1, "¡Gol para el Jugador 1! Total: " + golesJugador1)
game.sound("gritoGol.mp3").play()
game.schedule(3000, {
pelota.moverse(xiPelota, yiTodos)
self.setearPosicion(jugador1,xiJugador1,yiTodos)
self.setearPosicion(jugador2,xiJugador2,yiTodos)
})
self.checkFinal(golesJugador1)
}
})
}

method crearVisual(lista) {
if (lista != [] ){
game.addVisual(lista.head())
lista.remove(lista.head())
self.crearVisual(lista)
}
}

method removeVisual() {
game.removeVisual(agua1)
game.removeVisual(agua2)
game.removeVisual(agua3)
game.removeVisual(agua4)
game.removeVisual(gaseosa1)
game.removeVisual(gaseosa2)
game.removeVisual(banana1)
game.removeVisual(banana2)
game.removeVisual(comida)
game.removeVisual(bananaPeel1)
game.removeVisual(bananaPeel2)
game.removeVisual(bananaPeel3)
game.removeVisual(amarilla1)
game.removeVisual(amarilla2)
game.removeVisual(roja)
game.removeVisual(jugador1)
game.removeVisual(jugador2)
game.removeVisual(pelota)
}

method setearPosicion(jugador,xe,ye) {
jugador.position(new MutablePosition(x=xe, y=ye))
}

method checkFinal(goles) {
if(goles == 3) {self.close()}
}

method close() {
self.removeVisual()
game.addVisual(menuGameOver)
keyboard.y().onPressDo({game.removeVisual(menuGameOver) self.menu()})
keyboard.n().onPressDo({game.stop()})
}

method menu() {
game.addVisual(menuInicio)
keyboard.enter().onPressDo({game.removeVisual(menuInicio) self.jugar()})
}

}
19 changes: 6 additions & 13 deletions main.wpgm
Original file line number Diff line number Diff line change
@@ -1,16 +1,9 @@
import wollok.game.*
import objects.*
import ejecucion.*

import pepita.*

program PepitaGame {
game.title("Pepita")
game.height(10)
game.width(10)
game.cellSize(100)

game.addVisual(pepita)

keyboard.w().onPressDo({ pepita.fly(1) })

game.start()
program FulbotGame {
jueguito.inicializar()
jueguito.menu()
game.start()
}
Loading
Loading