Jump to content
luislima

MAGO - PC vs Utilizador

Recommended Posts

luislima

Boas ,

tenho o "mago" a funcionar ainda o básico mas a "versao utilizador vs PC" desta forma

# MAGO , HUMANO vs COMPUTADOR
import random


print "Bem-Vindo"
print "MAGO - HUMANO vs COMPUTADOR"


numero = input ( "Qual o numero para o computador adivinhar ? (de 1 até 100) :")

num_max=100
num_min=1
tentativas=0

resposta="n"

while (resposta!= "s"):
    valor=random.randint (num_min,num_max)
    tentativas= tentativas + 1
    print valor
    resposta=raw_input ("Acertei no número? (S/N)")

    if resposta != "s":
        x=raw_input("Introduza se o valor e maior ou menor que o pretendido. (</>)")
        if (x=="<"):
            num_max=valor-1
        elif (x==">"):
            num_min=valor+1            
        else:
            print "ERRO! Digite < ou >"

if ((resposta=="s") or (resposta=="S")) and tentativas==0:
    print "BOA, À PRIMEIRA!!!"
else:
    print "Finalmente! Precisou de", tentativas , "tentativas!"

Agora gostava de ter a versão contraria , ou seja , PC vs utilizador! Sei que deve ser uma coisa básica mas ainda sou mt noob no python!

AJUDEEEEEM-MEEE PF

Share this post


Link to post
Share on other sites
Localhost

Pedes um número ao utilizador, depois vais gerando números aleatórios (como fizeste na versão que apresentaste) e verificas se o número é igual ao que o utilizador introduziu. Qual é a complicação?

Já agora, utiliza as tags code.


here since 2009

Share this post


Link to post
Share on other sites
luislima

Agora quero que seja o computador a gerar um numero e o utilizador acertar.

a versao que fiz era o utilizador dava o numero e o pc gerava random's ate acertar. E actualizando o valor min e max do random

Share this post


Link to post
Share on other sites
AlexPnt

Boas, nesse caso o computador gera um numero e guarda-o, depois o utilizador está constantemente a adivinhar valores até q o valor seja igual ao valor gerado pelo pc, algo como:


import random

print "Bem-Vindo"
print "MAGO - COMPUTADOR vs HUMANO"
num_max=100
num_min=1
tentativas=0
valor=random.randint (num_min,num_max)
adivinha=input('Adivinha no numero que estou a pensar...=')
while adivinha!=valor:
    
    tentativas= tentativas + 1
    print 'Hmm, tente outra vez..'
    
    
    if adivinha<valor:
        print 'Uma pista, o numero e maior que esse...\n'
        
    elif adivinha>valor:
        print 'Uma pista, o numero e menor que esse...\n' 
    
    adivinha=input('Adivinha no numero que estou a pensar...=')


if adivinha==valor and tentativas==0:
    print "BOA, À PRIMEIRA!!!"
else:
    print "Finalmente! Precisou de", tentativas , "tentativas!"

Diverte-te e espero ter ajudado.. :)


Programming is an art form that fights back.

Share this post


Link to post
Share on other sites
luislima

Boas , tenho agora o meu programa das 2 versoes .


# MAGO , HUMANO vs COMPUTADOR
# MAGO , COMPUTADOR VS HUMANO
import random


