复原20世纪复古修仙游戏

 前言

在本教程中,我突发奇想,想做一个复古的修仙游戏,考虑到以前的情怀决定做个古老的躺平修仙游戏

b1691e6f246947eeb06ee06469621bc2.gif

📝个人主页→数据挖掘博主ZTLJQ的主页

个人推荐python学习系列:

☄️爬虫JS逆向系列专栏 - 爬虫逆向教学

☄️python系列专栏 - 从零开始学python

完整的所有代码和游戏截图在最底部展示,以下是代码讲解

首先,我们需要导入tkinter库和messagebox模块,以及random库,用于创建游戏界面、显示消息框和生成随机数。

import tkinter as tk
from tkinter import messagebox
import random

接下来,我们创建一个CultivationGame的类,用于管理游戏的界面和逻辑。

class CultivationGame:def __init__(self, master):self.master = masterself.master.title("修仙游戏")self.master.geometry("800x600")self.master.config(bg="#FFEBCD")

CultivationGame类的构造函数__init__中,我们首先传入了一个master参数,表示游戏窗口的父容器。然后,我们设置了游戏窗口的标题为"修仙游戏",大小为800x600像素,背景颜色为淡橙色。

接下来,我们定义了游戏的故事文本和选项按钮。故事文本是一个字典列表,每个字典包含一个故事段落和对应的选项。选项按钮是一个空列表,我们将在后续的代码中动态地添加和更新选项按钮。

        self.story_texts = [{"text": "你正在修炼炼气期,集中精神吸收天地灵气。", "options": ["继续修炼", "休息片刻"]},{"text": "你遇到了一只妖兽,你决定与其战斗。", "options": ["使用火系法术攻击", "使用水系法术攻击", "逃跑"]},{"text": "你闯入了一座迷宫,需要找到出口。", "options": ["向左转", "向右转", "向前走", "向后退"]},{"text": "你遇到了一位仙人,他愿意传授你一项神通。", "options": ["学习飞行术", "学习隐身术", "拒绝学习"]},{"text": "你遇到了一个难题,需要解决才能继续修炼。", "options": ["解开谜题", "寻找线索", "请求帮助"]},{"text": "你得到了一本古老的法术书,里面记载着强大的法术。", "options": ["学习新的法术", "继续修炼已掌握的法术"]},{"text": "你决定前往一座神秘的禁地,探索其中的宝藏。", "options": ["进入禁地", "寻找其他修仙者组队"]},{"text": "你听说有一座仙山,据说山上有着无尽的灵气。", "options": ["攀登仙山", "寻找其他修仙法"]},]self.story_label = tk.Label(master, text="欢迎来到修仙游戏!", font=("Arial", 16), bg="#FFEBCD")self.story_label.pack(pady=10)self.option_buttons = []for i in range(4):button = tk.Button(master, text="", font=("Arial", 12), bg="#FFDAB9", relief="groove", width=30, height=2,command=lambda i=i: self.select_option(i))button.pack(pady=5)self.option_buttons.append(button)self.quit_button = tk.Button(master, text="退出游戏", font=("Arial", 12), bg="#FFDAB9", relief="groove", width=30, height=2,command=self.quit_game)self.quit_button.pack(pady=10)self.current_step = 0

然后,我们定义了next_step方法,用于显示下一步的故事文本和更新选项按钮。

    def next_step(self):if self.current_step >= len(self.story_texts):messagebox.showinfo("游戏结束", "恭喜你完成修仙之旅!")self.quit_game()else:story_text = self.story_texts[self.current_step]["text"]options = self.story_texts[self.current_step]["options"]messagebox.showinfo("故事", story_text)self.update_options(options)self.current_step += 1

next_step方法中,我们首先检查当前步骤是否超过了故事文本的数量。如果超过了,说明游戏已经结束了,我们会显示一个消息框来告诉玩家。

接着,我们从故事文本列表中获取当前步骤的故事文本和选项。然后,我们使用messagebox模块显示故事文本的消息框,并调用update_options方法来更新选项按钮。

最后,我们将当前步骤加1,表示进入下一步。

    def update_options(self, options):for i in range(len(self.option_buttons)):if i < len(options):self.option_buttons[i].configure(text=options[i], state=tk.NORMAL)else:self.option_buttons[i].configure(text="", state=tk.DISABLED)

接下来,我们定义了update_options方法,用于更新选项按钮。

