Skip to content

Commit

Permalink
Actualizo version bis con mis ultimos cambios
Browse files Browse the repository at this point in the history
  • Loading branch information
IsiAliEmir committed Nov 12, 2024
1 parent f490210 commit e8eb55c
Show file tree
Hide file tree
Showing 6 changed files with 324 additions and 388 deletions.
32 changes: 15 additions & 17 deletions ProximosPasos.md
Original file line number Diff line number Diff line change
@@ -1,17 +1,15 @@
- [X] Cambiar background por una mejor cancha.
- [X] Agregar más consumibles (objetos distintos).
- [X] Agregar la pelota.
- [X] MODELAR COLISION BASICA!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- [ ] Modelar interacción con la pelota (que la patee en una direccion).
- [ ] Revisar colisión con consumibles (que el consumible desaparezca (y cómo vuelve a aparecer otro?)).
- [ ] Modelar colisión con jugador rival? (que lo empuje).
- [ ] Definir bordes de la cancha.
- [X] Agregar sonido de ambiente.
- [ ] Agregar sonidos de colisiones.
- [ ] Modelar mecánica de goles............y de fin de partida.
- [ ] Agregar menú?
- [X] Agregar ¿tarjetas? para afectar al otro jugador (tarjeta roja lo deja quieto por ej.).
- DELEGAR Y MODULARIZAR CON OBJETOS Y METODOS, ELIMINAR ALGORITMIA PROCEDURAL DE C.
- EN COLISION, NO PREGUNTAR SI CHOCA CON BANANA. USAR MENSAJES: CUANDO ALGO CHOCA CON UNA BANANA, MANDARLE UN MENSAJE
A ESE ALGO (MOVETE).
- SOBRE EL REMOVE VISUAL: EL OBJETO SIGUE ESTANDO PORQUE ESTÁ LA REFERENCIA (CONSTANTE). HAY QUE MODIFICAR ESO.
- [X] Arreglar mecánica para llevar la pelota.
- [X] Agregar mecánica para patear la pelota en una dirección.
- [ ] Agregar mecánica para colisiones con borde de la cancha.
- [ ] Agregar sonidos colisiones.
- [ ] Agregar mecánica de goles: sonido, contador y reinicio posiciones.
- [ ] Agregar mecánica para fin de partida: que imprima un cartelito y envíe al menú principal.
- [ ] Agregar menú principal.
- [ ] Agregar banana maestra que invoque un montón de bananas.

