复原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 = master
        self.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 random

class CultivationGame:
    def __init__(self, master):
        self.master = master
        self.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 = 0

    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

    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)

    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()

以下是游戏截图

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

3DS Max中绘制圆锥箭头

3DS Max中绘制圆锥箭头 绘制结果绘制过程步骤一&#xff1a;绘制立体圆锥方法1方法2 步骤二&#xff1a;圆锥体调参&#xff08;模型尺寸设置&#xff09;1圆锥体参数说明2圆锥体参数调整 步骤三&#xff1a;绘制圆柱体步骤四&#xff1a;圆柱体调参步骤五&#xff1a;圆锥与圆…

ES基础操作

1.创建索引 在 Postman 中&#xff0c;向 ES 服务器发 PUT 请求 &#xff1a; http://127.0.0.1:9200/shopping 后台日志 重复发送 PUT 请求添加索引 &#xff1a; http://127.0.0.1:9200/shopping &#xff0c;会返回错误信息 : 2.获取单个索引相关信息 在 Postman 中&#…

C++编辑修改PDF

PDFWriter是一个易于使用的C创建、修改PDF文档的库 1.创建一个PDF文件 #include #include “PDFWriter.h” int main() { std::cout << “Hello World!\n”; PDFWriter pdfWriter; int retpdfWriter.StartPDF(“D:\mytestwriterpdf.pdf”, ePDFVersion13); if (ret eS…

Java实现根据短连接获取1688商品详情数据,1688淘口令接口,1688API接口封装方法

要通过1688的API获取商品详情数据&#xff0c;您可以使用1688开放平台提供的接口来实现。以下是一种使用Java编程语言实现的示例&#xff0c;展示如何通过1688开放平台API获取商品详情属性数据接口&#xff1a; 首先&#xff0c;确保您已注册成为1688开放平台的开发者&#xf…

基于Qt5开发图形界面——WiringPi调用Linux单板电脑IO

Qt5——WiringPi Qt5WiringPi示例教程 Qt5 Qt是一种跨平台的应用程序开发框架。它被广泛应用于图形用户界面&#xff08;GUI&#xff09;开发&#xff0c;可以用于构建桌面应用程序、移动应用程序和嵌入式应用程序。Qt提供了丰富的功能和工具&#xff0c;使开发人员可以快速、高…

JVM知识点(一)

1、JVM基础概念 &#xff08;1&#xff09;JVM、JRE、JDK JRE&#xff1a;JVM基本类库组成的运行环境就是JRE。JVM自己是无法完成一次编译&#xff0c;处处运行的&#xff0c;需要有一个基本类库告诉JVM如何操作运行&#xff0c;如如何操作文件&#xff0c;连接网络等&#x…

行业追踪,2023-08-29

自动复盘 2023-08-29 凡所有相&#xff0c;皆是虚妄。若见诸相非相&#xff0c;即见如来。 k 线图是最好的老师&#xff0c;每天持续发布板块的rps排名&#xff0c;追踪板块&#xff0c;板块来开仓&#xff0c;板块去清仓&#xff0c;丢弃自以为是的想法&#xff0c;板块去留让…

基于数据湖的多流拼接方案-HUDI概念篇

目录 一、为什么需要HUDI&#xff1f; 1. 传统技术选型存在哪些问题&#xff1f; 2. Hudi有什么优点&#xff1f; 基于 Hudi Payload 机制的多流拼接方案&#xff1a; 二、HUDI的应用场景 1. 什么场景适合使用hudi&#xff1f; 2. 什么场景不适合使用hudi&#xff1f; …

【Qt QAxObject】使用 QAxObject 高效任意读写 Excel 表

1. 用什么操作 Excel 表 Qt 的官网库中是不包含 Microsoft Excel 的操作库&#xff0c;关于对 Microsoft Excel 的操作库可选的有很多&#xff0c;包含基于 Windows 系统本身的 ActiveX、Qt Xlsx、xlsLib、LibXL、qtXLS、BasicExcel、Number Duck。 库.xls.xlsx读写平台Qt Xls…

