Python和tkinter單詞游戲

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,用戶界面)元素和主要邏輯功能,包括加載詞典、選擇新單詞、移動單詞、檢查答案和更新分數。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/37800.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/37800.shtml
英文地址,請注明出處:http://en.pswp.cn/web/37800.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

springboot實驗報告管理系統-計算機畢業設計源碼10596

目錄 1 緒論 1.1 選題背景與意義 1.2國內外研究現狀 1.3論文結構與章節安排 2系統分析 2.1 可行性分析 2.2 系統流程分析 2.2.1系統開發流程 2.2.2 用戶登錄流程 2.2.3 系統操作流程 2.2.4 添加信息流程 2.2.5 修改信息流程 2.2.6 刪除信息流程 2.3 系統功能分析 …

HarmonyOS Next開發學習手冊——單選框 (Radio)

Radio是單選框組件&#xff0c;通常用于提供相應的用戶交互選擇項&#xff0c;同一組的Radio中只有一個可以被選中。具體用法請參考 Radio 。 創建單選框 Radio通過調用接口來創建&#xff0c;接口調用形式如下&#xff1a; Radio(options: {value: string, group: string})…

高考不是終點:如何利用教育資源實現人生躍遷?普魯士教育的利弊,你了解嗎?從科舉到高考,中國教育的變遷!鏈接上層,獲取核心資源的途徑

高考已經結束&#xff0c;這兩天分數將會陸續出來&#xff0c;無論結果好壞&#xff0c;我都希望你明白一些道理。這些道理在學校老師不會教你&#xff0c;但是非常重要。 一、中國的科舉制度 科舉制度是為王朝服務的。 科舉制度是中國古代通過考試選拔官員的制度&#xff0c…

C++類型轉換可調用對象

目錄 C的四種可視性類型轉換 1.static_cast 2.reinterpret_cast 3.const_cast 4.dynamic_cast C中的可調用對象 普通函數 函數指針 仿函數 Lambda表達式 包裝器function bind C的四種可視性類型轉換 C語言中的類型轉換是不安全、不明確的&#xff0c;于是C就出了更…

MQTT QoS 0, 1, 2

目錄 # 開篇 1. 精細MQS TT QoS的行為 1.1 QoS 0: 最多交付一次&#xff08;At Most Once&#xff09; 1.2 QoS 1: 至少交付一次&#xff08;At Least Once&#xff09; 1.3 QoS 2: 只交付一次&#xff08;Exactly Once&#xff09; 1.4 傳輸過程圖示 1.5 總結 2. MQTT…

HTTP協議頭中X-Forwarded-For是能做什么?

X-Forwarded-For和相關幾個頭部的理解 $remote_addr 是nginx與客戶端進行TCP連接過程中&#xff0c;獲得的客戶端真實地址. Remote Address 無法偽造&#xff0c;因為建立 TCP 連接需要三次握手&#xff0c;如果偽造了源 IP&#xff0c;無法建立 TCP 連接&#xff0c;更不會有后…

javascript 的 屬性、方法、事件

使用 javascript 設計一個學生類、&#xff08;屬性&#xff1a;ID、姓名、性別,方法&#xff1a;學習、休息、&#xff0c;事件&#xff1a;上學、放學、上課、下課&#xff09;學校有定時器每1秒鐘觸發一次時鐘事件&#xff0c;每節課45分鐘&#xff0c;課間15分鐘 var Stud…

13. Lammps入門in文件簡介-1

來源&#xff1a; “碼農不會寫詩”公眾號 鏈接&#xff1a;Lammps入門in文件簡介-1 文章目錄 01 in文件簡介02 in文件命令解析規則 書回正文 Lammps通過一次一行地從輸入腳本&#xff08;文本文件&#xff0c;通常稱in文件&#xff09;中讀取命令來執行計算&#xff0c;當輸入…

7-1作業

1.實驗目的&#xff1a;完成字符收發 led.h #ifndef __GPIO_H__ #define __GPIO_H__#include "stm32mp1xx_rcc.h" #include "stm32mp1xx_gpio.h" #include "stm32mp1xx_uart.h"//RCC,GPIO,UART初始化 void init();//字符數據發送 void set_tt…

Web端登錄頁和注冊頁源碼

