Estou tendo problemas com um 'jogo' que fiz. [RESOLVIDO]

1. Estou tendo problemas com um 'jogo' que fiz. [RESOLVIDO]

Reni Alkimim Dantas
MrReni

(usa Ubuntu)

Enviado em 22/08/2016 - 14:41h

Bom, eu desenvolvi um jogo para uma matéria da escola, PC (prática científica) de Matemática. O jogo tem o objetivo de calcular a probabilidade de tal evento ocorrer, ex: Se eu jogar uma moeda 7 vezes, sabendo que a mesma tem dois lados, qual seria a possibilidade de eu tirar cara? Logo o resultado seria: (1/(2**vezes))*100 = 0.78% de chance. Até aí tudo bem, a lógica está funcionando corretamente, porém eu escrevi uma função update() e outra desenhar(). E toda vez que eu chamo a update e desenhar, eu tenho que chamar um messagebox para que ocorra uma 'animação' (troca de imagens), se eu tirar o messagebox ele pula direto para a última imagem e fica muito seco. Alguém poderia me ajudar?

Código fonte: http://pastebin.com/W16bw0rF


  


2. Re: Estou tendo problemas com um 'jogo' que fiz.

Jeffersson Abreu
ctw6av

(usa Nenhuma)

Enviado em 22/08/2016 - 15:13h

Posso tentar mas vou precisar do arquivo constantes para um melhor resumo do programa, como ele deve ter aproximadamente 6 linhas pode ser postado aqui mesmo.




EDIT: Mas já adiantando o que percebi é que nas linhas 102/103 a variável probabilidade recebe (1 / (2 ** vezes)) * 100 e depois recebe uma função de retorno (arredondar(probabilidade)) que não existe.

Linhas que podem estar dando problema:
probabilidade = (1 / (2 ** vezes)) * 100
probabilidade = arredondar(probabilidade)


Linhas que podem ser declaras fora das funções gerais do programa para a função construtora (__init__(self))
self.spritesheet = []
self.number_of_sprite = 0
self.limite = len(self.spritesheet) - 1


----------------------------------------------------------
A Internet... foi projetada no espírito da confiança. Nem os protocolos de rede
de comunicações nem o software que comanda os sistemas computacionais
conectados a rede foram arquitetados para operação num ambiente no qual estão sob
ataque.
----------------------------------------------------------


3. Taí o constantes.

Reni Alkimim Dantas
MrReni

(usa Ubuntu)

Enviado em 22/08/2016 - 16:04h

http://pastebin.com/6TQuCM2R

ou

#Janela
LARGURA = 800
ALTURA = 600
CANVAS_L = 400
CANVAS_A = 450
#Jogo
lados_moeda = 2



def arredondar(numero):
return "%.2f" % numero


4. Re: Estou tendo problemas com um 'jogo' que fiz. [RESOLVIDO]

Jeffersson Abreu
ctw6av

(usa Nenhuma)

Enviado em 22/08/2016 - 18:58h

Bem legal o programa, parabéns cara. Se o problema era trocar a imagem de uma forma mais lenta, eu adicionei um controle alterável para você decidir a velocidade que quer que as imagens sejam trocadas ela está destacada e se chama self.speed

Eu também alterei algumas coisas tipo, nomes de funções que estavam em maiúsculo e etc, mas se não gostar é só mudar de volta os nomes.

# coding: utf-8

from tkinter import *
from random import randrange


class Jogo(object):
def __init__(self):
self.root = Tk()
self.root.geometry('%dx%d' % (800, 600))
self.root.resizable(False, False)
self.root.title('Jogo PC. Mat')

# Frame para conter o canvas
self.frame = Frame(bg="gray", pady=5, padx=5)
self.frame.pack()
self.framet = Frame()
self.framet.pack()
self.frametw = Frame()
self.frametw.pack()
self.frametwe = Frame()
self.frametwe.pack()

