刽子手变成两人游戏Tkinter Python

2024-10-01 07:46:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在使用tkinter开发python中的一个刽子手游戏。我的代码正在运行,但我想做得更好。我的问题是如何将现有的单词列表更改为来自其他播放器的输入?我想我必须为实际游戏创建一个播放按钮,如何开始? 谢谢你的时间

from tkinter import messagebox
from tkinter import *
import random



#Setting up the window



window = Tk()
window.title("Välkommen till Rädda Gubbe")
window.geometry("350x250+525+200")
lblspel = Label(window, text="Rädda Gubbe", font=('Arial', '16', 'bold', 'italic'), justify='center', fg='Red'
                     ).pack(side=TOP, anchor=CENTER,pady=7)

Namnlbl = Label(window, text="Skriv in det hemliga ordet: ", font=('Arial', '11', 'bold', 'italic'), justify='center'
                     ).pack(side=TOP,pady=2)
e = Entry(window, font=('Arial', 12), justify='center')
e.pack(side=TOP)
startaspelet = Button(window, text="Starta Spelet", relief="solid", font=("arial", 12, "bold"), command=lambda: spelet).place(x=30, y=70)


def spelet():
  window2 = Tk()
  window2.title("Rädda Gubbe")
  window2.resizable(0, 0)
  #Words
  word_list = ['FLAMBOYANT','AMBIGUOUS','AMBIVALENT','CHARISMA']

  def newGame():
    global the_word_withSpaces
    global numberOfGuesses
    numberOfGuesses=0

    the_word=random.choice(word_list)
    the_word_withSpaces=" ".join(the_word)
    lblWord.set(" ".join("_"*len(the_word)))

  def guess(letter):
    global numberOfGuesses
    if numberOfGuesses<11:
      txt=list(the_word_withSpaces)
      guessed=list(lblWord.get())
      if the_word_withSpaces.count(letter)>0:
        for c in range(len(txt)):
          if txt[c]==letter:
            guessed[c]=letter
          lblWord.set("".join(guessed))
          if lblWord.get()==the_word_withSpaces:
            messagebox.showinfo("Hangman","You guessed it!")
            newGame()

      else:
          numberOfGuesses+=1
          if numberOfGuesses==11:
            messagebox.showwarning("Hangman","Game over")


  lblWord=StringVar()
  Label(window, textvariable=lblWord, font=("Consolas 24 bold")).grid(row=0, column=3, columnspan=6, padx=10)

  btn1 = Button(window2, text="A",bg="skyBlue", fg="Black",width=3,height=1,font=('Helvetica','20'), command= lambda : guess("A"))
  btn1.grid(column=1, row=1)
  btn2 = Button(window2, text="B",bg="skyBlue", fg="Black",width=3,height=1,font=('Helvetica','20'), command= lambda : guess("B"))
  btn2.grid(column=2, row=1)
  btn3 = Button(window2, text="C",bg="skyBlue", fg="Black",width=3,height=1,font=('Helvetica','20'), command= lambda : guess("C"))
  btn3.grid(column=3, row=1)
  btn4 = Button(window2, text="D",bg="skyBlue", fg="Black",width=3,height=1,font=('Helvetica','20'), command= lambda : guess("D"))
  btn4.grid(column=4, row=1)
  btn5 = Button(window2, text="E",bg="skyBlue", fg="Black",width=3,height=1,font=('Helvetica','20'), command= lambda : guess("E"))
  btn5.grid(column=5, row=1)
  btn6 = Button(window2, text="F",bg="skyBlue", fg="Black",width=3,height=1,font=('Helvetica','20'), command= lambda : guess("F"))
  btn6.grid(column=6, row=1)
  btn7 = Button(window2, text="G",bg="skyBlue", fg="Black",width=3,height=1,font=('Helvetica','20'), command= lambda : guess("G"))
  btn7.grid(column=7, row=1)

  btn9 = Button(window2, text="H",bg="skyBlue", fg="Black",width=3,height=1,font=('Helvetica','20'), command= lambda : guess("H"))
  btn9.grid(column=1, row=2)
  btn10 = Button(window2, text="I",bg="skyBlue", fg="Black",width=3,height=1,font=('Helvetica','20'), command= lambda : guess("I"))
  btn10.grid(column=2, row=2)
  btn11 = Button(window2, text="J",bg="skyBlue", fg="Black",width=3,height=1,font=('Helvetica','20'), command= lambda : guess("J"))
  btn11.grid(column=3, row=2)
  btn12 = Button(window2, text="K",bg="skyBlue", fg="Black",width=3,height=1,font=('Helvetica','20'), command= lambda : guess("K"))
  btn12.grid(column=4, row=2)
  btn13 = Button(window2, text="L",bg="skyBlue", fg="Black",width=3,height=1,font=('Helvetica','20'), command= lambda : guess("L"))
  btn13.grid(column=5, row=2)
  btn14 = Button(window2, text="M",bg="skyBlue", fg="Black",width=3,height=1,font=('Helvetica','20'), command= lambda : guess("M"))
  btn14.grid(column=6, row=2)
  btn15 = Button(window2, text="N",bg="skyBlue", fg="Black",width=3,height=1,font=('Helvetica','20'), command= lambda : guess("N"))
  btn15.grid(column=7, row=2)


  btn16 = Button(window2, text="O",bg="skyBlue", fg="Black",width=3,height=1,font=('Helvetica','20'), command= lambda : guess("O"))
  btn16.grid(column=1, row=3)
  btn17 = Button(window2, text="P",bg="skyBlue", fg="Black",width=3,height=1,font=('Helvetica','20'), command= lambda : guess("P"))
  btn17.grid(column=2, row=3)
  btn18 = Button(window2, text="Q",bg="skyBlue", fg="Black",width=3,height=1,font=('Helvetica','20'), command= lambda : guess("Q"))
  btn18.grid(column=3, row=3)
  btn19 = Button(window2, text="R",bg="skyBlue", fg="Black",width=3,height=1,font=('Helvetica','20'), command= lambda : guess("R"))
  btn19.grid(column=4, row=3)
  btn20 = Button(window2, text="S",bg="skyBlue", fg="Black",width=3,height=1,font=('Helvetica','20'), command= lambda : guess("S"))
  btn20.grid(column=5, row=3)
  btn21 = Button(window2, text="T",bg="skyBlue", fg="Black",width=3,height=1,font=('Helvetica','20'), command= lambda : guess("T"))
  btn21.grid(column=6, row=3)
  btn22 = Button(window2, text="U",bg="skyBlue", fg="Black",width=3,height=1,font=('Helvetica','20'), command= lambda : guess("U"))
  btn22.grid(column=7, row=3)


  btn23 = Button(window2, text="V",bg="skyBlue", fg="Black",width=3,height=1,font=('Helvetica','20'), command= lambda : guess("V"))
  btn23.grid(column=1, row=4)
  btn24 = Button(window2, text="W",bg="skyBlue", fg="Black",width=3,height=1,font=('Helvetica','20'), command= lambda : guess("W"))
  btn24.grid(column=2, row=4)
  btn25 = Button(window2, text="X",bg="skyBlue", fg="Black",width=3,height=1,font=('Helvetica','20'), command= lambda : guess("X"))
  btn25.grid(column=3, row=4)
  btn26 = Button(window2, text="Y",bg="skyBlue", fg="Black",width=3,height=1,font=('Helvetica','20'), command= lambda : guess("Z"))
  btn26.grid(column=4, row=4)
  btn27 = Button(window2, text="Å",bg="skyBlue", fg="Black",width=3,height=1,font=('Helvetica','20'), command= lambda : guess("Å"))
  btn27.grid(column=5, row=4)
  btn28 = Button(window2, text="Ä",bg="skyBlue", fg="Black",width=3,height=1,font=('Helvetica','20'), command= lambda : guess("Ä"))
  btn28.grid(column=6, row=4)
  btn29 = Button(window2, text="Ö",bg="skyBlue", fg="Black",width=3,height=1,font=('Helvetica','20'), command= lambda : guess("Ö"))
  btn29.grid(column=7, row=4)

  Button(window, text="New\nGame", command=lambda:newGame(), font=("Helvetica 10 bold")).grid(row=3, column=8, sticky="NSWE")

  newGame()

