diff --git a/4_buenas_practicas/asesoria/todito/spec/toditoSpec.js b/4_buenas_practicas/asesoria/todito/spec/toditoSpec.js index 0785072..783e0ef 100644 --- a/4_buenas_practicas/asesoria/todito/spec/toditoSpec.js +++ b/4_buenas_practicas/asesoria/todito/spec/toditoSpec.js @@ -8,4 +8,58 @@ describe("Todito", function () { }); }); }); + describe("Jugador", function () { + it("bebe una vez, no está ebrio", function () { + var jugador = new Jugador(); + jugador.tomarShot(); + expect(jugador.estaEbrio()).toBeFalsy(); + }); + it("bebe 10 veces, está ebrio", function () { + var jugador = new Jugador(); + jugador.tomarShot(); + jugador.tomarShot(); + jugador.tomarShot(); + jugador.tomarShot(); + jugador.tomarShot(); + jugador.tomarShot(); + jugador.tomarShot(); + jugador.tomarShot(); + jugador.tomarShot(); + jugador.tomarShot(); + expect(jugador.getShots()).toEqual(10); + expect(jugador.estaEbrio()).toBeTruthy(); + }); + }); + describe("Juego", function () { + describe("aplicar castigos", function () { + it("toma el de mi izquierda", function () { + var juego = new Juego(3); + juego.aplicarCastigo("Toma el de mi izquierda", 1); + expect(juego.jugadores[0].getShots()).toEqual(1); + }); + it("toma el de mi derecha", function () { + var juego = new Juego(3); + juego.aplicarCastigo("Toma el de mi derecha", 1); + expect(juego.jugadores[2].getShots()).toEqual(1); + }); + it("toman todos", function () { + var juego = new Juego(3); + var i = 0; + juego.aplicarCastigo("Toman todos", 1); + for (i; i < 3; i++) { + expect(juego.jugadores[i].getShots()).toEqual(1); + } + }); + it("soy el primero de la lista y toma el de mi izquierda", function () { + var juego = new Juego(3); + juego.aplicarCastigo("Toma el de mi izquierda", 0); + expect(juego.jugadores[2].getShots()).toEqual(1); + }); + it("soy el último de la lista y toma el de mi derecha", function () { + var juego = new Juego(3); + juego.aplicarCastigo("Toma el de mi derecha", 2); + expect(juego.jugadores[0].getShots()).toEqual(1); + }); + }); + }); }); \ No newline at end of file diff --git a/4_buenas_practicas/asesoria/todito/src/todito.js b/4_buenas_practicas/asesoria/todito/src/todito.js index 571fbb1..99619c5 100755 --- a/4_buenas_practicas/asesoria/todito/src/todito.js +++ b/4_buenas_practicas/asesoria/todito/src/todito.js @@ -9,28 +9,71 @@ function Dado() { } function Todito() { - this.jugar = function () { - var dado = new Dado(); - - dado.lanzar(); - definirCastigo(dado.resultado); - }; - + var castigo = ""; var definirCastigo = function (n) { switch (n) { case 1: case 5: - console.log("Toman todos"); + castigo = "Toman todos"; break; case 2: case 6: - console.log("Toma otro"); + castigo = "Toma otro"; break; case 3: - console.log("Toma el de mi derecha"); + castigo = "Toma el de mi derecha"; break; case 4: - console.log("Toma el de mi izquierda"); + castigo = "Toma el de mi izquierda"; + break; + } + }; + this.jugar = function () { + var dado = new Dado(); + dado.lanzar(); + definirCastigo(dado.resultado); + }; + this.getCastigo = function () { + return castigo; + }; +} + +function Jugador() { + var shots = 0; + this.tomarShot = function () { + shots++; + }; + this.estaEbrio = function () { + return shots === 10; + }; + this.getShots = function () { + return shots; + }; +} + +function Juego(numJugadores) { + this.jugadores = []; + var i = 0; + var j = 0; + var todito = new Todito(); + for (i; i < numJugadores; i++) { + this.jugadores[i] = new Jugador(); + } + + this.aplicarCastigo = function (castigo, index) { + switch (castigo) { + case "Toman todos": + for (j; j < this.jugadores.length; j++) { + this.jugadores[j].tomarShot(); + } + break; + case "Toma otro": + break; + case "Toma el de mi derecha": + index === this.jugadores.length - 1 ? this.jugadores[0].tomarShot() : this.jugadores[index+1].tomarShot(); + break; + case "Toma el de mi izquierda": + index === 0 ? this.jugadores[this.jugadores.length - 1].tomarShot() : this.jugadores[index-1].tomarShot(); break; } };