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.mzph.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…

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…

每日复盘-20240701

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

快钱支付股东全部股权已被质押!

根据近期工商信息&#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;…

解析QAnything启动命令过程

一.启动命令过程日志 启动命令bash ./run.sh -c local -i 0 -b hf -m Qwen-1_8B-Chat -t qwen-7b-chat。输入日志如下所示&#xff1a; rootMM-202203161213:/mnt/l/20230918_RAG方向/QAnything# bash ./run.sh -c local -i 0 -b hf -m Qwen-1_8B-Chat -t qwen-7b-chat From …

理性决策的艺术:从购房到择偶的数学智慧;37% 规则,做出最佳决策的秘诀;用数学模型解决人生难题

在面对人生重大决策时&#xff0c;如购房或择偶&#xff0c;我们常常感到迷茫和困惑。然而&#xff0c;如果我们能够将这些看似复杂的问题简化为数学模型&#xff0c;我们就能以更加理性和系统的方式做出决策。 37%规则 1950年代&#xff0c;当时几位数学家开始研究这样一个问…

值得收藏!盘点那些适合普通人方便又好用的AIGC工具!(下)

【导读】接上一篇文章&#xff0c;盘点国内外适合普通人能够轻松上手的AIGC工具&#xff08;上&#xff09;。今天又为大家整理了一些好用又方便的AI设计工具、AI办公工具、AI编程工具、AI指令工具和AI检测工具&#xff0c;如果有没更新到的工具也欢迎大家评论区交流。 一 、A…

C#/WPF 自制截图工具

在日常使用电脑办公时&#xff0c;我们经常遇到需要截图然后保存图片&#xff0c;我们往往需要借助安装截图工具才能实现&#xff0c;现在我们通过C#自制截图工具&#xff0c;也能够轻松进行截图。 我们可以通过C#调用WindousAPI来实现截图&#xff0c;实例代码如下&#xff1a…

AI基本概念(人工智能、机器学习、深度学习)

人工智能 、 机器学习、 深度学习的概念和关系 人工智能 &#xff08;Artificial Intelligence&#xff09;AI- 机器展现出人类智慧机器学习 &#xff08;Machine Learning) ML, 达到人工智能的方法深度学习 &#xff08;Deep Learning&#xff09;DL,执行机器学习的技术 从范围…

算法 —— 滑动窗口

目录 长度最小的子数组 无重复字符的最长子串 最大连续1的个数 将x减到0的最小操作数 找到字符串中所有字母异位词 长度最小的子数组 sum比target小就进窗口&#xff0c;sum比target大就出窗口&#xff0c;由于数组是正数&#xff0c;所以相加会使sum变大&#xff0c;相减…

DiskGeniusV5.6.0.1565发布!

DiskGenius是一款功能强大的磁盘管理和数据恢复工具&#xff0c;V5.6.0.1565上线。新版本变化比较大&#xff0c;增加新的功能&#xff0c;修正已经问题&#xff0c;值得试一下。提醒大家&#xff0c;磁盘管理软件涉及数据安全&#xff0c;请始终使用最新版本&#xff01; 下面…