Observaciones
- Tal vez la evaluacion de si alguien está cerca de algo podría delegarse en el programa en vez de tenerla en 800 ifs.
- El mute del sonido funciona una sola vez.
- Los cuadros de diálogo no siempre se muestran (?).
- EL ONTICK AL AGARRAR UN CONSUMIBLE SE COMPARTE: DEL TOTAL SIEMPRE QUEDA UNO SOLO.

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/food.png
Binary file not shown.
318 changes: 87 additions & 231 deletions main.wpgm
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,10 @@ program FulbotGame {
game.cellSize(10) // tenemos celdas de 10x10 pixeles.

// SONIDO DE FONDO

const sonidoAmbiente = game.sound("sonidoAmbiente.mp3")
sonidoAmbiente.shouldLoop(true)
game.schedule(500, {sonidoAmbiente.play()})

sonidoAmbiente.play()
var sonidoAmbienteIsOn = true
keyboard.m().onPressDo({
if (sonidoAmbienteIsOn) {
Expand All @@ -24,262 +23,119 @@ program FulbotGame {
sonidoAmbienteIsOn = true
}
})
//keyboard.m().onPressDo({sonidoAmbiente.volume(0)})

// TECLAS DE MOVIMIENTO

// TECLAS DE ACCIÓN
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.enter().onPressDo({ jugador2.patearPelota(pelota) })

// OBJETOS Y REFERENCIAS
// 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))

// Coordenadas arcos
const xLineaArco1 = 10
const xLineaArco2 = 208
const yInfAmbosArcos = 42
const ySupAmbosArcos = 56

// Coordenadas jugadores
const xiJugador1 = 97
const xiJugador2 = 120
const yiAmbosJugadores = 50

// Jugadores
const jugador1 = new Jugador( cansancio = 0, imagen = "argentino.png", position = new MutablePosition(x=122, y=50))
const jugador2 = new Jugador( cansancio = 0, imagen = "brasilero.png", position = new MutablePosition(x=95, y=50))

// Items
const pelota = new Item( imagen = "pelota.png", position = game.at(110, 50), frase = "")
const bananaPeel1 = new CascaraBanana( imagen = "bananaPeel.png", frase = "Noooooooo")
const bananaPeel2 = new CascaraBanana( imagen = "bananaPeel.png", frase = "Noooooooo")
const bananaPeel3 = new CascaraBanana( imagen = "bananaPeel.png", frase = "Noooooooo")
const cono1 = new Item( imagen = "cono.png", position = game.at(10, 56), frase = "")
const cono2 = new Item( imagen = "cono.png", position = game.at(10, 42), frase = "")
const cono3 = new Item( imagen = "cono.png", position = game.at(208, 56), frase = "")
const cono4 = new Item( imagen = "cono.png", position = game.at(208, 42), frase = "")


// Tarjetas
const tarjetaAmarilla = new Tarjetas( imagen = "yellowCard.png", frase = "Toma amarilla", cantidad = 20)
const tarjetaRoja = new Tarjetas( imagen = "redCard.png", frase = "Toma roja", cantidad = 100)

// Consumibles
const gaseosa1 = new Consumible( energia = 30, imagen = "coke2.png", frase = "rica gaseosa")
const gaseosa2 = new Consumible( energia = 30, imagen = "coke2.png", frase = "rica gaseosa")
const comida = new Consumible( energia = 80, imagen = "food.png", frase = "Gracias por la comida")
const banana1 = new Consumible( energia = 40, imagen = "bananas.png", frase = "Gracias por la fruta")
const banana2 = new Consumible( energia = 40, imagen = "bananas.png", frase = "Gracias por la fruta")
const agua1 = new Consumible( energia = 20, imagen = "agua.png", frase = "Rica agua!")
const agua2 = new Consumible( energia = 20, imagen = "agua.png", frase = "Rica agua!")

// Arcos
const arco1X = 208 // Coordenada x de la portería 1 (izquierda)
const arco1Y = 50 // Coordenada y de la portería 1
const arco1Ancho = 5 // Ancho de la portería 1
const arco1Alto = 10 // Alto de la portería 1

const arco2X = 10 // Coordenada x de la portería 2 (derecha)
const arco2Y = 50 // Coordenada y de la portería 2
const arco2Ancho = 5 // Ancho de la portería 2
const arco2Alto = 10 // Alto de la portería 2

// Marcadores de goles
const jugador1 = new Jugador (image = "argentino.png", position = new MutablePosition(x=xiJugador1, y=yiAmbosJugadores))
const jugador2 = new Jugador (image = "brasilero.png", position = new MutablePosition(x=xiJugador2, y=yiAmbosJugadores))

// 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 amarilla1 = new TarjetaAmarilla() const amarilla2 = new TarjetaAmarilla()
const roja = new TarjetaRoja()

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

// Otros
const pelota = new Item (image = "pelota.png", position = game.at(110, 50))
var golesJugador1 = 0
var golesJugador2 = 0 // Comprobar si la pelota entra en el arco del jugador 1
const proximidad = 5

// EVENTOS PROGRAMADOS

game.schedule(100, {
game.addVisual(jugador1)
game.addVisual(jugador2)
game.addVisual(pelota)
game.addVisual(bananaPeel1)
game.addVisual(bananaPeel2)
game.addVisual(bananaPeel3)
game.addVisual(tarjetaAmarilla)
game.addVisual(tarjetaRoja)
game.addVisual(gaseosa1)
game.addVisual(gaseosa2)
game.addVisual(comida)
game.addVisual(banana1)
game.addVisual(banana2)
game.addVisual(agua1)
game.addVisual(agua2)
game.say(jugador1, jugador1.decir("Muchaaaaachoooooos"))
game.say(jugador2, jugador2.decir("Eu nao falo portugues"))
})
var golesJugador2 = 0

// VISUALS
game.addVisual(jugador1) game.addVisual(jugador2)
game.addVisual(pelota)
game.addVisual(bandera1) game.addVisual(bandera2) game.addVisual(bandera3) game.addVisual(bandera4)
game.addVisual(agua1) game.addVisual(agua2) game.addVisual(agua3) game.addVisual(agua4)
game.addVisual(gaseosa1) game.addVisual(gaseosa2)
game.addVisual(comida)
game.addVisual(banana1) game.addVisual(banana2)
game.addVisual(bananaPeel1) game.addVisual(bananaPeel2)
game.addVisual(amarilla1) game.addVisual(amarilla2)
game.addVisual(roja)
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() })
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, "recupera energia", { jugador1.recuperarEnergia(20) })
game.onTick(1000, "recupera energia", { jugador2.recuperarEnergia(20) })
game.onTick(2000, "se mueve", { tarjetaRoja.moverseAlAzar() })
game.onTick(5000, "se mueve", { tarjetaAmarilla.moverseAlAzar() })
//game.onTick(8000, "se mueve", { bananaPeel1.moverseAlAzar() })
//game.onTick(8000, "se mueve", { bananaPeel2.moverseAlAzar() })
//game.onTick(8000, "se mueve", { bananaPeel3.moverseAlAzar() })
game.onTick(5000, "se mueve", { comida.moverseAlAzar() })
game.onTick(5000, "se mueve", { banana1.moverseAlAzar() })
game.onTick(5000, "se mueve", { banana2.moverseAlAzar() })
game.onTick(8000, "se mueve", { gaseosa1.moverseAlAzar() })
game.onTick(8000, "se mueve", { gaseosa2.moverseAlAzar() })
game.onTick(10000, "se mueve", { agua1.moverseAlAzar() })
game.onTick(10000, "se mueve", { agua2.moverseAlAzar() })

