python实现tkinter解密剧情文本游戏

目录

需求

效果

代码实现

代码说明


需求

python实现tkinter解密剧情文本游戏

效果

代码实现

import tkinter as tkclass StoryGame:def __init__(self, master):self.master = mastermaster.title("剧情游戏")# 初始化故事节点self.current_node = 0# 故事节点数据self.story_nodes = {0: {"text": "你醒来在一个陌生的房间里,四周一片漆黑。","options": [{"text": "寻找出口", "next_node": 1},{"text": "大声呼救", "next_node": 2}]},1: {"text": "你在房间的角落找到了一扇门,门是锁着的。","options": [{"text": "寻找钥匙", "next_node": 3},{"text": "用力撞门", "next_node": 4}]},2: {"text": "你大声呼救,但没有人回应。","options": [{"text": "继续呼救", "next_node": 2},{"text": "寻找出口", "next_node": 1}]},3: {"text": "你在房间里找到了一把钥匙,成功打开了门。","options": [{"text": "走出房间", "next_node": 5}]},4: {"text": "你用力撞门,门没有打开,反而受伤了。","options": [{"text": "寻找钥匙", "next_node": 3},{"text": "休息一下", "next_node": 6}]},5: {"text": "你走出了房间,发现外面是一片森林。","options": [{"text": "继续前进", "next_node": 7}]},6: {"text": "你休息了一会儿,感觉好多了。","options": [{"text": "再次尝试撞门", "next_node": 4},{"text": "寻找钥匙", "next_node": 3}]},7: {"text": "你在森林里走了很久,终于看到了一座小屋。","options": [{"text": "敲门", "next_node": 8},{"text": "绕过小屋", "next_node": 9}]},8: {"text": "你敲了敲门,一位老人开了门。他邀请你进去。","options": [{"text": "接受邀请", "next_node": 10},{"text": "拒绝邀请", "next_node": 11}]},9: {"text": "你绕过了小屋,继续在森林里探险。","options": [{"text": "继续前进", "next_node": 12}]},10: {"text": "老人告诉你,你是被恶龙抓来的英雄,需要拯救世界。","options": [{"text": "接受任务", "next_node": 13},{"text": "拒绝任务", "next_node": 14}]},11: {"text": "你拒绝了老人的邀请,继续在森林里探险。","options": [{"text": "继续前进", "next_node": 9}]},12: {"text": "你在森林里迷路了,最终回到了小屋。","options": [{"text": "敲门", "next_node": 8}]},13: {"text": "你接受了任务,踏上了拯救世界的旅程。","options": []},14: {"text": "你拒绝了任务,决定独自探索这个世界。","options": []}}# 创建故事文本显示区域self.text_label = tk.Label(master, text="", font=('Arial', 14), wraplength=400, justify='left')self.text_label.pack(pady=10)# 创建按钮容器self.button_frame = tk.Frame(master)self.button_frame.pack()# 初始化故事self.update_story()def update_story(self):node = self.story_nodes[self.current_node]self.text_label.config(text=node["text"])# 清除旧的按钮for widget in self.button_frame.winfo_children():widget.destroy()# 创建新的按钮for option in node["options"]:button = tk.Button(self.button_frame, text=option["text"], command=lambda next_node=option["next_node"]: self.choose_option(next_node))button.pack(side=tk.LEFT, padx=5, pady=5)def choose_option(self, next_node):self.current_node = next_nodeself.update_story()if __name__ == "__main__":root = tk.Tk()game = StoryGame(root)root.mainloop()

