复原20世纪复古修仙游戏

news/2024/5/18 13:08:12 标签: python, 爬虫, 网络安全, 游戏程序, 游戏

 前言

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

b1691e6f246947eeb06ee06469621bc2.gif

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

个人推荐python学习系列:

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

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

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

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

python">import tkinter as tk
from tkinter import messagebox
import random

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

python">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像素,背景颜色为淡橙色。

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

python">        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方法,用于显示下一步的故事文本和更新选项按钮。

python">    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,表示进入下一步。

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

python">    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方法进入下一步。

python">    def quit_game(self):
        self.master.destroy()

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

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

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

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

python">def main():
    root = tk.Tk()
    game = CultivationGame(root)
    game.next_step()
    root.mainloop()

if __name__ == '__main__':
    main()

以下是游戏的全部代码

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

以下是游戏截图


http://www.niftyadmin.cn/n/4982406.html

相关文章

[多标签分类]MultiLabelBinarizer: 从one-hot 到multi-hot

]MultiLabelBinarizer: 从one-hot 到multi-hot 背景知识One hot encoderLabelEncoderMultiLabelBinarizer总结 背景知识 多类别分类: label space至少有3个label, 且默认每个sample有一个label, 与之相对应的是二元分类Binary classification, 多标签分类: 每个sample有1至多…

20230828工作日志:

今天遇到了很多问题&#xff0c;下次可以做得更好更快的几个地方&#xff1a; 1 sql语句的检查 肯定要先在navicate 里执行看&#xff0c;是否有语法错误。即使没有&#xff0c;也还是要注意一些问题&#xff1a;IDEA里换行的时候&#xff0c;“后面要空一格&#xff0c;如果连…

decomposed Relative Positional Embeddings的理解

文章目录 正文文献来源 正文 relative positional embedding的一种实现方式是&#xff1a;先计算q和k的相对位置坐标&#xff0c;然后依据相对位置坐标从给定的table中取值。 以q和k都是77为例&#xff0c;每个相对位置有两个索引对应x和y两个方向&#xff0c;每个索引值的取…

蓝芯、四川邦辰面试(部分)

蓝芯 HTTP请求经过MQ异步处理后&#xff0c;怎样返回结果呢&#xff1f;grpc比起spring cloud的优缺点&#xff1f; 四川邦辰 SkyWalking的埋点具体是怎么操作的&#xff1f;newBing: SkyWalking支持两种埋点方式&#xff1a;自动埋点和手动埋点。自动埋点是指通过SkyWalking…

工具分享 | PDF文档解析工具PyMuPDF

1 需求描述 最近工作需要从PDF文档中按照章节解析出对应的文本和图片(后续可能还会有表格)&#xff0c;经过调研&#xff0c;找到了一个功能强大的解析工具MuPDF&#xff0c;对应的Python包是PyMuPDF。本篇博客记录使用它来实现具体功能。 官方文档&#xff1a;https://pymupd…

如何修复MySQL中损坏的表

偶尔MySQL表可能会损坏&#xff0c;这意味着一个错误已经发生&#xff0c;其中的数据是不可读。虽然这种情况非常少见&#xff0c;遇到了那恭喜你中招了。如果你想从损坏的表中读取数据通常会导致服务器崩溃。 一些常见的原因损坏的表: MySQL服务器在写过程中停止&#xff1b…

docker 学习-- 04 实践搭建 1(宝塔)

docker 学习-- 04 实践 1&#xff08;宝塔&#xff09; docker 学习-- 01 基础知识 docker 学习-- 02 常用命令 docker 学习-- 03 环境安装 docker 学习-- 04 实践 1&#xff08;宝塔&#xff09; docker 学习-- 04 实践 2 &#xff08;lnpmr环境&#xff09; 通过上面的学…

Android11屏蔽禁用下拉状态栏

做项目软件时&#xff0c;会遇到客户提出屏蔽禁用下拉状态栏&#xff0c;其实禁用下拉状态栏主要包含两个地方 第一个地方就是解锁后进入到桌面时&#xff0c;在顶部和中部下拉时会将状态栏拉出来显示 第二个地方就是锁屏界面在顶部和中部下拉时会将状态栏拉出来显示 具体屏…