前言&#xff1a;登錄頁面是前端開發中最常見的頁面&#xff0c;下面是登錄頁面效果圖和源代碼&#xff0c;CV大法直接拿走。 1、登錄頁面 源代碼&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8"><title>登錄</ti…

Django 和 Django REST framework 創建對外 API

1. 環境準備 確保你已經安裝了 Python 和 Django。如果尚未安裝 Django REST framework&#xff0c;通過 pip 安裝它&#xff1a; pip install djangorestframework 2. 創建 Django 項目 如果你還沒有 Django 項目&#xff0c;可以通過以下命令創建&#xff1a; django-ad…

每日復盤-20240701

今日關注&#xff1a; 20240701 六日漲幅最大: ------1--------301182--------- 凱旺科技 五日漲幅最大: ------1--------300977--------- 深圳瑞捷 四日漲幅最大: ------1--------300977--------- 深圳瑞捷 三日漲幅最大: ------1--------300461--------- 田中精機 二日漲幅最…

Lua實現鏈表(面向對象應用)

Lua實現面向對象 面向對象核心三要素Lua面向對象大致原理面向對象示例繼承與多態示例 面向對象核心三要素 1.封裝&#xff1a;對一個事物的抽象為一些屬性和行為動作的集合&#xff0c;封裝將屬性和行為動作&#xff08;操作數據的方法&#xff09;綁定在一起&#xff0c;并隱藏…

快錢支付股東全部股權已被質押!

根據近期工商信息&#xff0c;第三方支付機構快錢支付清算信息有限公司&#xff08;簡稱“快錢支付”&#xff09;實際控股方快錢金融服務&#xff08;上海&#xff09;有限公司&#xff08;簡稱“快錢金融”&#xff09;&#xff0c;作為出質股權標的企業&#xff0c;被出質給…

【SGX系列教程】(三)Intel-SGX 官方示例分析(SampleCode)——SampleEnclave

文章目錄 一. 引言二. README2.1 項目目的2.2 構建和執行示例代碼的步驟2.3 配置參數解釋2.4 配置文件分析2.5 啟動令牌初始化 三. 重點代碼分析3.1 App文件夾3.1.1 App/App.cpp3.1.2 App/Edger8rSyntax文件夾3.1.2.1 App/Edger8rSyntax/Arrays.cpp3.1.2.2 App/Edger8rSyntax/F…

一文全概括,建議收藏,那些你不可錯過的IC設計書籍合集(可下載)

集成電路設計工程師的角色不僅是推動技術創新的中堅力量&#xff0c;更是實現產品從概念到現實的關鍵橋梁。隨著對高性能、低功耗芯片的需求不斷增長&#xff0c;IC設計工程師的專業技能和知識深度成為了衡量其職業價值的重要標準。無論是在數字邏輯設計、功能驗證、可測試性設…

JMeter--定時執行的方法

原文網址&#xff1a;JMeter--定時執行的方法_IT利刃出鞘的博客-CSDN博客 簡介 本文介紹JMeter如何使用定時器定時執行測試任務。 Java技術星球&#xff1a;way2j.com 方法 第一步&#xff1a;新建定時器 右鍵測試任務> Add > Timer> Constant Timer 如下圖所示…

qt中數據庫和excel互導數據————附帶詳細步驟和代碼

文章目錄 0 背景1 準備QXlsx環境1.1 cmake安裝使用1.2 qmake使用 2 把excel數據導出到mysql數據庫3 把mysql數據庫的數據寫入到excel4 完整代碼5 項目代碼倉庫 0 背景 因為需要批量導入和導出數據&#xff0c;所以需要用到excel。實現把數據庫的數據導入到excel中&#xff0c;…

圓圈序號1~10復制粘貼直接用

1. 空心圓圈數字序號&#xff1a; ①、②、③、④、⑤、⑥、⑦、⑧、⑨、⑩ 2. 實心圓圈數字序號&#xff1a; ?、?、?、?、?、?、?、?、?、? 3. 空心圓圈中文序號&#xff1a; 一、二、三、四、五、六、七、八、九、十

linux高級編程(線程)(1)

虛擬地址&#xff1a; 線程&#xff1a; 概念&#xff1a;線程是輕量級進程&#xff0c;一般是一個進程中的多個任務。 進程是系統中最小的資源分配單位。&#xff08;競爭計算機資源的最小單位&#xff09;&#xff08;進程能分配硬件資源&#xff0c;線程不行&#x…