fork download
  1. class Carta(object):
  2.  
  3. def __init__(self, numero, naipe):
  4. self._numero = numero
  5. self._naipe = naipe
  6.  
  7. @property
  8. def numero(self):
  9. return self._numero
  10.  
  11. def __repr__(self):
  12. return '{}{}'.format(self._numero, self._naipe)
  13.  
  14.  
  15. class Baralho(object):
  16.  
  17. numeros = '2 3 4 5 6 7 8 9 10 J Q K A'.split()
  18. naipes = '♥ ♦ ♣ ♠'.split()
  19.  
  20. def __init__(self):
  21. self._baralho = [Carta(numero, naipe) for numero in Baralho.numeros for naipe in Baralho.naipes]
  22. self.embaralha()
  23.  
  24. def embaralha(self):
  25. shuffle(self._baralho)
  26.  
  27. def pega_carta(self):
  28. return self._baralho.pop()
  29.  
  30.  
  31. class Observador(object):
  32.  
  33. def __init__(self):
  34. self._observadores = set()
  35.  
  36. def adiciona(self, observador):
  37. self._observadores.add(observador)
  38.  
  39. def remove(self, observador):
  40. self._observadores.remove(observador)
  41.  
  42. def notifica(self):
  43. for observador in self._observadores:
  44. observador.atualiza()
  45.  
  46.  
  47. class Pontos(object):
  48.  
  49. def __init__(self):
  50. self._pontos = 0
  51.  
  52. def __add__(self, carta):
  53. if carta.numero == 'A':
  54. self._pontos += 1
  55. elif carta.numero in 'JQK':
  56. self._pontos += 10
  57. else:
  58. self._pontos += int(carta.numero)
  59.  
  60. @property
  61. def pontos(self):
  62. return self._pontos
  63.  
  64. def __repr__(self):
  65. return str(self._pontos)
  66.  
  67.  
  68. class Tela(object):
  69.  
  70. def __init__(self):
  71. self.baralho = Baralho()
  72. self.pontos = Pontos()
  73. self.fonte = ('Comic Sans MS', 12, 'bold')
  74. self.root = tk.Tk()
  75. self.root.title('Blackjack')
  76. self.root.geometry('300x300+100+100')
  77. self.frame1 = tk.Frame(self.root)
  78. self.frame2 = tk.Frame(self.root)
  79. tk.Label(self.root, text = 'Blackjack', fg = 'red', font = self.fonte).pack()
  80. self.iniciar = tk.Button(self.frame1, text = 'Iniciar', font = self.fonte, width = 8)
  81. self.iniciar['command'] = self.func_iniciar
  82. self.iniciar.pack(side = tk.LEFT)
  83. self.sair = tk.Button(self.frame1, text = 'Sair', font = self.fonte, width = 8)
  84. self.sair['command'] = self.func_sair
  85. self.sair.pack(side = tk.LEFT)
  86. self.mostra_pontos = tk.Label(self.frame2, text = '--', font = self.fonte)
  87. self.mostra_pontos.pack(side = tk.TOP)
  88. self.mostra_cartas = tk.Label(self.frame2, text = '--', font = self.fonte)
  89. self.mostra_cartas.pack(side = tk.TOP)
  90. self.mais_uma = tk.Button(self.frame2, text = 'Mais uma', font = self.fonte, fg = 'green', width = 8)
  91. self.mais_uma.pack(side = tk.BOTTOM)
  92. self.tela_inicial()
  93.  
  94. def pede_carta(self):
  95. return self.baralho.pega_carta()
  96.  
  97. def atualiza(self):
  98. self.atualizaCartasPontos(self.pede_carta())
  99.  
  100. def atualizaCartasPontos(self, carta):
  101. self.pontos += carta
  102. self.mostra_cartas['text'] = carta
  103. self.atualiza_pontos()
  104.  
  105. def atualiza_pontos(self):
  106. self.mostra_pontos['text'] = self.pontos
  107.  
  108. def func_iniciar(self):
  109. self.tela_jogo()
  110.  
  111. def func_sair(self):
  112. self.root.destroy()
  113.  
  114. def tela_jogo(self):
  115. self.frame1.pack_forget()
  116. self.frame2.pack()
  117.  
  118. def tela_inicial(self):
  119. self.frame2.pack_forget()
  120. self.frame1.pack(side = tk.BOTTOM)
  121.  
  122.  
  123. class Blackjack(Observador):
  124.  
  125. def __init__(self):
  126. self.baralho = Baralho()
  127. self.pontos = Pontos()
  128. self.tela = Tela()
  129. self.adiciona(self.tela)
Success #stdin #stdout 0.04s 9348KB
stdin
Standard input is empty
stdout
Standard output is empty