Python和tkinter單詞游戲
數據字典文本文件,文件名為Dictionary.txt,保存編碼格式為:utf-8。文本內容:每行一個 單詞 ,單詞和解釋用空格分隔,如
a art.一(個);每一(個)
ability n.能力;能耐,本領
able a.有能力的;出色的
baby n.嬰兒;孩子氣的人
back ad.在后;回原處;回
background n.背景,后景,經歷
cable n.纜,索;電纜;電報
cafe n.咖啡館;小餐廳
good a.好的;有本事的
游戲規則:
每次隨機從文本中選取一個英語單詞,在界面上從左到右移動,隨機選出三個單詞的解釋,和英語單詞正確解釋,隨機放到四個按鈕中,這四個按鈕放到界面下方。
用戶單擊帶有解釋的按鈕,界面上英語單詞消失,再隨機從文本中選取一個新英語單詞,進入下一個猜單詞過程;若英語單詞移動出界面,用戶未能單擊有正確解釋的按鈕,表示失敗,也將隨機從文本中選取一個新英語單詞,進入下一個猜單詞過程。
有失敗和成功計數。
使用Python和tkinter來實現這個單詞游戲, 運行界面:
使用面向過程方式實現,游戲源碼如下:
import tkinter as tk
import random# 全局變量
root = None
word_label = None
option_buttons = []
score_label = None
dictionary = {}
current_word = ""
current_definition = ""
options = []
success_count = 0
fail_count = 0
word_x = -100def load_dictionary(filename):global dictionarywith open(filename, 'r', encoding='utf-8') as file:for line in file:parts = line.strip().split(' ', 1)if len(parts) == 2:dictionary[parts[0]] = parts[1]def choose_new_word():global current_word, current_definition, options, word_xcurrent_word = random.choice(list(dictionary.keys()))current_definition = dictionary[current_word]options = [current_definition]while len(options) < 4:random_def = random.choice(list(dictionary.values()))if random_def not in options:options.append(random_def)random.shuffle(options)word_label.config(text=current_word)for i, button in enumerate(option_buttons):button.config(text=options[i])word_x = -100 # 重置單詞位置def move_word():global word_x, fail_countif word_x > 400:fail_count += 1update_score()choose_new_word()else:word_x += 5word_label.place(x=word_x, y=50)root.after(50, move_word)def check_answer(index):global success_count, fail_countif options[index] == current_definition:success_count += 1else:fail_count += 1update_score()choose_new_word()def update_score():score_label.config(text=f"成功: {success_count} 失敗: {fail_count}")def setup_gui():global root, word_label, option_buttons, score_labelroot = tk.Tk()root.title("單詞游戲")root.geometry("400x300")score_label = tk.Label(root, text="成功: 0 失敗: 0", font=("Arial", 12))score_label.pack(anchor='ne', padx=10, pady=10)word_label = tk.Label(root, text="", font=("Arial", 24))word_label.place(x=-100, y=50)button_frame = tk.Frame(root)button_frame.pack(side='bottom', pady=20)for i in range(4):button = tk.Button(button_frame, text="", font=("Arial", 10), width=20, height=1, command=lambda i=i: check_answer(i))button.grid(row=i//2, column=i%2, padx=5, pady=5)option_buttons.append(button)def main():load_dictionary("Dictionary.txt")setup_gui()choose_new_word()move_word()root.mainloop()if __name__ == "__main__":main()
使用這個程序之前,請確保你有一個名為"Dictionary.txt"的文件,格式如你所描述的那樣。將這個文件放在與Python腳本相同的目錄下。
使用面向對象方式實現,游戲源碼如下:
import tkinter as tk
import randomclass WordGame:def __init__(self, dictionary_file):# 初始化游戲窗口self.root = tk.Tk()self.root.title("單詞游戲")self.root.geometry("400x300")# 加載詞典self.dictionary = self.load_dictionary(dictionary_file)self.current_word = ""self.current_definition = ""self.options = []self.success_count = 0self.fail_count = 0self.word_x = -100# 設置游戲界面self.setup_gui()# 選擇新單詞并開始移動單詞self.choose_new_word()self.move_word()def load_dictionary(self, filename):# 從文件加載詞典并返回一個字典對象dictionary = {}with open(filename, 'r', encoding='utf-8') as file:for line in file:parts = line.strip().split(' ', 1)if len(parts) == 2:dictionary[parts[0]] = parts[1]return dictionarydef choose_new_word(self):# 選擇一個新的單詞和定義,并更新選項按鈕的文本self.current_word = random.choice(list(self.dictionary.keys()))self.current_definition = self.dictionary[self.current_word]self.options = [self.current_definition]while len(self.options) < 4:random_def = random.choice(list(self.dictionary.values()))if random_def not in self.options:self.options.append(random_def)random.shuffle(self.options)self.word_label.config(text=self.current_word)for i, button in enumerate(self.option_buttons):button.config(text=self.options[i])self.word_x = -100 # 重置單詞位置到初始值def move_word(self):# 控制單詞的移動,如果超出窗口范圍則增加失敗計數并選擇新單詞,否則更新單詞位置if self.word_x > 400:self.fail_count += 1self.update_score()self.choose_new_word()else:self.word_x += 5self.word_label.place(x=self.word_x, y=50)self.root.after(50, self.move_word)def check_answer(self, index):# 檢查用戶選擇的答案是否正確,并更新成功或失敗計數if self.options[index] == self.current_definition:self.success_count += 1else:self.fail_count += 1self.update_score()self.choose_new_word()def update_score(self):# 更新顯示的成功和失敗計數self.score_label.config(text=f"成功: {self.success_count} 失敗: {self.fail_count}")def setup_gui(self):# 設置游戲界面的標簽和按鈕self.score_label = tk.Label(self.root, text="成功: 0 失敗: 0", font=("Arial", 12))self.score_label.pack(anchor='ne', padx=10, pady=10)self.word_label = tk.Label(self.root, text="", font=("Arial", 24))self.word_label.place(x=-100, y=50)button_frame = tk.Frame(self.root)button_frame.pack(side='bottom', pady=20)self.option_buttons = []for i in range(4):# 創建答案選項按鈕,并綁定對應的回調函數button = tk.Button(button_frame, text="", font=("Arial", 10), width=20, height=1, command=lambda i=i: self.check_answer(i))button.grid(row=i//2, column=i%2, padx=5, pady=5)self.option_buttons.append(button)def run(self):# 啟動游戲的主循環self.root.mainloop()if __name__ == "__main__":# 創建WordGame對象并運行游戲game = WordGame("Dictionary.txt")game.run()
在這個面向對象的實現方式,創建一個WordGame類,該類封裝了游戲UI(User Interface,用戶界面)元素和主要邏輯功能,包括加載詞典、選擇新單詞、移動單詞、檢查答案和更新分數。