fork(1) download
  1. # Juego de dados
  2. # En un juego de dados, todos los participantes tienen el
  3. # mismo número de dados (con 6 caras, de la 1 a la 6).
  4. # En cada turno, cada jugador tira todos sus dados, sumando
  5. # cada dado para obtener una puntuación.
  6. # Gana el jugador con mejor puntuación tras tres turnos.
  7. #
  8. # jbgarcia@uvigo.es - (c) 2017 - Licencia MIT
  9.  
  10.  
  11. import random
  12.  
  13.  
  14. class Dado:
  15. """Representa un dado de seis caras, de 1 a 6."""
  16.  
  17. def __init__(self):
  18. self.ultimo_resultado = 0
  19.  
  20. def tirada(self):
  21. self.ultimo_resultado = random.randint(1, 6)
  22. return self.ultimo_resultado
  23.  
  24. def __str__(self):
  25. return str(self.ultimo_resultado)
  26.  
  27.  
  28. class Jugador:
  29. """Representa a un jugador que tiene x dados."""
  30.  
  31. def __init__(self, nick, num_dados):
  32. """Crea un nuevo jugador.
  33.  
  34. :param nick: El nick del jugador.
  35. :param num_dados: El num. de dados para la partida."""
  36.  
  37. self.nick = nick
  38. self.num_dados = num_dados
  39. self.dados = []
  40. self.ultima_tirada = []
  41. for i in range(num_dados):
  42. self.dados += [Dado()]
  43.  
  44. def tirada(self):
  45. """Realiza una tirada con todos los dados."""
  46.  
  47. self.ultima_tirada = []
  48.  
  49. for dado in self.dados:
  50. self.ultima_tirada += [dado.tirada()]
  51.  
  52. return self.ultima_tirada
  53.  
  54. def __str__(self):
  55. toret = self.nick + ": "
  56.  
  57. for x in self.ultima_tirada:
  58. toret += str(x) + ' '
  59.  
  60. return toret.strip()
  61.  
  62.  
  63. class Juego:
  64. """Representa un juego de x jugadores e y turnos.
  65. Permitirá incorporar jugadores.
  66. El método juega() lanza los y turnos, guardando
  67. los resultados parciales y la puntuación total."""
  68.  
  69. def __init__(self, num_turnos, num_dados):
  70. """Crea un nuevo juego.
  71.  
  72. :param num_turnos: El num. de turnos a jugar.
  73. :param num_dados: El num. de dados para todos.
  74. """
  75.  
  76. self.num_turnos = num_turnos
  77. self.num_dados = num_dados
  78. self.jugadores = []
  79. self.puntos_max = []
  80. self.puntos_parciales = []
  81. self.turnos = []
  82.  
  83. def inserta_jugador(self, nick):
  84. self.jugadores += [Jugador(nick, self.num_dados)]
  85.  
  86. def juega(self):
  87. self.puntos_max = [0] * len(self.jugadores)
  88. self.turnos = []
  89.  
  90. for _ in range(self.num_turnos):
  91. self.puntos_parciales = [[]] * len(self.jugadores)
  92.  
  93. for i, jugador in enumerate(self.jugadores):
  94. pts = jugador.tirada()
  95. self.puntos_max[i] += sum(pts)
  96. self.puntos_parciales[i] = list(jugador.ultima_tirada)
  97.  
  98. self.turnos += [list(self.puntos_parciales)]
  99.  
  100. def __str__(self):
  101. toret = str.format("Juego de {0} turnos y {1} dados.\n\n",
  102. self.num_turnos, self.num_dados)
  103.  
  104. for puntos in self.turnos:
  105. for i, pts in enumerate(puntos):
  106. toret += self.jugadores[i].nick + ": " + str(pts)
  107.  
  108. toret += '\n'
  109. toret += '\n'
  110.  
  111. toret += "Puntuaciones finales:\n"
  112. for i, pts in enumerate(self.puntos_max):
  113. toret += self.jugadores[i].nick + ": " + str(pts) + '\n'
  114.  
  115. return toret
  116.  
  117. if __name__ == "__main__":
  118. random.seed()
  119. juego = Juego(random.randint(2, 6), random.randint(3, 6))
  120. juego.inserta_jugador("Baltasar")
  121. juego.inserta_jugador("Fulano")
  122. juego.inserta_jugador("Mengano")
  123. juego.inserta_jugador("Zutano")
  124. juego.juega()
  125. print(juego)
  126.  
Success #stdin #stdout 0.02s 37616KB
stdin
Standard input is empty
stdout
Juego de 4 turnos y 4 dados.

Baltasar: [1, 6, 4, 4]
Fulano: [5, 2, 2, 6]
Mengano: [3, 3, 1, 2]
Zutano: [3, 1, 1, 4]

Baltasar: [5, 6, 1, 3]
Fulano: [4, 6, 5, 4]
Mengano: [4, 1, 5, 4]
Zutano: [1, 4, 5, 2]

Baltasar: [5, 3, 2, 4]
Fulano: [3, 4, 2, 3]
Mengano: [1, 2, 4, 5]
Zutano: [3, 1, 1, 6]

Baltasar: [4, 6, 1, 3]
Fulano: [1, 3, 5, 1]
Mengano: [1, 3, 4, 5]
Zutano: [3, 5, 3, 5]

Puntuaciones finales:
Baltasar: 58
Fulano: 56
Mengano: 48
Zutano: 48