29 ⭐ Rock, Paper, Scissors Game 🗿

Obiettivi di apprendimento:

  • Usare random.choice per la mossa del computer.
  • Mappare le opzioni in un dizionario per una gestione chiara.
  • Implementare la logica delle regole di gioco (if/elif/else complessi).

Programma Esempio:

import random

def rock_paper_scissors_game():
    print("🗿 CARTA, SASSO, FORBICE ✂️")

    # Dizionario per mappare l'input utente a un nome completo e visualizzare le opzioni
    opzioni = {
        's': 'Sasso',
        'c': 'Carta',
        'f': 'Forbice'
    }

    # Regole di vittoria (Mossa Vincente: Mossa Sconfitta)
    regole = {
        'Sasso': 'Forbice', # Sasso batte Forbice
        'Carta': 'Sasso',   # Carta batte Sasso
        'Forbice': 'Carta'  # Forbice batte Carta
    }

    while True:
        print("\n=== Fai la tua mossa ===")
        print("S: Sasso | C: Carta | F: Forbice | Q: Esci")

        mossa_utente_raw = input("La tua scelta: ").lower().strip()

        if mossa_utente_raw == 'q':
            print("Arrivederci!")
            break

        if mossa_utente_raw not in opzioni:
            print("❌ Scelta non valida. Riprova.")
            continue

        mossa_utente = opzioni[mossa_utente_raw]

        # Mossa del computer (sceglie tra i valori del dizionario 'opzioni')
        mossa_computer = random.choice(list(opzioni.values()))

        print("-" * 30)
        print(f"Tu hai scelto: {mossa_utente}")
        print(f"Il Computer ha scelto: {mossa_computer}")
        print("-" * 30)

        # Logica del gioco
        if mossa_utente == mossa_computer:
            print("È un pareggio! 🤝")
        elif regole.get(mossa_utente) == mossa_computer:
            # Verifica se la mossa utente batte la mossa computer
            print(f"Hai vinto! {mossa_utente} batte {mossa_computer}. 🎉")
        else:
            # Se non è pareggio e l'utente non ha vinto, il computer vince
            print(f"Hai perso! {mossa_computer} batte {mossa_utente}. 💻")

# rock_paper_scissors_game()