Advertisement
LightProgrammer000

Jogo do NIM [python 3]

Feb 20th, 2020
607
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.41 KB | None | 0 0
  1. '''
  2. Programa: Jogo do NIM
  3.  
  4. Campeonato:
  5. [1] n = 3 // m = 1
  6. [2] n = 3 // m = 2
  7. [3] n = 4 // m = 3
  8. '''
  9.  
  10. # Metodo: Menu
  11. def menu():
  12.  
  13.     # Apresentacao
  14.     print("\nBem-vindo ao jogo do NIM! Escolha:")
  15.     print("# 1 -> Partida isolada")
  16.     print("# 2 -> Campeonato")
  17.     opc = int(input("# Opc: "))
  18.  
  19.     # Estrutura de decisao: Partida
  20.     if opc == 1:
  21.         return 1
  22.  
  23.     # Estrutura de decisao: Campeonato
  24.     elif opc == 2:
  25.         return 2
  26.  
  27.     # Estrutura de decisao: Erro
  28.     else:
  29.         return 0
  30.  
  31. # Metodo: Partida
  32. def partida():
  33.  
  34.     # Entrada de dados
  35.     n = int(input("Quantas peças? "))  # Obs: n o número de peças inicial
  36.     n = protecao_pecas(n)
  37.  
  38.     m = int(input("Limite de peças por jogada? "))  # Obs: m o número máximo de peças que é possível retirar em uma rodada
  39.     m = protecao_limites(m)
  40.  
  41.     # Estrutura de decisao: Logica
  42.     # Exemplo: n = 4 -- m = 3
  43.     if (n % (m + 1)) == 0:
  44.  
  45.         # Apresentacao
  46.         print("\nVoce começa!")
  47.  
  48.         # Estrutura de repeticao: Numero de peças nao chegou a 'zero'
  49.         while n > 0:
  50.  
  51.             # Chamada de metodo: Jogada do usuario
  52.             b = usuario_escolhe_jogada(n, m)
  53.             print(acerto_texto_jogador(b))
  54.  
  55.             # Calculo: Numero de pecas atual
  56.             n -= b
  57.             print(acerto_texto_peca(n))
  58.  
  59.             # Chamada de metodo: Jogada do computador
  60.             a = computador_escolhe_jogada(n, m)
  61.             print(acerto_texto_computador(a))
  62.  
  63.             # Calculo: Numero de pecas atual
  64.             n -= a
  65.             print(final_jogo(n))
  66.  
  67.     # Exemplo: n = 6 -- m = 3
  68.     else:
  69.  
  70.         # Apresentacao
  71.         print("\nComputador começa!")
  72.  
  73.         # Estrutura de repeticao: Numero de peças
  74.         while n > 0:
  75.  
  76.             # Calculo
  77.             a = computador_escolhe_jogada(n, m)
  78.             print(acerto_texto_computador(a))
  79.  
  80.             # Calculo: Numero de peças
  81.             n -= a
  82.  
  83.             # Estrutura de decisao: Nenhuma peça
  84.             if n == 0:
  85.                 print("Fim do jogo! O computador ganhou!")
  86.  
  87.             # Estrutura de decisao:
  88.             else:
  89.                 print("Agora restam", n, "peças no tabuleiro.")
  90.  
  91.                 b = usuario_escolhe_jogada(n, m)
  92.                 print(acerto_texto_jogador(b))
  93.  
  94.                 # Calculo: Numero de peças
  95.                 n -= b
  96.                 print(acerto_texto_peca(n))
  97.  
  98. ####### Metodo de controle geral #######
  99. def acerto_texto_computador(a):
  100.  
  101.     # Estrutura de decisao: Acerto do texto
  102.     if a > 1:
  103.         return "\nO computador tirou " + str(a) + " peças."
  104.  
  105.     else:
  106.         return "\nO computador tirou uma peça."
  107.  
  108. def acerto_texto_jogador(b):
  109.  
  110.     # Estrutura de decisao: Acerto do texto
  111.     if b > 1:
  112.         return "Você tirou " + str(b) + " peças."
  113.  
  114.     else:
  115.         return "Você tirou uma peça."
  116.  
  117. def acerto_texto_peca(n):
  118.  
  119.     # Estrutura de decisao: Acerto do texto
  120.     if n > 1:
  121.         return "Agora restam " + str(n) + " peças no tabuleiro."
  122.  
  123.     else:
  124.         return "Agora resta apenas uma peça no tabuleiro."
  125.  
  126. def final_jogo(n):
  127.  
  128.     # Estrutura de decisao: Acerto do texto + Final de jogo
  129.     if n == 0:
  130.         return "Fim do jogo! O computador ganhou!"
  131.  
  132.     elif n == 1:
  133.         return "Agora restam apenas uma peça no tabuleiro."
  134.  
  135.     else:
  136.         return "Agora restam " + str(n) + " peças no tabuleiro."
  137.  
  138. ####### Metodo de protecao #######
  139. def protecao_pecas(n):
  140.  
  141.     while n <= 0:
  142.         print("\nInvalido")
  143.         n = int(input("Quantas peças? "))
  144.  
  145.     return n
  146.  
  147. def protecao_limites(m):
  148.  
  149.     while m <= 0:
  150.         print("\nInvalido")
  151.         m = int(input("Limite de peças por jogada? "))
  152.  
  153.     return m
  154.  
  155. # Metodo: Campeonato
  156. def campeonato():
  157.  
  158.     # Variavel
  159.     rodada = 1
  160.  
  161.     # Estrutura de repeticao
  162.     while rodada < 4:
  163.  
  164.         # Apresentacao
  165.         print("\n**** Rodada", rodada, "****\n")
  166.  
  167.         # Chamada de metodo
  168.         partida()
  169.  
  170.         # Incremento
  171.         rodada += 1
  172.  
  173.     # Apresentacao
  174.     print("\n**** Final do campeonato! ****")
  175.     print("\nPlacar: Você 0 X 3 Computador")
  176.  
  177. # Metodo: Jogada do computador
  178. def computador_escolhe_jogada(n, m):
  179.  
  180.     # Variavel: Controle de retirada de pecas pelo computador
  181.     comp_ret = 0
  182.  
  183.     # Estrutura de repeticao: Pecas > Retiradas pelo computador
  184.     while m >= comp_ret:
  185.  
  186.         if (n - comp_ret) % (m + 1) == 0:
  187.             return comp_ret
  188.  
  189.         comp_ret += 1
  190.  
  191.     return m
  192.  
  193. # Metodo: Jogada do usuario
  194. def usuario_escolhe_jogada(n, m):
  195.  
  196.     # Entrada de dados
  197.     usu = int(input("\nQuantas peças você vai tirar? "))
  198.  
  199.     # Estrutura de repeticao: (Jogada do usuario > limite) ou (Jogada do usuario > numero de pecas)
  200.     while (usu > m) or (usu > n) or (usu <= 0):
  201.  
  202.         # Apresentacao
  203.         print("\nOops! Jogada inválida! Tente de novo.")
  204.  
  205.         # Entrada de dados
  206.         usu = int(input("\nQuantas peças você vai tirar? "))
  207.  
  208.     return usu
  209.  
  210. # Programa principal
  211. def main():
  212.  
  213.     # Chamada de metodo
  214.     opc = menu()
  215.  
  216.     # Estrutura de decisao: Menu (Partida)
  217.     if opc == 1:
  218.  
  219.         print("Voce escolheu uma partida isolada!\n")
  220.         partida()
  221.  
  222.     # Estrutura de decisao: Menu (Campeonato)
  223.     elif opc == 2:
  224.  
  225.         print("Voce escolheu um campeonato!")
  226.         campeonato()
  227.  
  228.     else:
  229.         exit(0)
  230.  
  231. # Execucao
  232. if __name__ == '__main__':
  233.     main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement