在取出硬币后更换播放器

时间:2018-01-08 11:33:34

标签: python tkinter

我正在编写一个游戏,其中两个玩家都需要选择一个或两个硬币,直到所有硬币都消失,在挑选后更换玩家。游戏开始时给出游戏规则,并提供播放1vs1或1vscomputer的选项(此选项尚未完成)。选择选项1(1vs1)后,游戏开始随机选择玩家1或2作为初学者。通过按钮,你可以选择一个或两个硬币从总数中减去(到目前为止一直很好)。现在,在您选择了一两个硬币后,玩家应该改变......只有这不会发生。

import tkinter
import random
from time import sleep

def toonStartscherm():
    keuzescherm.pack_forget()
    spelerscherm.pack_forget()
    startscherm.pack()

def toonKeuzescherm():
    keuzescherm.pack()
    startscherm.pack_forget()
    spelerscherm.pack_forget()

def spelOptie1():
    keuzescherm.pack_forget()
    startscherm.pack_forget()
    spelerscherm.pack()

def randomSpeler():
    global beginnende_speler
    if beginnende_speler == '1':
        beginnende_speler = '2'
    else:
        beginnende_speler = '1'
    return beginnende_speler

def Munt1():
    global aantal_munten
    eenMunt = 1
    aantal_munten -= eenMunt
    munten_over.configure(text='Er zijn nog ' + (str(aantal_munten)) + ' aantal munten over, hoeveel pak je er?')
    if aantal_munten == 0:
        beurt_speler.configure(text='Hoera!')
        munten_over.configure(text='Speler' + beginnende_speler + (' heeft gewonnen'))

def Munt2():
    global aantal_munten
    tweeMunt = 2
    aantal_munten -= tweeMunt
    munten_over.configure(text='Er zijn nog ' + (str(aantal_munten)) + ' aantal munten over, hoeveel pak je er?')
    if aantal_munten == 0:
        beurt_speler.configure(text='Hoera!')
        munten_over.configure(text='Speler' + beginnende_speler + (' heeft gewonnen'))

nim_spel = tkinter.Tk()

global aantal_munten
aantal_munten = 7

global beginnende_speler
beginnende_speler = random.choice(['1', '2'])

startscherm = tkinter.Frame(master=nim_spel)
startscherm.pack()
start_welkom = tkinter.Label(startscherm, text= 'Welkom bij het NIM spel! \nHieronder volgende de spelregels.')
start_welkom.pack()
start_uitleg = tkinter.Label(startscherm, text= 'Het spel NIM start met 7 munten, elke speler mag één of twee munten pakken. \n De speler die de laatste munt pakt verliest!')
start_uitleg.pack() # zet uitleg automatisch in venster
doorgaan_knop = tkinter.Button(startscherm, text = 'Ik snap de regels!', fg = 'green', command = toonKeuzescherm) # maakt knop en laat stoppen
doorgaan_knop.pack(side = 'bottom')

keuzescherm = tkinter.Frame(master=nim_spel)
keuzescherm.pack()
keuze_opties = tkinter.Label(keuzescherm, text='Het NIM spel kan op twee manieren gespeeld worden. \n Optie 1: Tegen elkaar \n Optie 2: Tegen de computer')
keuze_opties.pack() # zet opties automatisch in venster
keuze_vraag = tkinter.Label(keuzescherm, text='Voor welke optie kies je?')
keuze_vraag.pack()
optie_1 = tkinter.Button(keuzescherm, text = 'Optie 1', fg = 'green', command = spelOptie1) # maakt knop en laat stoppen
optie_1.pack(side = 'left')
optie_2 = tkinter.Button(keuzescherm, text = 'Optie 2', fg = 'red', command = keuzescherm.quit) # maakt knop en laat stoppen
optie_2.pack(side = 'right')

spelerscherm = tkinter.Frame(master=nim_spel)
spelerscherm.pack()
beurt_speler = tkinter.Label(spelerscherm, text='Speler ' + (beginnende_speler) + ' is aan de beurt!')
beurt_speler.pack()
munten_over = tkinter.Label(spelerscherm, text='Er zijn nog ' + (str(aantal_munten)) + ' aantal munten over, hoeveel pak je er?')
munten_over.pack()
pak_1_munt = tkinter.Button(spelerscherm, text = '1 munt', fg = 'blue', command = Munt1)
pak_1_munt.pack(side = 'left')
pak_2_munt = tkinter.Button(spelerscherm, text = '2 munten', fg = 'blue', command = Munt2)
pak_2_munt.pack(side = 'right')

toonStartscherm()
nim_spel.mainloop()

2 个答案:

答案 0 :(得分:1)

我不熟悉tkinter以及它的循环是如何工作的,但我发现你有一个函数randomSpeler(),它在代码中从未调用过。在Munt1()和Munt2()中,你有一个if语句检查硬币的数量是否为0,但是如果有超过0个硬币则不是else语句。也许您可以添加该条件并调用randomSpeler()来从那里更改播放器?

答案 1 :(得分:0)

正如@higherer已经说过你必须致电randomSpeler()来改变玩家。

您还必须更改beurt_speler中的文字以显示正确的播放器

请参阅本部分代码中的三条评论

def randomSpeler():
    global beginnende_speler

    if beginnende_speler == '1':
        beginnende_speler = '2'
    else:
        beginnende_speler = '1'

    # display correct player
    beurt_speler.config(text='Speler ' + beginnende_speler + ' is aan de beurt!')

    return beginnende_speler

def Munt1():
    global aantal_munten

    aantal_munten -= 1
    munten_over.configure(text='Er zijn nog ' + str(aantal_munten) + ' aantal munten over, hoeveel pak je er?')
    if aantal_munten == 0:
        beurt_speler.configure(text='Hoera!')
        munten_over.configure(text='Speler' + beginnende_speler + ' heeft gewonnen')
    else:
        # change player
        randomSpeler()

def Munt2():
    global aantal_munten

    aantal_munten -= 2
    munten_over.configure(text='Er zijn nog ' + str(aantal_munten) + ' aantal munten over, hoeveel pak je er?')
    if aantal_munten == 0:
        beurt_speler.configure(text='Hoera!')
        munten_over.configure(text='Speler' + beginnende_speler + ' heeft gewonnen')
    else:
        # change player
        randomSpeler()