window.mainloop()


Tags: lambdatextcolumnbuttoncommandgridrowbg
2条回答

最简单的方法是创建文件words.txt,第二个玩家可以在其中输入他的单词:

文件words.txt

Strength
Perception
Endurance
Charisma
Intelligence
Agility
Luck

代码:

from tkinter import messagebox
from tkinter import *
import random
from string import ascii_uppercase

# Setting up the window
window = Tk()
window.title("Hangman")
window.resizable(0, 0)


def newGame():
    global the_word_withSpaces
    global numberOfGuesses
    numberOfGuesses = 0

    with open('words.txt', 'r', encoding='utf-8') as f:
        words = [w.strip().upper() for w in f.readlines()]

    the_word = random.choice(words)
    the_word_withSpaces = " ".join(the_word)
    lblWord.set(" ".join("_" * len(the_word)))


def guess(letter):
    global numberOfGuesses
    if numberOfGuesses < 11:
        txt = list(the_word_withSpaces)
        guessed = list(lblWord.get())
        if the_word_withSpaces.count(letter) > 0:
            for c in range(len(txt)):
                if txt[c] == letter:
                    guessed[c] = letter
                lblWord.set("".join(guessed))
                if lblWord.get() == the_word_withSpaces:
                    messagebox.showinfo("Hangman", "You guessed it!")
                    newGame()

        else:
            numberOfGuesses += 1
            if numberOfGuesses == 11:
                messagebox.showwarning("Hangman", "Game over")