print "Bem-Vindo"
print "MAGO - HUMANO vs COMPUTADOR"
print "MAGO - COMPUTADOR vs HUMANO"
while True:
    opcao = input ("Pretende executar a versao humano vs pc(1) ou pc vs humano(2)")


    if opcao==1:

        numero = input ( "Qual o numero para o computador adivinhar ? (de 1 até 100) :")

        num_max=100
        num_min=1
        tentativas=0

        resposta="n"

        while (resposta!= "s"):
            valor=random.randint (num_min,num_max)
            tentativas= tentativas + 1
            print valor
            resposta=raw_input ("Acertei no número? (S/N)")

            if resposta != "s":
                x=raw_input("Introduza se o valor e maior ou menor que o pretendido. (</>)")
                if (x=="<"):
                    num_max=valor-1
                elif (x==">"):
                    num_min=valor+1            
                else:
                    print "ERRO! Digite < ou >"

        if ((resposta=="s") or (resposta=="S")) and tentativas==0:
            print "BOA, À PRIMEIRA!!!"
        else:
            print "Finalmente! Precisou de", tentativas , "tentativas!"

        resultado=raw_input ("Pretende executar novamente? S-sim e N-nao")
        if (resultado=="n"):
            break;
    elif opcao==2:
               
        num_max=100
        num_min=1
        tentativas=1
        valor=random.randint (num_min,num_max)
        adivinha=input('Adivinha no numero que estou a pensar...=')
        while adivinha!=valor:
            
            tentativas= tentativas + 1
            print 'Hmm, tente outra vez..'
            
            
            if adivinha<valor:
                print 'Uma pista, o numero e maior que esse...\n'
                
            elif adivinha>valor:
                print 'Uma pista, o numero e menor que esse...\n' 
            
            adivinha=input('Adivinha no numero que estou a pensar...=')


        if adivinha==valor and tentativas==0:
            print "BOA, À PRIMEIRA!!!"
            if (resultado=="n"):
                break;
        else:
            print "Finalmente! Precisou de", tentativas , "tentativas!"
            

    else:
        print "ERRO!Digite 1 para a versão humano vs pc ou  2 pc vs humano"

        resultado=raw_input ("Pretende executar novamente? S-sim e N-nao")
        if (resultado=="n"):
            break;

Agora gostaria de o personalizar ou com niveis ou com scores! Alguem me pode ajudar?

Share this post


Link to post
Share on other sites
AlexPnt

Hmm, uma sugestão:

Para o score podias estabelecer uma relação entre o número de tentativas gastas e um conjunto de pontos, por exemplo:

1 tentativa-100 pontos, 2-5 tentativas-50 pontos, etc (para isto um conjunto de decisoes resolve problema)

Claro que depois podias criar uma função que incorporasse todo o código feito, e outra complementar que corria constantemente a função anterior e de acordo com o progresso da pontuação(score) ia incrementando níveis( por exemplo, quando a pontuação fosse 150 passava para o nível2, quando fosse maior 300 passava para o nivel 3, quando fosse 500 para o nivel 4, etc....)

E se quisesses criar níveis de dificuldade, a única diferença seria que o aumento dos níveis seria mais lento(por exemplo, em vez de passar para o nivel 2 em 150 passava só em 300,etc,...)

E prontos aqui está uma ideia, .... :)