# Criamos a tela do jogo (canvas)
self.canvas = Canvas(self.frame, bg="white", width=400, height=450)
self.canvas.pack()

# E colocamos um botão para começar o jogo
self.comecar = Button(self.framet, text="Lançar moeda!")
self.comecar.bind("<Button-1>", self.comeca_jogo)
self.comecar.focus_force()
self.comecar.pack(pady=5)

# Label para vezes
lb_vezes = Label(self.framet, text="Quantidade de vezes: ", font=('Verdana', 12, 'bold'))
lb_vezes.pack(side=LEFT)
self.entry_vezes = Entry(self.framet)
self.entry_vezes.pack(side=LEFT)

# Label para indicar a porcentagem de chance de cair tal lado
self.lb_cara = Label(self.frametw, text="Probabilidade: cara", font=('Verdana', 12, 'italic'), fg="black",
pady=10, padx=50)
self.lb_cara.pack(side=LEFT)
self.lb_coroa = Label(self.frametw, text="Probabilidade: coroa", font=('Verdana', 12, 'italic'), fg="gray",
pady=10, padx=50)
self.lb_coroa.pack(side=LEFT)

# Caiu quantas vezes
self.lb_caiu_cara = Label(self.frametwe, text="Caiu: cara", font=('Verdana', 12, 'italic'), fg="black", pady=10,
padx=80)
self.lb_caiu_cara.pack(side=LEFT)
self.lb_caiu_coroa = Label(self.frametwe, text="Caiu: coroa", font=('Verdana', 12, 'italic'), fg="gray",
pady=10, padx=80)
self.lb_caiu_coroa.pack(side=LEFT)

# Controlando os sprites
self.number_of_sprite = 0
self.limite = 0

# Define o jogo
self.jogando = False

# =========================================================================================#
# Controla a troca de imagens (em milisegundos)
self.speed = 500 # 1/2 segundo
# =========================================================================================#

self.sprite_sheet = []

# Carregar imagens da moeda
self.carregar_imagens()

self.novo_jogo()
self.root.mainloop()

# Função que gera as imagens da moeda
def carregar_imagens(self):
for i in range(1, 2 + 1):
self.sprite_sheet.append(PhotoImage(file="moeda{}.gif".format(i)))

self.limite = len(self.sprite_sheet) - 1
print(len(self.sprite_sheet))

def novo_jogo(self):
self.jogando = True

def comeca_jogo(self, event):
self.jogar()

def jogar(self):
if self.jogando:
vezes = self.entry_vezes.get()

if len(vezes) < 1:
pass
else:
caiu_coroa = 0
caiu_cara = 0
vezes = int(vezes)

for vez in range(vezes):
print("Atualizando...\n")
resultado = self.update("<Button-1>")

if resultado == 'cara':
caiu_cara += 1
elif resultado == 'coroa':
caiu_coroa += 1

print("Desenhando...\n")
self.lb_caiu_cara['text'] = "Caiu cara: " + str(caiu_cara) + " vez(es)"
self.lb_caiu_coroa['text'] = "Caiu coroa: " + str(caiu_coroa) + " vez(es)"
self.root.after(self.speed, self.desenhar())
else:
print("O jogo acabou!\n")

@staticmethod
def arredondar(numero):
return '{:.2}'.format(numero)

def update(self, event):
self.number_of_sprite = randrange(1, 3)
vezes = self.entry_vezes.get()
vezes = int(vezes)
probabilidade = (1 / (2 ** vezes)) * 100
v_arredondado = self.arredondar(probabilidade)
self.lb_cara['text'] = "Probabilidade de cair cara: " + str(v_arredondado) + "%"
self.lb_coroa['text'] = "Probabilidade de cair coroa: " + str(v_arredondado) + "%"

if self.number_of_sprite == 2:
self.number_of_sprite = 0
return "cara"

