Howto “Rock-paper-scissors-lizard-Spock”

El curso este de python online y gratuito (del cual hablé en un post anterior) está dando su fruto.

Como primer mini proyecto nos propusieron generar un programa en el cual la jugadora y el ordenador juegan a piedra-papel-tijeras pero con dos items más: lagarto y Spock. La razón por la cual se añadían éstos dos últimos ítems es debido a la gran probabilidad de empate que hay sin ellos (1/3).
Pues para quien quiera saber más aquí va el código que desarrollé, además del planteamiento previo a escribirlo y su resultado!

Planteamiento de Rock-paper-scissors-lizard-Spock:

Usando la lógica aritmética, dibujamos estos 5 items en una circunferencia.

Como podemos ver en la imagen y según las instrucciones, el ítem seleccionado gana contra los 2 oponentes que le preceden en la circunferencia contando según el sentido de las agujas del reloj y pierde contra los 2 ítems consecuentes. Es decir, roca gana a tijeras y lagarto pero pierde contra Spock y papel. Y así con los demás items del círculo.

Asignamos a cada ítem un número, como puede verse en la imagen anterior. Así pues, podemos comprobar que si hacemos la resta de los números correspondientes a cada ítem obtenemos la solución:

ejemplo: la jugadora elige papel(2) y el ordenador elige Spock(1). papel – spock = 2 – 1 = 2

SI la solución a la resta de los ítems es 1 o 2 el primer ítem gana  (en este ejemplo se comprueba como papel gana a Spock, la jugadora gana al computador)

la jugadora elige tijeras(4) y el ordenador elige Spock(1).    tijeras – Spock = 4 – 1 = 3

SI la solución a la resta de los ítems es 3 o 4 el segundo ítem gana (en este ejemplo se comprueba que gana Spock, el computador gana)

Ahí es donde os preguntareis: y si la resta me da como resultado un numero negativo? o cero?

SI da cero es un claro empate, por lo que daremos el orden de que el resultado sea “jugadora y ordenador empatan”.

SI da un numero negativo aquí es donde entra el comando “remainder” o “modulo” (%+numero) para python. Este comando marca el modulo con el que estamos trabajando. En este caso los ítems van del 0 al 4 (roca 0 hasta tijeras 4) por lo tanto estamos contando con el modulo 5. Por eso mismo, añadiremos el comando %5 al código determinando que el rango de movimiento sea del 0 al 4 provocando que si la resta de tales items baja de 0 vuelva a contar a partir de 4.

ejemplo: la jugadora elige Spock(1) y el ordenador elige tijeras(4)   Spock – tijeras = 1 – 4 = -3

aquí es donde actúa el “remainder” %5 haciendo que cuando pasa por el 0 siga contando la resta a partir del 4. es decir: 1 – 1 = 0  // 0 -1 = 4 //  4 – 1 = 3  //  3 – 1 = 2  //   como el resultado a la resta es 2 gana el primer ítem que es Spock, por lo tanto gana la jugadora.

otro ejemplo: la jugadora elige roca(0) y el ordenador elige tijeras(4)

roca – tijeras = 0 – 4 = -4    pero con el %5 pasa esto: 0-1=4  //  4-1=3 // 3-1=2 // 2-1=1  Como el resultado ha sido 1 (y como todos sabemos) gana roca contra tijeras, gana la jugadora.

Hay que cambiar el chip en que nuestro rango de juego está entre el 0 y el 4, por lo tanto siempre que el resultado vaya por debajo del cero o por encima del 4 seguirá contando según este rango marcado. Si va por debajo de 0 empezará a contar de 4 hacia abajo, y si va por encima del 4 (nunca se dará ese caso) empezará a contar de 0 hacia arriba.

Otra pista o cosa a tener en cuenta es que nosotrxs en nuestro código seremos quienes fijemos el ítem escogido por la jugadorx (es decir, nosotrxs somos lx jugadorx) pero en el caso del ordenador haremos que éste elija de manera random un número del 0 al 4 con este comando : random.randrange(0,5). nota: para que este comando tenga sentido debemos como primera linea de código importar la librería random con el comando: import random.

Código del juego

Me ha costado decidirme en si escribir aquí o no el código del juego. Tengo la sensación que quienes estén deseando realizar por ellxs mismxs este código estarán muuuy tentados en echarle un vistazo al mío antes de probarlo solxs. Por eso mismo, he decidido que quien esté interesado en el código que deje un comentario pidiéndolo a continuación  y estaré encantadx de enviárselo!

Resultado

Este es el resultado que me da a mi con las opciones que he escrito.

Las personas que me hayan pedido el código, al ejecutarlo este es el resultado que les debería dar:

player choose rock                 — >      jugadorx escoge roca
computer choose rock           — >      computado escoge roca
player and computer tie!       — >       jugadorx y compu empatan!

player choose Spock             –>       jugadorx escoge Spock
computer choose scissors    –>       compu escoge tijeras
player wins!                             –>        jugadorx gana!

player choose paper             –>         jugadorx escoge papel
computer choose scissors   –>         compu escoge tijeras
computer wins!                       –>         compu gana!

player choose lizard             –>          jugadorx escoge lagarto
computer choose rock         –>           compu escoge roca
computer wins!                     –>            compu gana!

player choose scissors       –>            jugadorx escoge tijeras
computer choose lizard      –>            compu escoge lagarto
player wins!                           –>            jugadorx gana

Estoy deseando dudas, aportaciones y demás, así que comentad perrxs!

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s