// COLISIONES
/*
game.whenCollideDo(jugador2, {
game.say(jugador2,jugador2.decir("Me choque con algo!!"))
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)
})
*/

/*game.onTick(100, "chequeo de colisiones", {
// CON CONSUMIBLES
/*
if ((jugador1.position().x() - gaseosa1.position().x()).abs() < 5 and
(jugador1.position().y() - gaseosa1.position().y()).abs() < 5) {
jugador1.consumir(gaseosa1)
game.say(jugador1, jugador1.decir("Rica gaseosa!"))
game.removeVisual(gaseosa1)
}
if ((jugador1.position().x() - gaseosa2.position().x()).abs() < 5 and
(jugador1.position().y() - gaseosa2.position().y()).abs() < 5) {
jugador1.consumir(gaseosa2)
game.say(jugador1, jugador1.decir("Rica gaseosa!"))
game.removeVisual(gaseosa2)
}
if ((jugador1.position().x() - agua1.position().x()).abs() < 5 and
(jugador1.position().y() - agua1.position().y()).abs() < 5) {
jugador1.consumir(agua1)
game.say(jugador1, jugador1.decir("Rica agua!"))
game.removeVisual(agua1)
}
if ((jugador1.position().x() - agua2.position().x()).abs() < 5 and
(jugador1.position().y() - agua2.position().y()).abs() < 5) {
jugador1.consumir(agua2)
game.say(jugador1, jugador1.decir("Rica agua!"))
game.removeVisual(agua2)
}
if ((jugador1.position().x() - banana1.position().x()).abs() < 5 and
(jugador1.position().y() - banana1.position().y()).abs() < 5) {
jugador1.consumir(banana1)
game.say(jugador1, jugador1.decir("Gracias por la fruta"))
game.removeVisual(banana1)
}
if ((jugador1.position().x() - banana2.position().x()).abs() < 5 and
(jugador1.position().y() - banana2.position().y()).abs() < 5) {
jugador1.consumir(banana2)
game.say(jugador1, jugador1.decir("Gracias por la fruta"))
game.removeVisual(banana2)
}
if ((jugador1.position().x() - comida.position().x()).abs() < 5 and
(jugador1.position().y() - comida.position().y()).abs() < 5) {
jugador1.consumir(comida)
game.say(jugador1, jugador1.decir("Gracias por la comida"))
game.removeVisual(comida)
}
if ((jugador1.position().x() - bananaPeel1.position().x()).abs() < 5 and
(jugador1.position().y() - bananaPeel1.position().y()).abs() < 5) {
jugador1.moverseArriba(5)
jugador1.moverseDerecha(10)
game.say(jugador1, jugador1.decir("Noooooooo"))
//bananaPeel1.moverse(0,0)
game.removeVisual(bananaPeel1)
}
if ((jugador1.position().x() - bananaPeel2.position().x()).abs() < 5 and
(jugador1.position().y() - bananaPeel2.position().y()).abs() < 5) {
jugador1.moverseArriba(5)
jugador1.moverseDerecha(10)
game.say(jugador1, jugador1.decir("Noooooooo"))
//bananaPeel2.moverse(0,0)
game.removeVisual(bananaPeel2)
}
if ((jugador1.position().x() - bananaPeel3.position().x()).abs() < 5 and
(jugador1.position().y() - bananaPeel3.position().y()).abs() < 5) {
jugador1.moverseArriba(5)
jugador1.moverseDerecha(10)
game.say(jugador1, jugador1.decir("Noooooooo"))
//bananaPeel3.moverse(0,0)
game.removeVisual(bananaPeel3)
}
if ((jugador1.position().x() - cerveza.position().x()).abs() < 5 and
(jugador1.position().y() - cerveza.position().y()).abs() < 5) {
jugador1.decir("ESTOY MAREADO")
game.schedule(10000, jugador1.efectoAlReves(jugador1))
game.removeVisual(cerveza)
jugador1.decir("NO TOMO MAS")
keyboard.w().onPressDo({ jugador1.moverseArriba(5) })
keyboard.a().onPressDo({ jugador1.moverseIzquierda(5) })
keyboard.s().onPressDo({ jugador1.moverseAbajo(5) })
keyboard.d().onPressDo({ jugador1.moverseDerecha(5) })
}

// CON TARJETAS
if ((jugador1.position().x() - tarjetaAmarilla.position().x()).abs() < 5 and
(jugador1.position().y() - tarjetaAmarilla.position().y()).abs() < 5) {
tarjetaAmarilla.aplicar(jugador2)
game.say(jugador1, jugador1.decir("Toma amarilla"))
game.removeVisual(tarjetaAmarilla)
}
if ((jugador1.position().x() - tarjetaRoja.position().x()).abs() < 5 and
(jugador1.position().y() - tarjetaRoja.position().y()).abs() < 5) {
tarjetaRoja.aplicar(jugador2)
game.say(jugador1, jugador1.decir("Toma roja"))
game.removeVisual(tarjetaRoja)
}
if ((jugador2.position().x() - tarjetaAmarilla.position().x()).abs() < 5 and
(jugador2.position().y() - tarjetaAmarilla.position().y()).abs() < 5) {
tarjetaAmarilla.aplicar(jugador1)
game.say(jugador2, jugador2.decir("Amarelo para voce"))
game.removeVisual(tarjetaAmarilla)
}
if ((jugador2.position().x() - tarjetaRoja.position().x()).abs() < 5 and
(jugador2.position().y() - tarjetaRoja.position().y()).abs() < 5) {
tarjetaRoja.aplicar(jugador1)
game.say(jugador2, jugador2.decir("Vermelho para voce"))
game.removeVisual(tarjetaRoja)
}

// CON PELOTA: DRIBBLING
if ((jugador1.position().x() - pelota.position().x()).abs() < proximidad &&
(jugador1.position().y() - pelota.position().y()).abs() < proximidad) {
// Empuja la pelota en la dirección de movimiento del jugador
if (jugador1.position().x() < pelota.position().x()) {
pelota.moverse(pelota.position().x() + 5, pelota.position().y())
} else if (jugador1.position().x() > pelota.position().x()) {
pelota.moverse(pelota.position().x() - 5, pelota.position().y())
}
if (jugador1.position().y() < pelota.position().y()) {
pelota.moverse(pelota.position().x(), pelota.position().y() + 5)
} else if (jugador1.position().y() > pelota.position().y()) {
pelota.moverse(pelota.position().x(), pelota.position().y() - 5)
}
}
if ((jugador2.position().x() - pelota.position().x()).abs() < proximidad &&
(jugador2.position().y() - pelota.position().y()).abs() < proximidad) {
// Empuja la pelota en la dirección de movimiento del jugador
if (jugador2.position().x() < pelota.position().x()) {
pelota.moverse(pelota.position().x() + 5, pelota.position().y())
} else if (jugador2.position().x() > pelota.position().x()) {
pelota.moverse(pelota.position().x() - 5, pelota.position().y())
}
if (jugador2.position().y() < pelota.position().y()) {
pelota.moverse(pelota.position().x(), pelota.position().y() + 5)
} else if (jugador2.position().y() > pelota.position().y()) {
pelota.moverse(pelota.position().x(), pelota.position().y() - 5)
}
}
/ CON PELOTA: GOLES
if (pelota.position().x() >= arco1X && pelota.position().x() <= (arco1X + arco1Ancho) &&
pelota.position().y() >= arco1Y && pelota.position().y() <= (arco1Y + arco1Alto)) {
golesJugador2 += 1
game.say(jugador2, "¡Gol para el Jugador 2! Total: " + golesJugador2)
pelota.moverse(110, 50) // Reiniciar la posición de la pelota
// Reiniciamos posiciones
pelota.moverse(110, 50)
jugador1.moverse(xiJugador1, yiAmbosJugadores)
jugador2.moverse(xiJugador2, yiAmbosJugadores)
}
if (pelota.position().x() >= arco2X && pelota.position().x() <= (arco2X + arco2Ancho) &&
pelota.position().y() >= arco2Y && pelota.position().y() <= (arco2Y + arco2Alto)) {
golesJugador1 += 1
game.say(jugador1, "¡Gol para el Jugador 1! Total: " + golesJugador1)
pelota.moverse(110, 50) // Reiniciar la posición de la pelota
// Reiniciamos posiciones
pelota.moverse(110, 50)
jugador1.moverse(xiJugador1, yiAmbosJugadores)
jugador2.moverse(xiJugador2, yiAmbosJugadores)
}
})*/

*/
game.start()
}
Loading

0 comments on commit e8eb55c

Please sign in to comment.