update_options方法中,我们使用一个循环来遍历选项按钮列表。如果当前按钮的索引小于选项数量,说明有对应的选项,我们将按钮的文本设置为选项文本,并将按钮设置为可用状态。如果当前按钮的索引超过了选项数量,说明没有对应的选项,我们将按钮的文本设置为空,并将按钮设置为不可用状态。

    def select_option(self, option_index):selected_option = self.story_texts[self.current_step - 1]["options"][option_index]messagebox.showinfo("选择", f"你选择了:{selected_option}")self.next_step()

然后,我们定义了select_option方法,用于处理玩家选择的选项。

select_option方法中,我们首先根据选项的索引获取选项的文本。然后,我们使用messagebox模块显示一个消息框,告诉玩家选择的选项。接着,我们调用next_step方法进入下一步。

    def quit_game(self):self.master.destroy()

接下来,我们定义了quit_game方法,用于退出游戏。

quit_game方法中,我们使用destroy方法关闭游戏窗口,从而退出游戏。

最后,我们定义了main函数作为游戏的入口点。

main函数中,我们首先创建一个tkinter的根窗口对象root,然后创建一个CultivationGame对象game,并将根窗口对象作为参数传入。接着,我们调用next_step方法来开始游戏的第一步。最后,我们调用mainloop方法来进入游戏循环,等待玩家的操作。

def main():root = tk.Tk()game = CultivationGame(root)game.next_step()root.mainloop()if __name__ == '__main__':main()

以下是游戏的全部代码

import tkinter as tk
from tkinter import messagebox
import randomclass CultivationGame:def __init__(self, master):self.master = masterself.master.title("修仙游戏")self.master.geometry("800x600")self.master.config(bg="#FFEBCD")self.story_texts = [{"text": "你正在修炼炼气期,集中精神吸收天地灵气。", "options": ["继续修炼", "休息片刻"]},{"text": "你遇到了一只妖兽,你决定与其战斗。", "options": ["使用火系法术攻击", "使用水系法术攻击", "逃跑"]},{"text": "你闯入了一座迷宫,需要找到出口。", "options": ["向左转", "向右转", "向前走", "向后退"]},{"text": "你遇到了一位仙人,他愿意传授你一项神通。", "options": ["学习飞行术", "学习隐身术", "拒绝学习"]},{"text": "你遇到了一个难题,需要解决才能继续修炼。", "options": ["解开谜题", "寻找线索", "请求帮助"]},{"text": "你得到了一本古老的法术书,里面记载着强大的法术。", "options": ["学习新的法术", "继续修炼已掌握的法术"]},{"text": "你决定前往一座神秘的禁地,探索其中的宝藏。", "options": ["进入禁地", "寻找其他修仙者组队"]},{"text": "你听说有一座仙山,据说山上有着无尽的灵气。", "options": ["攀登仙山", "寻找其他修仙法"]},]self.story_label = tk.Label(master, text="欢迎来到修仙游戏!", font=("Arial", 16), bg="#FFEBCD")self.story_label.pack(pady=10)self.option_buttons = []for i in range(4):button = tk.Button(master, text="", font=("Arial", 12), bg="#FFDAB9", relief="groove", width=30, height=2,command=lambda i=i: self.select_option(i))button.pack(pady=5)self.option_buttons.append(button)self.quit_button = tk.Button(master, text="退出游戏", font=("Arial", 12), bg="#FFDAB9", relief="groove", width=30, height=2,command=self.quit_game)self.quit_button.pack(pady=10)self.current_step = 0def next_step(self):if self.current_step >= len(self.story_texts):messagebox.showinfo("游戏结束", "恭喜你完成修仙之旅!")self.quit_game()else:story_text = self.story_texts[self.current_step]["text"]options = self.story_texts[self.current_step]["options"]messagebox.showinfo("故事", story_text)self.update_options(options)self.current_step += 1def update_options(self, options):for i in range(len(self.option_buttons)):if i < len(options):self.option_buttons[i].configure(text=options[i], state=tk.NORMAL)else:self.option_buttons[i].configure(text="", state=tk.DISABLED)def select_option(self, option_index):selected_option = self.story_texts[self.current_step - 1]["options"][option_index]messagebox.showinfo("选择", f"你选择了:{selected_option}")self.next_step()def quit_game(self):self.master.destroy()def main():root = tk.Tk()game = CultivationGame(root)game.next_step()root.mainloop()if __name__ == '__main__':main()