SQL注入之HTTP头部注入

文章目录 cookie注入练习获取数据库名称获取版本号 base64注入练习获取数据库名称获取版本号 user-agent注入练习获取数据库名称获取版本号 cookie注入练习 向服务器传参三大基本方法:GPC GET方法&#xff0c;参数在URL中 POST&#xff0c;参数在body中 COOKIE&#xff0c;参数…

大数据(四)主流大数据技术

大数据&#xff08;四&#xff09;主流大数据技术 一、写在前面的话 To 那些被折磨打击的好女孩&#xff08;好男孩&#xff09;&#xff1a; 有些事情我们无法选择&#xff0c;也无法逃避伤害。 但请你在任何时候都记住&#xff1a; 你可能在一些人面前&#xff0c;一文不值&a…

7、监测数据采集物联网应用开发步骤(5.3)

监测数据采集物联网应用开发步骤(5.2) 静态配置库数据库调用&#xff0c;新建全局变量初始化类com.zxy.main.Init_Page.py #! python3 # -*- coding: utf-8 -Created on 2017年05月10日 author: zxyong 13738196011 from com.zxy.z_debug import z_debug from com.zxy.common…

英特尔Raptor Lake Refresh第14代CPU:传闻发布日期、价格、规格等

英特尔预计将在今年秋天推出第14代Raptor Lake-S Refresh CPU。虽然即将推出的系列芯片沿用了当前的第13代英特尔核心系列&#xff0c;但它们实际上是相同CPU的更新版本。 Raptor Lake-s Refresh芯片没有任何官方消息&#xff0c;但几次所谓的泄露让我们了解了我们可能会期待什…

Java后端开发面试题——集合篇

ArrayList底层的实现原理是什么 底层数据结构 ArrayList底层是用动态的数组实现的 初始容量 ArrayList初始容量为0&#xff0c;当第一次添加数据的时候才会初始化容量为10 扩容逻辑 ArrayList在进行扩容的时候是原来容量的1.5倍&#xff0c;每次扩容都需要拷贝数组 添加逻…

信号和槽的相关操作

目录 信号和槽 connect()函数 自定义信号槽 例子 自定义信号槽需要注意的事项 信号槽的更多用法 Lambda表达式 ① 函数对象参数 ② 操作符重载函数参数 ③ 可修改标示符 ④ 错误抛出标示符 ⑤ 函数返回值 ⑥ 是函数体 所谓信号槽&#xff0c;实际就是观察者模式。当…

CTFHUB_web_密码口令_默认口令

登陆界面如图所示&#xff0c;题目提示默认口令&#xff1a; 查找常用默认口令&#xff1a; 常见web系统默认口令总结 常见网络安全设备弱口令(默认口令) 找到相关内容&#xff1a; 输入用户名密码得到flag

Android Jetpack Compose中使用字段验证的方法

Android Jetpack Compose中使用字段验证的方法 数据验证是创建健壮且用户友好的Android应用程序的关键部分。随着现代UI工具包Jetpack Compose的引入&#xff0c;处理字段验证变得更加高效和直观。在这篇文章中&#xff0c;我们将探讨如何在Android应用中使用Jetpack Compose进…

【每日一题】1267. 统计参与通信的服务器

【每日一题】1267. 统计参与通信的服务器 1267. 统计参与通信的服务器题目描述解题思路 1267. 统计参与通信的服务器 题目描述 这里有一幅服务器分布图&#xff0c;服务器的位置标识在 m * n 的整数矩阵网格 grid 中&#xff0c;1 表示单元格上有服务器&#xff0c;0 表示没有…

【Java基础篇】一文搞懂Java方法的调用与重载(超详细)

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【JavaSE_primary】 目录 一、方法的概念以及使用1.1什么是方法1.2方法定义1.3方法调用的执行过程1.4形参和实参的关系 二、方法的重载方…

【网络】多路转接——五种IO模型 | select

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《网络》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; 五种IO模型 | select &#x1f367;五种IO模型&#x1f367;select&#x1f9c1;认识接口&#x1f9c1…