elif self.number_of_sprite == 1:
self.number_of_sprite = 1
return "coroa"

def desenhar(self):
self.canvas.delete(ALL)
print(self.number_of_sprite)
self.canvas.create_image((400 / 2, 450 / 2), image=self.sprite_sheet[self.number_of_sprite])
self.canvas.update()


if __name__ == '__main__':
Jogo()


----------------------------------------------------------
A Internet... foi projetada no espírito da confiança. Nem os protocolos de rede
de comunicações nem o software que comanda os sistemas computacionais
conectados a rede foram arquitetados para operação num ambiente no qual estão sob
ataque.
----------------------------------------------------------


5. Solução

Reni Alkimim Dantas
MrReni

(usa Ubuntu)

Enviado em 22/08/2016 - 21:03h

Cara, muito obrigado pelo que tu fez. Gostei bastante das modificações :D


6. Re: Estou tendo problemas com um 'jogo' que fiz. [RESOLVIDO]

Jeffersson Abreu
ctw6av

(usa Nenhuma)

Enviado em 23/08/2016 - 00:44h

De nada amigo! Agora é só marcar o tópico como resolvido.






----------------------------------------------------------
A Internet... foi projetada no espírito da confiança. Nem os protocolos de rede
de comunicações nem o software que comanda os sistemas computacionais
conectados a rede foram arquitetados para operação num ambiente no qual estão sob
ataque.
----------------------------------------------------------


7. Re: Estou tendo problemas com um 'jogo' que fiz. [RESOLVIDO]

Lisandro Guerra
Lisandro

(usa Arch Linux)

Enviado em 26/08/2016 - 22:22h

ctw6av escreveu:

Bem legal o programa, parabéns cara. Se o problema era trocar a imagem de uma forma mais lenta, eu adicionei um controle alterável para você decidir a velocidade que quer que as imagens sejam trocadas ela está destacada e se chama self.speed

Eu também alterei algumas coisas tipo, nomes de funções que estavam em maiúsculo e etc, mas se não gostar é só mudar de volta os nomes.

# coding: utf-8

from tkinter import *
from random import randrange


class Jogo(object):
def __init__(self):
self.root = Tk()
self.root.geometry('%dx%d' % (800, 600))
self.root.resizable(False, False)
self.root.title('Jogo PC. Mat')

# Frame para conter o canvas
self.frame = Frame(bg="gray", pady=5, padx=5)
self.frame.pack()
self.framet = Frame()
self.framet.pack()
self.frametw = Frame()
self.frametw.pack()
self.frametwe = Frame()
self.frametwe.pack()

# Criamos a tela do jogo (canvas)
self.canvas = Canvas(self.frame, bg="white", width=400, height=450)
self.canvas.pack()

# E colocamos um botão para começar o jogo
self.comecar = Button(self.framet, text="Lançar moeda!")
self.comecar.bind("<Button-1>", self.comeca_jogo)
self.comecar.focus_force()
self.comecar.pack(pady=5)

# Label para vezes
lb_vezes = Label(self.framet, text="Quantidade de vezes: ", font=('Verdana', 12, 'bold'))
lb_vezes.pack(side=LEFT)
self.entry_vezes = Entry(self.framet)
self.entry_vezes.pack(side=LEFT)

# Label para indicar a porcentagem de chance de cair tal lado
self.lb_cara = Label(self.frametw, text="Probabilidade: cara", font=('Verdana', 12, 'italic'), fg="black",
pady=10, padx=50)
self.lb_cara.pack(side=LEFT)
self.lb_coroa = Label(self.frametw, text="Probabilidade: coroa", font=('Verdana', 12, 'italic'), fg="gray",
pady=10, padx=50)
self.lb_coroa.pack(side=LEFT)

