MatteB_01

Untitled

Oct 2nd, 2022
367
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.01 KB | None | 0 0
  1. '''
  2. --------------------------GIOCO DI NIM------------------------------------
  3. REGOLE:
  4. Due giocatori prelevano alternativamente biglie da un mucchietto. Ad ogni mossa,
  5. un giocatore sceglie quante biglie prendere: almeno una e al massimo metà delle
  6. biglie disponibili. Poi è il turno dell’altro giocatore. Il giocatore che prende
  7. l’ultima biglia perde la partita.
  8.  
  9. CONSEGNA:
  10. Scrivete una 10 e 100 e usatelo come dimensione iniziale
  11. del mucchietto di biglie. Generate u programma che consenta all’utente di giocare contro il computer.
  12. Generate un numero intero compreso trn numero intero, 0 o 1, e utilizzatelo per decidere
  13. se sarà l’utente o il computer a giocare per primo. Generate un numero intero, 0 o 1,
  14. e usatelo per decidere se il computer giocherà in modo intelligente o stupido:
  15. giocando in modo stupido, ad ogni sua mossa il computer semplicemente preleva dal
  16. mucchietto un numero di biglie casuale (ma valido, cioè compreso tra 1 e n/2, se nel
  17. mucchietto sono rimaste n biglie); in modalità intelligente, invece, preleva un
  18. numero di biglie tale che il numero di quelle che rimangono nel mucchio sia una
  19. potenza di due diminuita di un’unità, cioè 3, 7, 15, 31 o 63. Quest’ultima è sempre
  20. una mossa valida, tranne quando la dimensione del mucchio è proprio uguale a una
  21. potenza di due diminuita di un’unità: in tal caso il computer fa una mossa scelta a
  22. caso (ovviamente tra quelle valide). Come potrete verificare sperimentalmente, il
  23. computer non può essere battuto quando gioca in modalità intelligente e fa la prima
  24. mossa, a meno che la dimensione iniziale del mucchio non sia 15, 31 o 63.
  25. Analogamente, un giocatore umano che faccia la prima mossa e conosca la strategia
  26. qui descritta è in grado di battere il calcolatore.
  27.  
  28. '''
  29.  
  30.  
  31. #-----------PRESENTAZIONE DEL GIOCO-----------------
  32.  
  33. print("-" * 20 , "+" , "-" * 15, "+", "-" * 20)
  34. print("-" * 20 , "|IL GIOCO DI NIM |" , "-" * 20)
  35. print("-" * 20 , "+" , "-" * 15, "+", "-" * 20)
  36. print("\n")
  37.  
  38. print(" " * 25 , "REGOLE:")
  39.  
  40. print(" Due giocatori prelevano alternativamente biglie da un mucchietto.")
  41. print(" un giocatore sceglie quante biglie prendere: almeno una e al massimo metà delle")
  42. print(" biglie disponibili. Poi è il turno dell’altro giocatore. Il giocatore che prende")
  43. print(" l’ultima biglia perde la partita. \n \n")
  44. print("-" * 61 , "\n" * 2)
  45.  
  46.  
  47. #---------------------------------------------------
  48.  
  49. import random
  50. end = False
  51.  
  52. while not end:
  53.  
  54. turnoIniziale = random.randint(0, 1)
  55. cpu = random.randint(0, 1)
  56. biglie = random.randint(10, 100)
  57.  
  58. turno = False # false----> tocca al computer | true----> tocca al giocatore
  59.  
  60.  
  61. print("INIZIA IL GIOCO: \n")
  62. print(f"nel sacco ci sono {biglie} biglie \n")
  63.  
  64.  
  65. # -------------------------------------------FASE INIZIALE --------------------------------------------------------
  66.  
  67. if turnoIniziale == 0:
  68. print("INIZIA IL COMPUTER")
  69.  
  70. if cpu == 0: # il computer è in modalità facile, estrarrà un numero casuale di biglie
  71.  
  72. print("oh no, qualcuno ha versato della birra sul computer! \n")
  73. mossa = random.randint(1, biglie // 2)
  74. biglie = biglie - mossa
  75. print(f"il computer ha preso {mossa} biglie, ne rimangono {biglie} \n")
  76.  
  77.  
  78.  
  79. else: # il computer è in modalità difficile, estrarrà un numero tale di biglie da farne rimanere 2^n - 1 e vincere
  80.  
  81. print("il computer vuole fare sul serio! \n")
  82.  
  83. for n in range(biglie // 2, 0 , -1):
  84.  
  85. possibileMossa = biglie - n
  86.  
  87. if possibileMossa == 3 or possibileMossa == 7 or possibileMossa == 15 or possibileMossa == 31 or possibileMossa == 63:
  88. biglie = possibileMossa
  89. print(f"il computer ha preso {n} biglie, ne rimangono {biglie} \n")
  90. break
  91. else:
  92. notDone = True
  93.  
  94.  
  95.  
  96. if biglie != possibileMossa and notDone == True:
  97.  
  98. mossa = random.randint(1, biglie // 2)
  99. biglie = biglie - mossa
  100. print(f"il computer ha preso {mossa} biglie, ne rimangono {biglie} \n")
  101. notDone = False
  102.  
  103.  
  104. turno = True # il turno passa al giocatore
  105.  
  106.  
  107. else:
  108.  
  109. print("INIZIA IL GIOCATORE \n")
  110.  
  111. ok = False
  112.  
  113. while not ok:
  114.  
  115. mossa = input("quante biglie vuoi prendere? ")
  116.  
  117. if mossa.isnumeric() and int(mossa) <= biglie // 2:
  118. mossa = int(mossa)
  119. biglie = biglie - mossa
  120. print(f"hai preso {mossa} biglie, ne rimangono {biglie} \n")
  121. ok = True
  122.  
  123. else:
  124. print("la mossa non è valida, riprova \n")
  125.  
  126. turno = False #il turno passa al computer
  127.  
  128.  
  129.  
  130. #----------------------------------CICLAZIONE DEI TURNI----------------------------------------
  131.  
  132.  
  133. while biglie >= 1:
  134.  
  135. #---------------------------------
  136. if biglie == 1:
  137. if turno == False: #dovrebbe giocare il computer ma rimane una biglia, ha vinto il giocatore
  138.  
  139. print("COMPLIMENTI, HAI VINTO! \n")
  140. break
  141.  
  142. else: #dovrebbe giocare il giocatore ma rimane una biglia, ha vinto il computer
  143. print("HA VINTO IL COMPUTER, COMPLIMENTI AMMASSO DI FERRAGLIA FIGLIO DI UN TOSTAPANE CHE NON SEI ALTRO! \n")
  144. break
  145. #--------------------------------
  146.  
  147.  
  148. elif turno == True:
  149.  
  150. print("TOCCA AL GIOCATORE \n")
  151.  
  152. ok = False
  153.  
  154. while not ok == True:
  155.  
  156. mossa = input("quante biglie vuoi prendere? ")
  157.  
  158. if mossa.isnumeric() and int(mossa) <= biglie // 2:
  159. mossa = int(mossa)
  160. biglie = biglie - mossa
  161. print(f"hai preso {mossa} biglie, ne rimangono {biglie} \n")
  162. ok = True
  163.  
  164. else:
  165. print("la mossa non è valida, riprova \n")
  166.  
  167. turno = False # il turno passa al computer
  168.  
  169.  
  170. else:
  171.  
  172. print("TOCCA AL COMPUTER")
  173.  
  174. if cpu == 0: # il computer è in modalità facile, estrarrà un numero casuale di biglie
  175.  
  176. mossa = random.randint(1, biglie // 2)
  177. biglie = biglie - mossa
  178. print(f"il computer ha preso {mossa} biglie, ne rimangono {biglie} \n")
  179.  
  180.  
  181.  
  182. else: # il computer è in modalità difficile, estrarrà un numero tale di biglie da farne rimanere 2^n - 1 e vincere
  183.  
  184.  
  185. for n in range(biglie // 2, 0, -1):
  186.  
  187. possibileMossa = biglie - n
  188.  
  189. if possibileMossa == 3 or possibileMossa == 7 or possibileMossa == 15 or possibileMossa == 31 or possibileMossa == 63:
  190.  
  191. biglie = possibileMossa
  192.  
  193. print(f"il computer ha preso {n} biglie, ne rimangono {biglie} \n")
  194.  
  195. break
  196.  
  197. else:
  198. notDone = True
  199.  
  200.  
  201. if biglie != possibileMossa and notDone == True:
  202. mossa = random.randint(1, biglie // 2)
  203.  
  204. biglie = biglie - mossa
  205.  
  206. print(f"il computer ha preso {mossa} biglie, ne rimangono {biglie} \n")
  207.  
  208. notDone = False
  209.  
  210. turno = True # il turno passa al giocatore
  211.  
  212.  
  213. #----------------------FINE PARTITA E OPZIONE RICOMINCIA------------------------------------------------------
  214.  
  215.  
  216. okay = False
  217.  
  218. while not okay:
  219.  
  220. endingCommand = input("è stata una bella parita, vuoi continuare a giocare? [si/no] ")
  221.  
  222. if endingCommand == "si":
  223. end = False
  224. print("ricominciamo! \n" , "-" * 30)
  225. okay = True
  226.  
  227. elif endingCommand == "no":
  228. end = True
  229. input("è stato un piacere giocare con te, premi invio per terminare il programma")
  230. okay = True
  231. else:
  232. print("non ho capito")
Advertisement
Add Comment
Please, Sign In to add comment