lblWord = StringVar()
Label(window, textvariable=lblWord, font=("Consolas 24 bold")).grid(row=0, column=3, columnspan=6, padx=10)

btn1 = Button(window, text="A", bg="skyBlue", fg="Black", width=3, height=1, font=('Helvetica', '20'),
              command=lambda: guess("A"))
btn1.grid(column=1, row=1)
btn2 = Button(window, text="B", bg="skyBlue", fg="Black", width=3, height=1, font=('Helvetica', '20'),
              command=lambda: guess("B"))
btn2.grid(column=2, row=1)
btn3 = Button(window, text="C", bg="skyBlue", fg="Black", width=3, height=1, font=('Helvetica', '20'),
              command=lambda: guess("C"))
btn3.grid(column=3, row=1)
btn4 = Button(window, text="D", bg="skyBlue", fg="Black", width=3, height=1, font=('Helvetica', '20'),
              command=lambda: guess("D"))
btn4.grid(column=4, row=1)
btn5 = Button(window, text="E", bg="skyBlue", fg="Black", width=3, height=1, font=('Helvetica', '20'),
              command=lambda: guess("E"))
btn5.grid(column=5, row=1)
btn6 = Button(window, text="F", bg="skyBlue", fg="Black", width=3, height=1, font=('Helvetica', '20'),
              command=lambda: guess("F"))
btn6.grid(column=6, row=1)
btn7 = Button(window, text="G", bg="skyBlue", fg="Black", width=3, height=1, font=('Helvetica', '20'),
              command=lambda: guess("G"))
btn7.grid(column=7, row=1)

btn9 = Button(window, text="H", bg="skyBlue", fg="Black", width=3, height=1, font=('Helvetica', '20'),
              command=lambda: guess("H"))
btn9.grid(column=1, row=2)
btn10 = Button(window, text="I", bg="skyBlue", fg="Black", width=3, height=1, font=('Helvetica', '20'),
               command=lambda: guess("I"))
btn10.grid(column=2, row=2)
btn11 = Button(window, text="J", bg="skyBlue", fg="Black", width=3, height=1, font=('Helvetica', '20'),
               command=lambda: guess("J"))
btn11.grid(column=3, row=2)
btn12 = Button(window, text="K", bg="skyBlue", fg="Black", width=3, height=1, font=('Helvetica', '20'),
               command=lambda: guess("K"))
btn12.grid(column=4, row=2)
btn13 = Button(window, text="L", bg="skyBlue", fg="Black", width=3, height=1, font=('Helvetica', '20'),
               command=lambda: guess("L"))
btn13.grid(column=5, row=2)
btn14 = Button(window, text="M", bg="skyBlue", fg="Black", width=3, height=1, font=('Helvetica', '20'),
               command=lambda: guess("M"))
btn14.grid(column=6, row=2)
btn15 = Button(window, text="N", bg="skyBlue", fg="Black", width=3, height=1, font=('Helvetica', '20'),
               command=lambda: guess("N"))
btn15.grid(column=7, row=2)

btn16 = Button(window, text="O", bg="skyBlue", fg="Black", width=3, height=1, font=('Helvetica', '20'),
               command=lambda: guess("O"))
btn16.grid(column=1, row=3)
btn17 = Button(window, text="P", bg="skyBlue", fg="Black", width=3, height=1, font=('Helvetica', '20'),
               command=lambda: guess("P"))
btn17.grid(column=2, row=3)
btn18 = Button(window, text="Q", bg="skyBlue", fg="Black", width=3, height=1, font=('Helvetica', '20'),
               command=lambda: guess("Q"))
btn18.grid(column=3, row=3)
btn19 = Button(window, text="R", bg="skyBlue", fg="Black", width=3, height=1, font=('Helvetica', '20'),
               command=lambda: guess("R"))
btn19.grid(column=4, row=3)
btn20 = Button(window, text="S", bg="skyBlue", fg="Black", width=3, height=1, font=('Helvetica', '20'),
               command=lambda: guess("S"))
btn20.grid(column=5, row=3)
btn21 = Button(window, text="T", bg="skyBlue", fg="Black", width=3, height=1, font=('Helvetica', '20'),
               command=lambda: guess("T"))