# Caiu quantas vezes
self.lb_caiu_cara = Label(self.frametwe, text="Caiu: cara", font=('Verdana', 12, 'italic'), fg="black", pady=10,
padx=80)
self.lb_caiu_cara.pack(side=LEFT)
self.lb_caiu_coroa = Label(self.frametwe, text="Caiu: coroa", font=('Verdana', 12, 'italic'), fg="gray",
pady=10, padx=80)
self.lb_caiu_coroa.pack(side=LEFT)

# Controlando os sprites
self.number_of_sprite = 0
self.limite = 0

# Define o jogo
self.jogando = False

# =========================================================================================#
# Controla a troca de imagens (em milisegundos)
self.speed = 500 # 1/2 segundo
# =========================================================================================#

self.sprite_sheet = []

# Carregar imagens da moeda
self.carregar_imagens()

self.novo_jogo()
self.root.mainloop()

# Função que gera as imagens da moeda
def carregar_imagens(self):
for i in range(1, 2 + 1):
self.sprite_sheet.append(PhotoImage(file="moeda{}.gif".format(i)))

self.limite = len(self.sprite_sheet) - 1
print(len(self.sprite_sheet))

def novo_jogo(self):
self.jogando = True

def comeca_jogo(self, event):
self.jogar()

def jogar(self):
if self.jogando:
vezes = self.entry_vezes.get()

if len(vezes) < 1:
pass
else:
caiu_coroa = 0
caiu_cara = 0
vezes = int(vezes)

for vez in range(vezes):
print("Atualizando...\n")
resultado = self.update("<Button-1>")

if resultado == 'cara':
caiu_cara += 1
elif resultado == 'coroa':
caiu_coroa += 1

print("Desenhando...\n")
self.lb_caiu_cara['text'] = "Caiu cara: " + str(caiu_cara) + " vez(es)"
self.lb_caiu_coroa['text'] = "Caiu coroa: " + str(caiu_coroa) + " vez(es)"
self.root.after(self.speed, self.desenhar())
else:
print("O jogo acabou!\n")

@staticmethod
def arredondar(numero):
return '{:.2}'.format(numero)

def update(self, event):
self.number_of_sprite = randrange(1, 3)
vezes = self.entry_vezes.get()
vezes = int(vezes)
probabilidade = (1 / (2 ** vezes)) * 100
v_arredondado = self.arredondar(probabilidade)
self.lb_cara['text'] = "Probabilidade de cair cara: " + str(v_arredondado) + "%"
self.lb_coroa['text'] = "Probabilidade de cair coroa: " + str(v_arredondado) + "%"

if self.number_of_sprite == 2:
self.number_of_sprite = 0
return "cara"

elif self.number_of_sprite == 1:
self.number_of_sprite = 1
return "coroa"

def desenhar(self):
self.canvas.delete(ALL)
print(self.number_of_sprite)
self.canvas.create_image((400 / 2, 450 / 2), image=self.sprite_sheet[self.number_of_sprite])
self.canvas.update()


if __name__ == '__main__':
Jogo()


----------------------------------------------------------
A Internet... foi projetada no espírito da confiança. Nem os protocolos de rede
de comunicações nem o software que comanda os sistemas computacionais
conectados a rede foram arquitetados para operação num ambiente no qual estão sob
ataque.
----------------------------------------------------------


Ficou bem legal. Eheheh!!!


8. Re: Estou tendo problemas com um 'jogo' que fiz. [RESOLVIDO]

Jeffersson Abreu
ctw6av

(usa Nenhuma)

Enviado em 26/08/2016 - 22:37h

Fala sério, quando o código alheio começa a ficar claro e agente se torna capaz de aperfeiçoá-lo, mesmo que o código seja pequeno é bem gratificante né.




----------------------------------------------------------
A Internet... foi projetada no espírito da confiança. Nem os protocolos de rede
de comunicações nem o software que comanda os sistemas computacionais
conectados a rede foram arquitetados para operação num ambiente no qual estão sob
ataque.
----------------------------------------------------------






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts