Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- '''
- --------------------------GIOCO DI NIM------------------------------------
- REGOLE:
- Due giocatori prelevano alternativamente biglie da un mucchietto. Ad ogni mossa,
- un giocatore sceglie quante biglie prendere: almeno una e al massimo metà delle
- biglie disponibili. Poi è il turno dell’altro giocatore. Il giocatore che prende
- l’ultima biglia perde la partita.
- CONSEGNA:
- Scrivete una 10 e 100 e usatelo come dimensione iniziale
- del mucchietto di biglie. Generate u programma che consenta all’utente di giocare contro il computer.
- Generate un numero intero compreso trn numero intero, 0 o 1, e utilizzatelo per decidere
- se sarà l’utente o il computer a giocare per primo. Generate un numero intero, 0 o 1,
- e usatelo per decidere se il computer giocherà in modo intelligente o stupido:
- giocando in modo stupido, ad ogni sua mossa il computer semplicemente preleva dal
- mucchietto un numero di biglie casuale (ma valido, cioè compreso tra 1 e n/2, se nel
- mucchietto sono rimaste n biglie); in modalità intelligente, invece, preleva un
- numero di biglie tale che il numero di quelle che rimangono nel mucchio sia una
- potenza di due diminuita di un’unità, cioè 3, 7, 15, 31 o 63. Quest’ultima è sempre
- una mossa valida, tranne quando la dimensione del mucchio è proprio uguale a una
- potenza di due diminuita di un’unità: in tal caso il computer fa una mossa scelta a
- caso (ovviamente tra quelle valide). Come potrete verificare sperimentalmente, il
- computer non può essere battuto quando gioca in modalità intelligente e fa la prima
- mossa, a meno che la dimensione iniziale del mucchio non sia 15, 31 o 63.
- Analogamente, un giocatore umano che faccia la prima mossa e conosca la strategia
- qui descritta è in grado di battere il calcolatore.
- '''
- #-----------PRESENTAZIONE DEL GIOCO-----------------
- print("-" * 20 , "+" , "-" * 15, "+", "-" * 20)
- print("-" * 20 , "|IL GIOCO DI NIM |" , "-" * 20)
- print("-" * 20 , "+" , "-" * 15, "+", "-" * 20)
- print("\n")
- print(" " * 25 , "REGOLE:")
- print(" Due giocatori prelevano alternativamente biglie da un mucchietto.")
- print(" un giocatore sceglie quante biglie prendere: almeno una e al massimo metà delle")
- print(" biglie disponibili. Poi è il turno dell’altro giocatore. Il giocatore che prende")
- print(" l’ultima biglia perde la partita. \n \n")
- print("-" * 61 , "\n" * 2)
- #---------------------------------------------------
- import random
- end = False
- while not end:
- turnoIniziale = random.randint(0, 1)
- cpu = random.randint(0, 1)
- biglie = random.randint(10, 100)
- turno = False # false----> tocca al computer | true----> tocca al giocatore
- print("INIZIA IL GIOCO: \n")
- print(f"nel sacco ci sono {biglie} biglie \n")
- # -------------------------------------------FASE INIZIALE --------------------------------------------------------
- if turnoIniziale == 0:
- print("INIZIA IL COMPUTER")
- if cpu == 0: # il computer è in modalità facile, estrarrà un numero casuale di biglie
- print("oh no, qualcuno ha versato della birra sul computer! \n")
- mossa = random.randint(1, biglie // 2)
- biglie = biglie - mossa
- print(f"il computer ha preso {mossa} biglie, ne rimangono {biglie} \n")
- else: # il computer è in modalità difficile, estrarrà un numero tale di biglie da farne rimanere 2^n - 1 e vincere
- print("il computer vuole fare sul serio! \n")
- for n in range(biglie // 2, 0 , -1):
- possibileMossa = biglie - n
- if possibileMossa == 3 or possibileMossa == 7 or possibileMossa == 15 or possibileMossa == 31 or possibileMossa == 63:
- biglie = possibileMossa
- print(f"il computer ha preso {n} biglie, ne rimangono {biglie} \n")
- break
- else:
- notDone = True
- if biglie != possibileMossa and notDone == True:
- mossa = random.randint(1, biglie // 2)
- biglie = biglie - mossa
- print(f"il computer ha preso {mossa} biglie, ne rimangono {biglie} \n")
- notDone = False
- turno = True # il turno passa al giocatore
- else:
- print("INIZIA IL GIOCATORE \n")
- ok = False
- while not ok:
- mossa = input("quante biglie vuoi prendere? ")
- if mossa.isnumeric() and int(mossa) <= biglie // 2:
- mossa = int(mossa)
- biglie = biglie - mossa
- print(f"hai preso {mossa} biglie, ne rimangono {biglie} \n")
- ok = True
- else:
- print("la mossa non è valida, riprova \n")
- turno = False #il turno passa al computer
- #----------------------------------CICLAZIONE DEI TURNI----------------------------------------
- while biglie >= 1:
- #---------------------------------
- if biglie == 1:
- if turno == False: #dovrebbe giocare il computer ma rimane una biglia, ha vinto il giocatore
- print("COMPLIMENTI, HAI VINTO! \n")
- break
- else: #dovrebbe giocare il giocatore ma rimane una biglia, ha vinto il computer
- print("HA VINTO IL COMPUTER, COMPLIMENTI AMMASSO DI FERRAGLIA FIGLIO DI UN TOSTAPANE CHE NON SEI ALTRO! \n")
- break
- #--------------------------------
- elif turno == True:
- print("TOCCA AL GIOCATORE \n")
- ok = False
- while not ok == True:
- mossa = input("quante biglie vuoi prendere? ")
- if mossa.isnumeric() and int(mossa) <= biglie // 2:
- mossa = int(mossa)
- biglie = biglie - mossa
- print(f"hai preso {mossa} biglie, ne rimangono {biglie} \n")
- ok = True
- else:
- print("la mossa non è valida, riprova \n")
- turno = False # il turno passa al computer
- else:
- print("TOCCA AL COMPUTER")
- if cpu == 0: # il computer è in modalità facile, estrarrà un numero casuale di biglie
- mossa = random.randint(1, biglie // 2)
- biglie = biglie - mossa
- print(f"il computer ha preso {mossa} biglie, ne rimangono {biglie} \n")
- else: # il computer è in modalità difficile, estrarrà un numero tale di biglie da farne rimanere 2^n - 1 e vincere
- for n in range(biglie // 2, 0, -1):
- possibileMossa = biglie - n
- if possibileMossa == 3 or possibileMossa == 7 or possibileMossa == 15 or possibileMossa == 31 or possibileMossa == 63:
- biglie = possibileMossa
- print(f"il computer ha preso {n} biglie, ne rimangono {biglie} \n")
- break
- else:
- notDone = True
- if biglie != possibileMossa and notDone == True:
- mossa = random.randint(1, biglie // 2)
- biglie = biglie - mossa
- print(f"il computer ha preso {mossa} biglie, ne rimangono {biglie} \n")
- notDone = False
- turno = True # il turno passa al giocatore
- #----------------------FINE PARTITA E OPZIONE RICOMINCIA------------------------------------------------------
- okay = False
- while not okay:
- endingCommand = input("è stata una bella parita, vuoi continuare a giocare? [si/no] ")
- if endingCommand == "si":
- end = False
- print("ricominciamo! \n" , "-" * 30)
- okay = True
- elif endingCommand == "no":
- end = True
- input("è stato un piacere giocare con te, premi invio per terminare il programma")
- okay = True
- else:
- print("non ho capito")
Advertisement
Add Comment
Please, Sign In to add comment