Boa sorte :(


Programming is an art form that fights back.

Share this post


Link to post
Share on other sites
luislima

aí está uma grande ideia! mas como disse sou muito noob ainda no python! nao faço a minima ideia como fazer isso! La vou eu "googlar" pra ver se la vou. Entretanto se alguem me poder ajudar nisso e mudar a interface grafica deste programita agradeço imenso! 😳

Obrigado!

Share this post


Link to post
Share on other sites
luislima

Boas ...

andei para aqui a inventar e fiz uma janela inicial




from Tkinter import *
class Janela:
    def __init__(self,toplevel):
        self.frame=Frame(toplevel)
        self.frame.pack()
        self.frame2=Frame(toplevel)
        self.frame2.pack()
        self.titulo=Label(self.frame,text='Bem Vindo\n MAGO',
        font=('Verdana','13','bold'))
        self.titulo.pack()
        self.msg=Label(self.frame,width=40,height=6,
        text = 'Escolha a versão que pretende executar')
        self.msg.focus_force()
        self.msg.pack()
        # Definindo o botão 1
        self.b01=Button(self.frame2,text='MAGO - HUMANO vs COMPUTADOR')
        self.b01['padx'],self.b01['pady'] = 10, 5
        self.b01['bg']='deepskyblue'
        self.b01.bind("<Return>",self.keypress01)
        self.b01.bind("<Any-Button>",self.button01)
        self.b01.bind("<FocusIn>",self.fin01)
        self.b01.bind("<FocusOut>",self.fout01)
        self.b01['relief']=RIDGE
        self.b01.pack(side=LEFT)
        # Definindo o botão 2
        self.b02=Button(self.frame2,text='MAGO - COMPUTADOR vs HUMANO ')
        self.b02['padx'],self.b02['pady'] = 10, 5
        self.b02['bg']='deepskyblue'
        self.b02.bind("<Return>",self.keypress02)
        self.b02.bind("<Any-Button>",self.button02)
        self.b02.bind("<FocusIn>",self.fin02)
        self.b02.bind("<FocusOut>",self.fout02)
        self.b02['relief']=RIDGE
        self.b02.pack(side=LEFT)
        # Definindo o botão 3
        self.b03=Button(self.frame2,text='SAIR')
        self.b03['padx'],self.b03['pady'] = 10, 5
        self.b03['bg']='deepskyblue'
        self.b03.bind("<Return>",self.keypress03)
        self.b03.bind("<Any-Button>",self.button03)
        self.b03.bind("<FocusIn>",self.fin03)
        self.b03.bind("<FocusOut>",self.fout03)
        self.b03['relief']=RIDGE
        self.b03.pack(side=LEFT)
    def keypress01(self,event): self.msg['text']='ENTER sobre o Botão 1'
    def keypress02(self,event): self.msg['text']='ENTER sobre o Botão 2'
    def keypress03(self,event): self.msg['text']='ENTER sobre o Botão 3'
    
    def button01(self,event): self.msg['text']='MAGO - HUMANO vs COMPUTADOR'
    def button02(self,event): self.msg['text']='MAGO - COMPUTADOR vs HUMANO'
    def button03(self,event): self.msg['text']='Sair'

    def fin01(self,event): self.b01['relief']=FLAT
    def fout01(self,event): self.b01['relief']=RIDGE
    def fin02(self,event): self.b02['relief']=FLAT
    def fout02(self,event): self.b02['relief']=RIDGE
    def fin03(self,event): self.b03['relief']=FLAT
    def fout03(self,event): self.b03['relief']=RIDGE
raiz=Tk()
Janela(raiz)
raiz.mainloop()

e agora queria colocar o meu codigo do programa a executar dentro dessa janela e com o mesmo aspecto




# MAGO , HUMANO vs COMPUTADOR
# MAGO , COMPUTADOR VS HUMANO





import random

        
print "Bem-Vindo"
print "MAGO - HUMANO vs COMPUTADOR"
print "MAGO - COMPUTADOR vs HUMANO"
while True:
    opcao = input ("Pretende executar a versao HUMANO vs PC(1) ou PC vs HUMANO(2)")


    if opcao==1:

        numero = input ( "Qual o numero para o computador adivinhar ? (de 1 até 100) :")

        num_max=100
        num_min=1
        tentativas=0

        resposta="n"

        while (resposta!= "s"):
            valor=random.randint (num_min,num_max)
            tentativas= tentativas + 1
            print valor
            resposta=raw_input ("Acertei no número? (S/N)")

            if resposta != "s":
                x=raw_input("Introduza se o valor e maior ou menor que o pretendido. (</>)")
                if (x=="<"):
                    num_max=valor-1
                elif (x==">"):
                    num_min=valor+1
                else:
                    print "ERRO! Digite < ou >"

        if ((resposta=="s") or (resposta=="S")) and tentativas==0:
            print "BOA, À PRIMEIRA!!!"
        else:
            print "Finalmente! Precisou de", tentativas , "tentativas!"

        resultado=raw_input ("Pretende executar novamente? S-sim e N-nao")
        if (resultado=="n"):
            break;
        
    elif opcao==2:

        num_max=100
        num_min=1
        tentativas=1
        valor=random.randint (num_min,num_max)
        adivinha=input('Adivinha no numero que estou a pensar...=')
        while adivinha!=valor:

            tentativas= tentativas + 1
            print 'Hmm, tente outra vez..'


            if adivinha<valor:
                print 'Uma pista, o numero e maior que esse...\n'

            elif adivinha>valor:
                print 'Uma pista, o numero e menor que esse...\n'

            adivinha=input('Adivinha no numero que estou a pensar...=')


        if adivinha==valor and tentativas==0:
            print "BOA, À PRIMEIRA!!!"
            if (resultado=="n"):
                break;
        else:
            print "Finalmente! Precisou de", tentativas , "tentativas!"
            
        resultado=raw_input ("Pretende executar novamente? S-sim e N-nao")
        if (resultado=="n"):
            break;


    else:
        print "ERRO!Digite 1 para a versão HUMANO vs PC ou  2 PC vs HUMANO"

alguem me pode dar uma ajudinha? :)

