[ Foro de Python ]
Buenas, he estado haciendo este juego en clase, pero el otro día el profesor nos dijo que tendríamos que poner el siguiente código:
def get_computer_action(user_actions_history, game_history):
# No previous user actions =>random computer choice
if not user_actions_history or not game_history:
computer_action = get_random_computer_action()
# Basic AI functionality
# 1) If the user won the last round, he may repeat the last choice
# 2) If the user lost the last round,
# he may change to the next action in the sequence
# 3) If user and computer tied in the last round, then get a random computer choice
else:
# Path 1)
if game_history[-1] == GameResult.Victory:
computer_action = get_winner_action(user_actions_history[-1])
# Path 2)
elif game_history[-1] == GameResult.Defeat:
computer_action = GameAction((user_actions_history[-1].value + 1) %
len(GameAction))
# Random choice
else:
computer_action = get_random_computer_action()
print(f"Computer picked {computer_action.name}.")
return computer_action
Con la siguiente documentación:
En este punto, ya es posible discutir la nueva implementación de la función get_computer_action(), mostrada en el listado 1.22, la cual incluye las dos premisas introducidas previamente como referencia a la hora de identificar patrones básicos de comportamiento en el jugador humano. En esta implementación, destacan los siguientes puntos:
• Si no existe histórico, entonces la máquina generará una decisión de manera aleatoria (ver líneas @ 3-4). Si el jugador humano ganó la última ronda, entonces la máquina tomará la decisión de elegir la acción que derrota a la última acción elegida por el jugador (ver líneas @ 12-13. A modo de ejemplo, si el jugador ganó la última ronda eligiendo papel, entonces la máquina supondrá que el jugador va a elegir papel de nuevo y, por lo tanto, jugará con tijeras.
• Si el jugador ganó con piedra, la máquina elegirá papel en la próxima ronda. Como puede imaginar, la función get_winner_action() simplemente indexará el diccionario Victories para obtener una posición ganadora con respecto a la decisión que, presumiblemente, tomará el jugador. Note cómo se indexa la lista user_actions_history en la línea @ 13 para obtener el último elemento de una lista en Python. Si el jugador humano perdió la última ronda, entonces la máquina tomará la decisión de elegir la acción que derrota al siguiente elemento en la serie rock-paper-scissors (ver líneas @ 15-16). Además de indexar la lista user_actions_history para obtener el valor de la última acción elegida por el jugador, dicho valor se actualiza para apuntar al siguiente miembro del tipo enumerado.
• Si el jugador empató en la última ronda, entonces la máquina jugará la ronda actual de manera aleatoria
Hay que crear get_winner_action y un get_random_computer_action()
Este último creo que es así
def get_random_computer_action():
computer_selection = random.randint(0, len(GameAction) - 1)
computer_action = GameAction(computer_selection)
print(f"Computer picked {computer_action.name}.")
return computer_action
Pero el get_winner_action no sabría como hacerlo
¿Algún consejo?
(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)