代码说明

  1. 导入模块

    import tkinter as tk
    • tkinter: 这是 Python 的标准 GUI 库,用于创建图形用户界面。
  2. 创建 StoryGame

    class StoryGame:def __init__(self, master):self.master = mastermaster.title("剧情游戏")# 初始化故事节点self.current_node = 0# 故事节点数据self.story_nodes = {0: {"text": "你醒来在一个陌生的房间里,四周一片漆黑。","options": [{"text": "寻找出口", "next_node": 1},{"text": "大声呼救", "next_node": 2}]},...}# 创建故事文本显示区域self.text_label = tk.Label(master, text="", font=('Arial', 14), wraplength=400, justify='left')self.text_label.pack(pady=10)# 创建按钮容器self.button_frame = tk.Frame(master)self.button_frame.pack()# 初始化故事self.update_story()
    • __init__(self, master): 构造函数,初始化游戏的主要组件。
      • self.master = master: 将传入的主窗口对象赋值给 self.master
      • master.title("剧情游戏"): 设置主窗口的标题。
      • self.current_node = 0: 初始化当前故事节点为 0。
      • self.story_nodes: 存储故事节点的数据,每个节点包含文本和选项。
      • self.text_label: 创建一个标签,用于显示当前的故事文本。
      • self.button_frame: 创建一个框架,用于存放按钮。
      • self.update_story(): 初始化故事,显示第一个节点的内容。
  3. 更新故事内容

    def update_story(self):node = self.story_nodes[self.current_node]self.text_label.config(text=node["text"])# 清除旧的按钮for widget in self.button_frame.winfo_children():widget.destroy()# 创建新的按钮for option in node["options"]:button = tk.Button(self.button_frame, text=option["text"], command=lambda next_node=option["next_node"]: self.choose_option(next_node))button.pack(side=tk.LEFT, padx=5, pady=5)
    • update_story(self): 更新当前显示的故事内容和按钮。
      • node = self.story_nodes[self.current_node]: 获取当前节点的数据。
      • self.text_label.config(text=node["text"]): 更新标签的文本内容。
      • for widget in self.button_frame.winfo_children(): widget.destroy(): 清除旧的按钮。
      • for option in node["options"]: 遍历当前节点的选项,为每个选项创建一个按钮,并绑定点击事件到 choose_option 方法。
  4. 处理选项选择

    def choose_option(self, next_node):self.current_node = next_nodeself.update_story()
    • choose_option(self, next_node): 处理玩家选择的选项。
      • self.current_node = next_node: 更新当前节点为选择的下一个节点。
      • self.update_story(): 更新故事内容和按钮。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/4099.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

C 学习(5)

哈哈哈哈哈,终于想起来了!贴一下主要的参考: 基本语法 - 《阮一峰《C 语言教程》》 - 书栈网 BookStack 内容写的比较浅显有疏漏,如果看不明白,再结合一下百度。 注释 C 语言的注释有两种表示方法。 第一种方法是…

解读《ARM Cortex-M3 与Cortex-M4 权威指南》——第3章 技术综述