Share this post


Link to post
Share on other sites
AlexPnt

Boas aqui está um codigo, mais simples do que aquele que colocaste, dando para perceber melhor. Basicamente , está será a estrutura principal do programa, ou seja tens uma função que cria a interface, e depois para cada um dos botões, existe uma função complementar que executa o pedido.

Por exemplo,

import random
from Tkinter import *
import tkFileDialog, tkSimpleDialog,Tkinter

def exemplo():
    cor=tkSimpleDialog.askstring('Ok','Um exemplo') 
    
class janela():
    janel=Tk()#criação do objecto do tipo Tkinter
    frame=Frame().pack()
    titulo=Label(frame,text='Bem Vindo\n MAGO',font=('Verdana','13','bold'))
    titulo.pack()
    msg=Label(frame,width=40,height=6,text = 'Escolha a versao que pretende executar')
    msg.focus_force()
    msg.pack()
    
            
    
    botao1=Button(frame, text='MAGO - HUMANO vs COMPUTADOR',command=exemplo).pack(side=LEFT)
    botao2=Button(frame, text='MAGO - COMPUTADOR vs HUMANO').pack(side=LEFT)
    botao3=Button(frame, text='SAIR').pack(side=LEFT)
        
    janel.mainloop()

janela()


Programming is an art form that fights back.

Share this post


Link to post
Share on other sites
luislima



import random
from Tkinter import *
import tkFileDialog, tkSimpleDialog,Tkinter

def exemplo():
    cor=tkSimpleDialog.askstring('Ok','Um exemplo') 
    

    
  

janela()

Sim , era mesmo isso que queria , mas com este exemplo aparece uma caixa de texto e nao é bem isso que queria. Quero que execute o meu codigo do programa. Ja andei aqui a marrar e nada :s

Alguem me consegue ajudar?

Share this post


Link to post
Share on other sites
luislima

def HvsCButtonPressed():
    num_max=100
    num_min=1   

    def menor():
        global tentativas
        num_max=varTentativa.set(tentativas)
        tentativas = randint(num_min,num_max)
        varTentativa.set(tentativas)
        

    def maior():
        global tentativas
        num_min=varTentativa.set(tentativas)
        tentativas = randint(num_min,num_max)
        varTentativa.set(tentativas)
        
        
        
    def okButtonPressed():
       
        #Botao menor  
        menorButton = Button(tkRodapeFrame, text="<", command=menor)
        menorButton.pack( side = LEFT)
        #Botao maior  
        maiorButton = Button(tkRodapeFrame, text=">", command=maior)
        maiorButton.pack( side = LEFT)
        global tentativas
        tentativas = randint(num_min,num_max)
        varTentativa.set(tentativas)

    #Label do meio com pergunta
    numeroLabel = Label(tkBottomFrame, text="Qual o numero para o computador adivinhar?")
    numeroLabel.pack( side = LEFT)
    #Caixa de texto
    entryLabel = Entry(tkBottomFrame, bd =5)
    entryLabel.pack(side = LEFT)
    #Botao ok  
    okButton = Button(tkBottomFrame, text="OK!", command=okButtonPressed)
    okButton.pack( side = LEFT)

tenho aqui já com ambiente gráfico (Tkinter) a versão Humano vs PC . A minha duvida é a seguinte.

aparece a caixa de testo em que eu coloco o numero para o computador adivinhar seguido de um botão de OK.

quando carrego nele o pc gera um numero aleatório entre o num_max e o num_min.

seguido aparece um botão de < e > , e aí surge a minha duvida. qdo carregar nos botões quero actualizar as variáveis num_max e num_min para "balizar" o random do Pc. Alguém me consegue ajudar?

Share this post


Link to post
Share on other sites
luislima

AH e deixo aqui o meu programa todo para uma mais "facil" leitura, porque acho que com o excerto que coloquei em cima não vai ser possível perceber o programa todo