btn21.grid(column=6, row=3)
btn22 = Button(window, text="U", bg="skyBlue", fg="Black", width=3, height=1, font=('Helvetica', '20'),
               command=lambda: guess("U"))
btn22.grid(column=7, row=3)

btn23 = Button(window, text="V", bg="skyBlue", fg="Black", width=3, height=1, font=('Helvetica', '20'),
               command=lambda: guess("V"))
btn23.grid(column=1, row=4)
btn24 = Button(window, text="W", bg="skyBlue", fg="Black", width=3, height=1, font=('Helvetica', '20'),
               command=lambda: guess("W"))
btn24.grid(column=2, row=4)
btn25 = Button(window, text="X", bg="skyBlue", fg="Black", width=3, height=1, font=('Helvetica', '20'),
               command=lambda: guess("X"))
btn25.grid(column=3, row=4)
btn26 = Button(window, text="Y", bg="skyBlue", fg="Black", width=3, height=1, font=('Helvetica', '20'),
               command=lambda: guess("Z"))
btn26.grid(column=4, row=4)
btn27 = Button(window, text="Å", bg="skyBlue", fg="Black", width=3, height=1, font=('Helvetica', '20'),
               command=lambda: guess("Å"))
btn27.grid(column=5, row=4)
btn28 = Button(window, text="Ä", bg="skyBlue", fg="Black", width=3, height=1, font=('Helvetica', '20'),
               command=lambda: guess("Ä"))
btn28.grid(column=6, row=4)
btn29 = Button(window, text="Ö", bg="skyBlue", fg="Black", width=3, height=1, font=('Helvetica', '20'),
               command=lambda: guess("Ö"))
btn29.grid(column=7, row=4)

Button(window, text="New\nGame", command=lambda: newGame(), font=("Helvetica 10 bold")).grid(row=3, column=8,
                                                                                             sticky="NSWE")

newGame()
window.mainloop()

输出:

enter image description here

我已经把基本思想编码好了。添加两个帧,一个是agame_frame,另一个是home_frame。现在只需使用.pack.pack_forget在帧之间切换

下面是示例代码(根据需要修改此代码)

from tkinter import messagebox
from tkinter import *
from tkinter import ttk
import random
    

def assignWord(word):
    global guess_word, the_word_withSpaces
    guess_word = word.upper()

    home_frame.pack_forget()
    game_frame.pack()

    print(guess_word)
    guess_var.set(" ".join("_"*len(guess_word)))
    the_word_withSpaces = " ".join(word.upper())
    
def createWord():
    global currentPlayer
    
    currentPlayer = playerChoose.get()
    
    top = Toplevel(window)
    ent = Entry(top, show='*')
    ent.pack()

    Button(top, text='Submit', command= lambda : [assignWord(ent.get()), top.destroy()]).pack()

def newGame():
    global numberOfGuesses
    
    numberOfGuesses = 0
    game_frame.pack_forget()
    home_frame.pack()
    

def guess(btn):
  global numberOfGuesses

  letter = btn['text']
  
  if numberOfGuesses<11:
    txt=list(the_word_withSpaces)
    guessed=list(guess_var.get())

    if the_word_withSpaces.count(letter)>0:
        
      for c in range(len(txt)):
        if txt[c]==letter:
            
          guessed[c]=letter

        guess_var.set("".join(guessed))

        if guess_var.get()==the_word_withSpaces:
          messagebox.showinfo("Hangman",f"{currentPlayer} guessed it!")
          newGame()
          return

    else:
        numberOfGuesses+=1
        if numberOfGuesses==11:
          messagebox.showwarning("Hangman","Game over")
          newGame()

window = Tk()
window.title("Välkommen till Rädda Gubbe")
window.geometry("350x250+525+200")

numberOfGuesses = 0
players = ['Player1', 'Player2']
guess_word = "HELLO"
the_word_withSpaces = ''
currentPlayer = players[0]
alpha = [chr(x) for x in range(65,89)]

home_frame = Frame(window)
home_frame.pack()

Label(home_frame, text="Choose the player to enter a word: ").pack()


playerChoose = ttk.Combobox(home_frame, values=players, state='readonly')
playerChoose.set(players[0])
playerChoose.pack()

Button(home_frame, text='Enter word', command=createWord).pack()

game_frame = Frame(window)

guess_var = StringVar()
Label(game_frame, textvariable = guess_var).pack(side=TOP, anchor=CENTER,pady=7)

btn_frame = Frame(game_frame)
btn_frame.pack()

row, column = 0, 0
for x in alpha:

    if column%7 == 0:
        row += 1
        column = 0
        
    btn = Button(btn_frame, text=x)
    btn.config(command = lambda b=btn: guess(b))
    btn.grid(row=row, column=column)
    column += 1


window.mainloop()

相关问题 更多 >