以下是游戏截图

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Elasticsearch 集成---Spark Streaming 框架集成

一.Spark Streaming 框架介绍 Spark Streaming 是 Spark core API 的扩展&#xff0c;支持实时数据流的处理&#xff0c;并且具有可扩展&#xff0c; 高吞吐量&#xff0c;容错的特点。 数据可以从许多来源获取&#xff0c;如 Kafka &#xff0c; Flume &#xff0c; Kin…

全景图像生成算法

摘要 全景图像生成是计算机视觉领域的一个重要研究方向。本文对五种经典的全景图像生成算法进行综述&#xff0c;包括基于相机运动估计的算法、基于特征匹配的算法、基于图像切割的算法、基于多项式拟合的算法和基于深度学习的算法。通过对这些算法的原理、优缺点、适用场景等…

【附源码】Axure RP Pro8.0安装教程|HTML|网页设计

软件下载 软件&#xff1a;Axure版本&#xff1a;8.0语言&#xff1a;简体中文大小&#xff1a;82.53M安装环境&#xff1a;Win11/Win10/Win8/Win7硬件要求&#xff1a;CPU2.0GHz 内存4G(或更高&#xff09;下载通道①百度网盘丨下载链接&#xff1a;https://pan.baidu.com/s/…

部署 ssm 项目到云服务器上(购买云服务器 + 操作远程云服务器 + 服务器中的环境搭建 + 部署项目到服务器)

部署 Web 项目 1、获取 Linux 环境1.1、如何去买一个云服务器1.2、远程操作云服务器1.3、在 Linux 系统中搭建 Java Web 的运行环境。1&#xff09;安装 JDK&#xff08;使用包管理器 yum 来安装&#xff09;2&#xff09; 安装Tomcat3&#xff09;安装 MySQL。 1.4、在云服务器…

【力扣每日一题】2023.8.28 插入区间

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 和昨天的题大差不差&#xff0c;我们仍然是有一堆区间&#xff0c;题目给我们一个新的区间&#xff0c;要我们把新区间插入到原本的区间数…

腾讯云便宜购买指南(腾讯云怎样购买划算)

腾讯云是国内知名的云计算服务商&#xff0c;拥有广泛的应用和用户群体。对于有需要的用户来说&#xff0c;怎样便宜购买腾讯云产品是一个值得关注的问题&#xff0c;下面给大家分享腾讯云便宜购买指南。 腾讯云便宜购买指南&#xff1a;1、新用户专属礼包&#xff1b;2、老用户…

Postman —— postman实现参数化

什么时候会用到参数化 比如&#xff1a;一个模块要用多组不同数据进行测试 验证业务的正确性 Login模块&#xff1a;正确的用户名&#xff0c;密码 成功&#xff1b;错误的用户名&#xff0c;正确的密码 失败 postman实现参数化 在实际的接口测试中&#xff0c;部分参数每…

远程连接虚拟机中ubuntu报错:Network error:Connection refused

ping检测一下虚拟机 可以ping通&#xff0c;说明主机是没问题 #检查ssh是否安装&#xff1a; ps -e |grep ssh发现ssh没有安装 #安装openssh-server sudo apt-get install openssh-server#启动ssh service ssh startps -e |grep ssh检查一下防火墙 #防火墙状态查看 sudo ufw…

使用 Transformer 和 Amazon OpenSearch Service 构建基于列的语义搜索引擎

在数据湖中&#xff0c;对于数据清理和注释、架构匹配、数据发现和跨多个数据来源进行分析等许多操作&#xff0c;查找相似的列有着重要的应用。如果不能从多个不同的来源准确查找和分析数据&#xff0c;就会严重拉低效率&#xff0c;不论是数据科学家、医学研究人员、学者&…

智慧化工地SaaS平台源码,PC端+APP端+智慧数据可视化大屏端,源码完全开源不封装,自主研发,支持二开,项目使用,微服务+Java++vue+mysql

智慧工地管理平台充分运用数字化技术&#xff0c;聚焦施工现场岗位一线&#xff0c;依托物联网、互联网、AI等技术&#xff0c;围绕施工现场管理的人、机、料、法、环五大维度&#xff0c;以及施工过程管理的进度、质量、安全三大体系为基础应用&#xff0c;实现全面高效的工程…