加载—存储架构 ISA(指令集架构) 指令集架构 (ISA) 是计算机处理器能够理解和执行的指令集合。它定义了计算机系统中硬件和软件之间的接口 ISA 是硬件与软件之间的接口规范,它定义了处理器能执行哪些操作,程序员和编译器可以依此编写代码。 常见的 ISA 类型: CISC (Comp…

【Linux】linux c语言调用send()接口内核调用流程

1、C语言测试代码&#xff1a; #include <errno.h> #include <string.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <err.h> #include <sys/types.h> #include <sys/socket.h> #include <net…

【Windows修改Docker Desktop(WSL2)内存分配大小】

记录一下遇到使用Docker Desktop占用内存居高不下的问题 自从使用了Docker Desktop&#xff0c;电脑基本每天都需要重启&#xff0c;内存完全不够用&#xff0c;从16g扩展到24&#xff0c;然后到40G&#xff0c;还是不够用&#xff1b;打开Docker Desktop 运行时间一长&#x…

使用 ABAP GIT 发生 IF_APACK_MANIFEST dump

错误重现 使用经典的 ABAP 系统运行 ZABAPGIT 或者 ZABAPGIT_STANDALONE然后添加在线或者离线项目点击 PullShort dump SYNTAX_ERROR Dump 界面&#xff1a; 解决方案 它发生在 CREATE OBJECT lo_manifest_provider TYPE (ls_manifest_implementation-clsname) 语句中。 该语…

树莓派基本设置--8.播放音频和视频

在Raspberry Pi上播放音频和视频的最简单方法是使用预装的VLC应用程序&#xff1b; VLC程序使用硬件加速&#xff0c;可以播放许多流行的音频和视频文件格式。 一、图形化界面 选择要播放的文件&#xff0c;鼠标右击&#xff0c;选择“VLC Media Player” 二、命令行 注意&…

JS实现原生注册表单,滑块验证,短信验证码

目录 一、编辑表单询盘结构 1、确定注册接口所需参数 2、编写表单HTML结构 二、编写style样式 1、非表单元素样式 三、引入阿里云滑块验证 1、引入阿里短信接口CDN 2、实例化nc对象 四、调用短信验证码接口 1、给获取按钮绑定点击事件 2、测试短信验证码获取 五、调用注册接口 …

matlab 质心重合法实现点云配准

目录 一、算法原理1、原理概述2、参考文献二、代码实现三、结果展示1、初始位置2、配准结果本文由CSDN点云侠原创,原文链接,首发于:2024年11月5日。 一、算法原理 1、原理概述 质心重合法是将源点云 P P P

YOLOv8实战人脸口罩识别

本文采用YOLOv8作为核心算法框架&#xff0c;结合PyQt5构建用户界面&#xff0c;使用Python3进行开发。YOLOv8以其高效的实时检测能力&#xff0c;在多个目标检测任务中展现出卓越性能。本研究针对人脸口罩数据集进行训练和优化&#xff0c;该数据集包含丰富的人脸口罩图像样本…

科研绘图系列:R语言两侧柱状图(Grouped Bar Chart)

文章目录 介绍加载R包数据画图1画图2组合图形系统信息介绍 两侧柱状图(也称为双柱状图或并列柱状图)是一种数据可视化图表,它通过在坐标轴的两侧绘制两组或多组柱状图来展示不同类别或组别的数据对比。这种图表特别适用于比较两个或多个数据系列之间的差异。以下是两侧柱状…

获取订单物流信息:追踪包裹的“侦探游戏”

在电商的世界里&#xff0c;顾客下单之后&#xff0c;最让人心急如焚的莫过于等待包裹的到来。想象一下&#xff0c;如果你是一名侦探&#xff0c;而你的任务是追踪那些神秘的包裹&#xff0c;那么获取订单物流信息的API就是你的侦探工具。今天&#xff0c;我们就来聊聊如何使用…

Kinematic-ICP开源:优化激光雷达与轮式里程计融合

文章目录 摘要一、介绍二、相关工作三、使用点对点ICP的激光雷达里程计四. 在ICP中引入运动学约束五. 实验评估A. 实验设置B. 大型室内仓库的定性结果C. 定量结果D. 消融实验 摘要 代码&#xff1a;github 原文&#xff1a;原文 摘要—LiDAR里程计对许多机器人应用至关重要&am…

最新Ubuntu超详细安装教程(附镜像包)

一、镜像下载&#xff1a; 官方正版VMware下载&#xff1a;https://pan.baidu.com/s/1yC610SU1-O9Jtk7nUrZuSA?pwdsKByvm17pro安装教程文档&#xff08;必看&#xff09;.txt 这个一定要下载下来看一下&#xff01;&#xff01;&#xff01; Ubuntu镜像下载&#xff1a;http…

归并排序算法

1、基本思想 归并排序是建立在归并操作上的一种有效的排序算法&#xff0c;它采用分治法的策略。其基本思想是将一个待排序的数组分成两个或多个子数组&#xff0c;先对每个子数组进行排序&#xff0c;然后再将已排序的子数组合并成一个最终的排序数组。 对于两个有序的数组&am…

记录解决vscode 登录leetcode中遇到的问题

1. 安装完 leetcode 点击sign in to leetcode 点击打开网站登录leetcode&#xff0c;发现网页无法打开。 解决办法&#xff1a;将leetcode.cn.js文件中的leetcode-cn.com路径都改成leetcode.cn 2. 继续点击 sign in to leetcode &#xff0c;选择使用账号登录&#xff0c;始…

机器人助力Bridge Champ游戏:1.4.2版本如何提升玩家体验

在Bridge Champ游戏中&#xff0c;机器人扮演着桥牌游戏的“无名英雄”角色&#xff0c;默默地提升玩家体验。凭借智能化的设计&#xff0c;这些机器人不仅能够陪练&#xff0c;也大大提升了比赛的流畅度与趣味性。 Bridge Champ是什么 Bridge Champ是一个基于Ignis公链的在线…

服装品牌零售业态融合中的创新发展:以开源 AI 智能名片 S2B2C 商城小程序为视角

摘要&#xff1a;本文以服装品牌零售业态融合为背景&#xff0c;探讨信息流优化和资金流创新的重要作用&#xff0c;并结合开源 AI 智能名片 S2B2C 商城小程序&#xff0c;分析其如何进一步推动服装品牌在零售领域的发展&#xff0c;提高运营效率和用户体验&#xff0c;实现商业…

redis:set集合命令,内部编码,使用场景

个人主页 &#xff1a; 个人主页 个人专栏 &#xff1a; 《数据结构》 《C语言》《C》《Linux》《网络》 《redis学习笔记》 文章目录 前言命令SADDSMEMBERSSISMEMBERSCARDSPOPSMOVESREM集合间操作SINTERSINTERSTORESUNIONSUNIONSTORESDIFFSDIFFSTORE 内部编码使用场景总结 前言…

ssm052游戏攻略网站的设计与实现+vue(论文+源码)-kaic

毕 业 设 计&#xff08;论 文&#xff09; 题目&#xff1a;游戏攻略网站设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本游戏攻略网站就是在这…

Java基础-JDBC

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 一、JDBC简介 1.1 什么是JDBC 1.2 JDBC的作用 1.3 JDBC的架构 二、JDBC核心接口与类 2.1 DriverManag…