from Tkinter import *
from random import *

tentativas=0


def sairButtonPressed():
    exit()
    
def CvsHButtonPressed():
    num_max=100
    num_min=1
    valor=randint(num_min,num_max)

    def attemptButtonPressed():
        global tentativas
        tentativas = tentativas +1

        if (valor>int(entryLabel.get())):
            varMiddle.set("O numero é maior")
            num_max = valor            
        elif (valor<int(entryLabel.get())):
            varMiddle.set("O numero é menor")
            num_min = valor            
        else:
            varMiddle.set("Parabéns, acertou! Precisou de "+ str(tentativas)+" tentativas")

    
    #Label do meio com pergunta
    numeroLabel = Label(tkBottomFrame, text="Numero a adivinhar?")
    numeroLabel.pack( side = LEFT)
    #Caixa de texto
    entryLabel = Entry(tkBottomFrame, bd =5)
    entryLabel.pack(side = LEFT)   
    #Botao tentativa de numero 
    numberButton = Button(tkBottomFrame, text="Tentar!", command=attemptButtonPressed)
    numberButton.pack( side = LEFT)

def HvsCButtonPressed():
    num_max=100
    num_min=1   

    def menor():
        global tentativas
        num_max=varTentativa.set(tentativas)
        tentativas = randint(num_min,num_max)
        varTentativa.set(tentativas)
        

    def maior():
        global tentativas
        num_min=varTentativa.set(tentativas)
        tentativas = randint(num_min,num_max)
        varTentativa.set(tentativas)
        
        
        
    def okButtonPressed():
       
        #Botao menor  
        menorButton = Button(tkRodapeFrame, text="<", command=menor)
        menorButton.pack( side = LEFT)
        #Botao maior  
        maiorButton = Button(tkRodapeFrame, text=">", command=maior)
        maiorButton.pack( side = LEFT)
        global tentativas
        tentativas = randint(num_min,num_max)
        varTentativa.set(tentativas)

    #Label do meio com pergunta
    numeroLabel = Label(tkBottomFrame, text="Qual o numero para o computador adivinhar?")
    numeroLabel.pack( side = LEFT)
    #Caixa de texto
    entryLabel = Entry(tkBottomFrame, bd =5)
    entryLabel.pack(side = LEFT)
    #Botao ok  
    okButton = Button(tkBottomFrame, text="OK!", command=okButtonPressed)
    okButton.pack( side = LEFT)

root = Tk()

#Frame de cima
tkTopFrame = Frame(root)
tkTopFrame.pack()

#Frame do meio
tkMiddleFrame = Frame(root)
tkMiddleFrame.pack()

#Frame de baixo
tkBottomFrame = Frame(root)
tkBottomFrame.pack()

#Frame de "Rodape"
tkRodapeFrame = Frame(root)
tkRodapeFrame.pack()

#Label da frame de cima
varTop = StringVar()
topFrameLabel = Label( tkTopFrame, textvariable=varTop)
topFrameLabel.pack()
varTop.set("Bem-Vindo! \n Mago")

#Label da frame do meio
varMiddle = StringVar()
middleFrameLabel = Label( tkMiddleFrame, textvariable=varMiddle)
middleFrameLabel.pack()
varMiddle.set("Aguardo tentativa..")

#Label do rodape
varTentativa = IntVar()
varTentativa.set("")
rodapeLabel = Label(tkRodapeFrame, textvariable=varTentativa)
rodapeLabel.pack( side = LEFT)
        
#Label do meio com pergunta
nameLabel = Label(tkTopFrame, text="Que versão pretende executar?")
nameLabel.pack( side = LEFT)

#Botao sair
sairButton = Button(tkTopFrame, text="Sair!", command=sairButtonPressed)
sairButton.pack( side = RIGHT)

#Botao Utilizador vs Computador
nameButton = Button(tkTopFrame, text="Utilizador vs Computador", command=HvsCButtonPressed)
nameButton.pack( side = RIGHT)

#Botao Computador vs Utilizador
nameButton = Button(tkTopFrame, text="Computador vs Utilizador", command=CvsHButtonPressed)
nameButton.pack( side = RIGHT)

root.mainloop()




Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.