es和数据库同步方案

5.5 课程信息索引同步 5.5.1 技术方案 通过向索引中添加课程信息最终实现了课程的搜索&#xff0c;我们发现课程信息是先保存在关系数据库中&#xff0c;而后再写入索引&#xff0c;这个过程是将关系数据中的数据同步到elasticsearch索引中的过程&#xff0c;可以简单成为索引…

数据结构之哈希

哈希 1. 哈希概念2. 哈希冲突3. 哈希冲突解决3.1 哈希表的闭散列3.2 哈希表的开散列 4. 哈希的应用4.1 位图4.2 布隆过滤器 哈希&#xff08;Hash&#xff09;是一种将任意长度的二进制明文映射为较短的二进制串的算法。它是一种重要的存储方式&#xff0c;也是一种常见的检索方…

Oracle数据库快速入门

前言&#xff1a; 我想现在很多人的入门数据库都是mysql&#xff0c;但是由于工作中会接触到Oracle数据库&#xff0c;如果你有MySQL的基础的话&#xff0c;这篇文章能让你很快掌握Oracle。 目录 1.体系结构 2.创建用户和表空间 2.1.创建表空间 2.2.创建用户 3.数据类型…

无涯教程-分类算法 - 简介

分类可以定义为根据观测值或给定数据点预测类别的过程。分类的输出可以采用"黑色"或"白色"或"垃圾邮件"或"非垃圾邮件"的形式。 在数学上&#xff0c;分类是从输入变量(X)到输出变量(Y)近似映射函数(f)的任务&#xff0c;它属于有监督…

MATLAB算法实战应用案例精讲-【自然语言处理】语义分割模型-DeepLabV3

目录 1、DeepLab系列简介 1.1.DeepLabV1 1.1.1创新点&#xff1a; 1.1.2. 动机&#xff1a; 1.1.3. 应对策略&#xff1a; 1.2.DeepLabV2 1.2.1.创新点&#xff1a; 1.2.2.动机 1.2.3. 应对策略&#xff1a; 1.3.DeepLabV3 1.3.1创新点&#xff1a; 1.3.2. 动机&am…

5G NR:RACH流程-- Msg1之生成PRACH Preamble

随机接入流程中的Msg1&#xff0c;即在PRACH信道上发送random access preamble。涉及到两个问题&#xff1a; 一个是如何产生preamble&#xff1f;一个是如何选择正确的PRACH时频资源发送所选的preamble? 一、PRACH Preamble是什么 PRACH Preamble从数学上来讲是一个长度为…

马斯克遭冷遇,Twitter更名近一个月,许多品牌仍未删除蓝鸟标志

根据报道&#xff0c;Twitter更名为X已经近一个月了&#xff0c;但许多主要品牌仍然没有完全删除其营销中的蓝鸟标志。只有宝洁这一家美国广告支出最高的公司在其网站的社交媒体联系信息中将蓝鸟换成了新的X标志。 另外&#xff0c;Expedia和IBM这两家公司在其网站上甚至没有显…

[C++ 网络协议] 套接字的多种可选项

目录 1. 套接字的可选项 2. 获取/设置套接字可选项 2.1 getsockopt函数&#xff08;获取套接字可选项&#xff09; 2.2 setsockopt函数&#xff08;设置套接字可选项&#xff09; 3. 常用套接字可选项 3.1 SOL_SOCKET协议层的SO_TYPE可选项 3.2 SOL_SOCKET协议层的SO_SN…

Matlab(变量与文本读取)

目录 1.变量&#xff08;数据&#xff09;类型转换 1.1 字符 1.2 字符串 1.3 逻辑操作与赋值 2.Struct结构体数组 2.1函数的详细介绍&#xff1a; 2.1.1 cell2struct 2.1.1.1 垂直维度转换 2.1.1.2 水平维度转换 2.1.1.3 部分进行转换 2.1.2 rmfield 2.1.3 fieldnames(查…

【真题解析】系统集成项目管理工程师 2022 年上半年真题卷(案例分析)

本文为系统集成项目管理工程师考试(软考) 2022 年上半年真题&#xff08;全国卷&#xff09;&#xff0c;包含答案与详细解析。考试共分为两科&#xff0c;成绩均 ≥45 即可通过考试&#xff1a; 综合知识&#xff08;选择题 75 道&#xff0c;75分&#xff09;案例分析&#x…