首页 > 其他分享 >【重温童年】基于tkinter模块设计的Q宠大乐斗武器升星模拟器:重温经典,畅享休闲时光

【重温童年】基于tkinter模块设计的Q宠大乐斗武器升星模拟器:重温经典,畅享休闲时光

时间:2024-09-14 22:20:37浏览次数:14  
标签:upgrade tkinter success 畅享 self 重温 rates star weapon

在快节奏的现代生活中,我们总是在寻找那些能够让我们暂时忘却烦恼,沉浸在简单快乐中的休闲方式。对于许多80后、90后而言,Q宠大乐斗无疑是一款充满回忆的经典网页游戏。它以其独特的宠物养成、战斗系统以及丰富多样的武器系统,吸引了无数玩家的心。今天,就让我们一起重温那段美好的时光,通过一款自制的“Q宠大乐斗武器升星模拟器”,再次感受那份纯粹的休闲与乐趣。

一、重温经典,唤醒记忆深处的游戏情怀

对于许多老玩家而言,Q宠大乐斗不仅仅是一款游戏,更是一段青春的记忆。那时的我们,或许还在校园中无忧无虑地奔跑,或许刚刚踏入社会,对未来充满憧憬。而Q宠大乐斗,就像是我们生活中的一抹亮色,让我们在忙碌之余,能够找到一片属于自己的小天地。

在这款游戏中,最让人兴奋的莫过于武器的升星系统。通过消耗黄金卷轴,我们可以将自己的武器从一星升级到五星,每一次成功升星都意味着战力的巨大提升。而今天,我们通过自制的“Q宠大乐斗武器升星模拟器”,不仅能够重温这一经典玩法,还能在虚拟世界中继续追寻那份升级的乐趣。

二、模拟升星,享受休闲时光

打开这款模拟器,首先映入眼帘的是一个简洁明了的界面。屏幕上方显示着当前的“黄金卷轴数量”,而下方则是各式各样的武器列表。这些武器,无论是“三叉戟”的霸气侧漏,还是“平底锅”的朴实无华,都让人瞬间回到了那个与好友并肩作战的年代。

点击任意一把武器,我们就可以看到它的当前星级以及一个醒目的“升级”按钮。随着鼠标的轻轻一点,一场紧张刺激的升星之旅就此展开。每一次点击,都伴随着心跳的加速和期待的目光。是成功升星后的欢呼雀跃,还是失败后的扼腕叹息?这一切,都将在模拟器中得到最真实的还原。

三、自定义升星概率,增加游戏趣味性

与传统的Q宠大乐斗不同,这款模拟器还加入了一个创新的功能——自定义升星概率。玩家可以根据自己的喜好和策略,为不同的武器设置不同的成功率和降级率。比如,你可以将“嗜血”这把武器的升星难度设置得极高,以体现其稀有性和强大威力;也可以将“平底锅”这样的普通武器设置得相对容易升星,让玩家在升级过程中感受到更多的成就感。

这种自定义的概率设置,不仅增加了游戏的趣味性和挑战性,还让玩家在升级过程中有了更多的策略和选择。你可以根据自己的武器库和卷轴数量,制定出最合适的升级计划,从而在游戏中占据先机。

四、休闲与策略并存,体验升级的乐趣

除了自定义升星概率外,模拟器还保留了Q宠大乐斗中的分页显示和日志记录功能。玩家可以通过分页查看不同页面的武器列表,轻松找到自己想要升级的武器;同时,日志记录功能还能帮助玩家回顾自己的升级历程,记录下每一次成功和失败的经验教训。

这些功能的加入,让模拟器不仅仅是一款简单的休闲游戏,更是一个充满策略和智慧的升级平台。玩家需要根据自己的实际情况和武器特性,制定出最合适的升级策略,才能在有限的卷轴数量内实现最大的升级效益。

五、结语:在休闲中找寻乐趣,在模拟中回味经典

在这个快节奏的时代里,我们或许已经很久没有静下心来享受一段纯粹的休闲时光了。而这款“Q宠大乐斗武器升星模拟器”,正是为我们提供了一个这样的机会。它让我们在忙碌之余能够暂时忘却烦恼和压力,沉浸在那份简单而纯粹的升级乐趣中。

通过这款模拟器,我们不仅可以重温Q宠大乐斗的经典玩法和情怀记忆,还能在自定义升星概率和策略升级的过程中体验到更多的游戏趣味性和挑战性。它让我们明白了一个道理:无论是面对现实生活中的种种挑战还是虚拟世界中的升级之路都需要我们保持一颗平常心去享受过程、珍惜当下。

在未来的日子里,让我们继续携手前行在这条充满乐趣和挑战的升级之路上吧!愿每一位玩家都能在模拟器中找到属于自己的那份快乐和成就感!

代码如下:

import tkinter as tk
from tkinter import ttk
import random

class WeaponUpgradeApp:
    def __init__(self, master):
        self.master = master
        master.title("Q宠大乐斗武器升星模拟器")
        master.geometry("800x600")

        self.weapons = [
            "三叉戟", "充气锤子", "狂魔镰", "红樱枪", "小李飞刀", "流星球",
            "幻影枪", "开山斧", "平底锅", "铁铲", "板砖", "修心术",
            "关刀", "判官笔", "烧饼", "汽水罐", "短剑", "木剑",
            "接力棒", "宽刃剑", "双截棍", "环扣刀", "棒球棒", "青龙戟",
            "木槌", "老鼠", "肉搏好手", "武器好手", "皮糙肉厚", "矿泉水",
            "嗜血", "势如暴雨", "晴天霹雳", "第六感", "企鹅挠痒", "佛山无影脚",
            "强健身躯", "凌波微步", "血祭术", "装死", "龙卷风", "避重就轻",
            "企鹅吼", "无影手"
        ]
        # 添加自定义成功率和降级率
        self.custom_rates = {
            "平底锅": {"success_rates": [100, 80, 50, 25, 15], "downgrade_rates": [0, 0, 0, 0, 0]},
            "铁铲": {"success_rates": [100, 80, 50, 25, 15], "downgrade_rates": [0, 0, 0, 0, 0]},
            "嗜血": {"success_rates": [100, 40, 20, 10, 2], "downgrade_rates": [0, 0, 0, 30, 30]},
            "皮糙肉厚": {"success_rates": [100, 50, 30, 15, 5], "downgrade_rates": [0, 0, 0, 20, 30]},
            "第六感": {"success_rates": [100, 50, 25, 15, 5], "downgrade_rates": [0, 0, 0, 20, 30]},
            "肉搏好手": {"success_rates": [100, 70, 40, 20, 10], "downgrade_rates": [0, 0, 0, 0, 0]},
            "企鹅吼": {"success_rates": [100, 70, 40, 20, 10], "downgrade_rates": [0, 0, 0, 0, 0]},
            "烧饼": {"success_rates": [100, 80, 60, 25, 15], "downgrade_rates": [0, 0, 0, 0, 0]},
            "汽水罐": {"success_rates": [100, 80, 60, 25, 15], "downgrade_rates": [0, 0, 0, 0, 0]},
            "小李飞刀": {"success_rates": [100, 50, 25, 15, 5], "downgrade_rates": [0, 0, 0, 20, 30]},
            "矿泉水": {"success_rates": [100, 50, 25, 15, 5], "downgrade_rates": [0, 0, 0, 30, 30]},
            "接力棒": {"success_rates": [100, 80, 50, 25, 15], "downgrade_rates": [0, 0, 0, 0, 0]},
            "棒球棒": {"success_rates": [100, 80, 50, 25, 15], "downgrade_rates": [0, 0, 0, 0, 0]},
            "木槌": {"success_rates": [100, 80, 50, 25, 15], "downgrade_rates": [0, 0, 0, 0, 0]},
            "环扣刀": {"success_rates": [100, 80, 50, 25, 15], "downgrade_rates": [0, 0, 0, 0, 0]},
            "龙卷风": {"success_rates": [100, 60, 40, 20, 10], "downgrade_rates": [0, 0, 0, 0, 0]},
            "避重就轻": {"success_rates": [100, 40, 25, 15, 5], "downgrade_rates": [0, 0, 0, 25, 20]},
            "凌波微步": {"success_rates": [100, 10, 5, 4, 3], "downgrade_rates": [0, 0, 0, 0, 0]},
            "强健身躯": {"success_rates": [100, 10, 5, 4, 3], "downgrade_rates": [0, 0, 0, 0, 0]},
            "装死": {"success_rates": [100, 10, 5, 4, 3], "downgrade_rates": [0, 0, 0, 0, 0]},
            "血祭术": {"success_rates": [100, 50, 30, 15, 5], "downgrade_rates": [0, 0, 0, 20, 20]},
            "势如暴雨": {"success_rates": [100, 50, 30, 15, 5], "downgrade_rates": [0, 0, 0, 20, 20]},
            "晴天霹雳": {"success_rates": [100, 30, 15, 10, 5], "downgrade_rates": [0, 0, 0, 20, 20]},
            "企鹅挠痒": {"success_rates": [100, 30, 15, 10, 5], "downgrade_rates": [0, 0, 0, 20, 20]},
            "佛山无影脚": {"success_rates": [100, 20, 30, 15, 5], "downgrade_rates": [0, 0, 0, 20, 20]},
            "无影手": {"success_rates": [100, 30, 10, 8, 3], "downgrade_rates": [0, 0, 0, 20, 20]},


            # 可以继续添加其他武器的自定义率
        }
        self.weapon_stars = {weapon: tk.IntVar(value=0) for weapon in self.weapons}
        self.golden_scrolls = tk.IntVar(value=20000)
        self.auto_upgrade_jobs = {}
        self.current_page = 0
        self.weapons_per_page = 6

        self.create_widgets()

    def create_widgets(self):
        # 黄金卷轴数量
        scroll_frame = ttk.Frame(self.master)
        scroll_frame.pack(pady=10)
        scroll_label = ttk.Label(scroll_frame, text="黄金卷轴数量:")
        scroll_label.pack(side=tk.LEFT)
        self.scroll_display = ttk.Label(scroll_frame, textvariable=self.golden_scrolls, font=("Arial", 18))
        self.scroll_display.pack(side=tk.LEFT)

        # 武器升级区域
        self.weapon_frame = ttk.Frame(self.master)
        self.weapon_frame.pack(pady=5, fill=tk.X, padx=10)

        self.weapon_frames = {}
        self.create_weapon_frames()

        # 分页标签
        self.create_pagination()

        # 日志显示
        self.log_text = tk.Text(self.master, height=15, width=70)
        self.log_text.pack(pady=10)

        # 重置按钮
        reset_button = ttk.Button(self.master, text="重置", command=self.reset_weapons)
        reset_button.pack(pady=10)

    def create_pagination(self):
        pagination_frame = ttk.Frame(self.master)
        pagination_frame.pack(pady=5)

        total_pages = (len(self.weapons) + self.weapons_per_page - 1) // self.weapons_per_page
        for i in range(total_pages):
            btn = ttk.Button(pagination_frame, text=str(i + 1), command=lambda page=i: self.change_page(page))
            btn.pack(side=tk.LEFT, padx=2)

    def change_page(self, page):
        self.current_page = page
        self.update_weapon_display()

    def create_weapon_frames(self):
        for weapon in self.weapons:
            frame = ttk.Frame(self.weapon_frame)

            weapon_label = ttk.Label(frame, text=weapon, width=10)
            weapon_label.pack(side=tk.LEFT)

            star_display = self.create_star_display(frame, self.weapon_stars[weapon])
            star_display.pack(side=tk.LEFT, padx=10)

            button_frame = ttk.Frame(frame)
            button_frame.pack(side=tk.LEFT)

            upgrade_button = ttk.Button(button_frame, text="升级", command=lambda w=weapon: self.upgrade_weapon(w))
            upgrade_button.pack(side=tk.LEFT, padx=(0, 5))

            auto_upgrade_button = ttk.Button(button_frame, text="自动升级",
                                             command=lambda w=weapon: self.toggle_auto_upgrade(w))
            auto_upgrade_button.pack(side=tk.LEFT)

            max_level_label = ttk.Label(button_frame, text="大侠,你好厉害呀!", wraplength=150)
            max_level_label.pack()
            max_level_label.pack_forget()  # 初始时隐藏

            self.weapon_frames[weapon] = {
                "frame": frame,
                "upgrade_button": upgrade_button,
                "auto_upgrade_button": auto_upgrade_button,
                "max_level_label": max_level_label
            }

        self.update_weapon_display()

    def update_weapon_display(self):
        for widget in self.weapon_frame.winfo_children():
            widget.pack_forget()

        start = self.current_page * self.weapons_per_page
        end = start + self.weapons_per_page
        for weapon in self.weapons[start:end]:
            self.weapon_frames[weapon]["frame"].pack(pady=5, fill=tk.X)

    def create_star_display(self, parent, star_var):
        frame = ttk.Frame(parent)
        star_labels = []
        for _ in range(5):
            star_label = ttk.Label(frame, text="☆", font=("Arial", 16))
            star_label.pack(side=tk.LEFT)
            star_labels.append(star_label)

        def update_stars(*args):
            stars = star_var.get()
            for i, label in enumerate(star_labels):
                label.config(text="★" if i < stars else "☆")

        star_var.trace("w", update_stars)
        return frame

    def upgrade_weapon(self, weapon):
        current_star = self.weapon_stars[weapon].get()
        if current_star >= 5:
            return  # 武器已达到最高星级

        scrolls_needed = current_star + 1

        if self.golden_scrolls.get() < scrolls_needed:
            self.log_message(f"警告: 黄金卷轴不足!需要 {scrolls_needed} 个。")
            return

        success_rate, fail_rate, downgrade_rate = self.get_rates(weapon, current_star)

        self.golden_scrolls.set(self.golden_scrolls.get() - scrolls_needed)

        roll = random.random() * 100

        if roll < success_rate:
            new_star = current_star + 1
            self.weapon_stars[weapon].set(new_star)
            self.log_message(f"{weapon} 恭喜你,你的神器升级了!")
            if new_star == 5:
                self.disable_upgrade_buttons(weapon)
        elif roll < success_rate + fail_rate or weapon in ["板砖", "修心术"]:
            self.log_message(f"{weapon} 很遗憾,升级失败,请继续加油!")
        else:
            if current_star > 0:
                new_star = current_star - 1
                self.weapon_stars[weapon].set(new_star)
                self.log_message(f"{weapon} 神器锻造失败,等级下降了!")
            else:
                self.log_message(f"{weapon} 升星失败。保持 0 星")

    def disable_upgrade_buttons(self, weapon):
        upgrade_button = self.weapon_frames[weapon]["upgrade_button"]
        auto_upgrade_button = self.weapon_frames[weapon]["auto_upgrade_button"]
        max_level_label = self.weapon_frames[weapon]["max_level_label"]

        upgrade_button.pack_forget()
        auto_upgrade_button.pack_forget()
        max_level_label.pack()

        if weapon in self.auto_upgrade_jobs:
            self.master.after_cancel(self.auto_upgrade_jobs[weapon])
            del self.auto_upgrade_jobs[weapon]

    def get_rates(self, weapon, star):
        # 检查是否有自定义的成功率和降级率
        if weapon in self.custom_rates:
            custom_rates = self.custom_rates[weapon]
            if star < len(custom_rates["success_rates"]):
                success_rate = custom_rates["success_rates"][star]
                downgrade_rate = custom_rates["downgrade_rates"][star]
                fail_rate = 100 - success_rate - downgrade_rate
                return success_rate, fail_rate, downgrade_rate
        if weapon == "板砖":
            success_rates = [100, 100, 80, 80, 60]
            return success_rates[star], 100 - success_rates[star], 0
        elif weapon == "修心术":
            success_rates = [100, 80, 60, 40, 30]
            return success_rates[star], 100 - success_rates[star], 0
        elif star == 0:
            return 100, 0, 0
        elif star == 1:
            return 60, 40, 0
        elif star == 2:
            return 30, 70, 0
        elif star == 3:
            return 15, 60, 25
        elif star == 4:
            return 5, 70, 25
        else:
            return 0, 100, 0  # 防止意外情况

    def reset_weapons(self):
        for weapon in self.weapons:
            self.weapon_stars[weapon].set(0)
            upgrade_button = self.weapon_frames[weapon]["upgrade_button"]
            auto_upgrade_button = self.weapon_frames[weapon]["auto_upgrade_button"]
            max_level_label = self.weapon_frames[weapon]["max_level_label"]

            max_level_label.pack_forget()
            upgrade_button.pack(side=tk.LEFT, padx=(0, 5))
            auto_upgrade_button.pack(side=tk.LEFT)

            if weapon in self.auto_upgrade_jobs:
                self.master.after_cancel(self.auto_upgrade_jobs[weapon])
                del self.auto_upgrade_jobs[weapon]
                auto_upgrade_button.config(text="自动升级")

        self.golden_scrolls.set(20000)
        self.log_text.delete(1.0, tk.END)
        self.log_message("所有武器和卷轴已重置")

    def log_message(self, message):
        self.log_text.insert(tk.END, message + "\n")
        self.log_text.see(tk.END)

    def toggle_auto_upgrade(self, weapon):
        if weapon in self.auto_upgrade_jobs:
            self.master.after_cancel(self.auto_upgrade_jobs[weapon])
            del self.auto_upgrade_jobs[weapon]
            self.weapon_frames[weapon]["auto_upgrade_button"].config(text="自动升级")
        else:
            self.auto_upgrade(weapon)
            self.weapon_frames[weapon]["auto_upgrade_button"].config(text="停止自动")

    def auto_upgrade(self, weapon):
        if self.weapon_stars[weapon].get() < 5:
            self.upgrade_weapon(weapon)
            self.auto_upgrade_jobs[weapon] = self.master.after(10, lambda: self.auto_upgrade(weapon))
        else:
            self.disable_upgrade_buttons(weapon)

if __name__ == "__main__":
    root = tk.Tk()
    app = WeaponUpgradeApp(root)
    root.mainloop()

可以看出,嗜血最难升,武器普遍比技能好升,板砖和修心术最好升,高仿童年游戏q宠大乐斗中的黄金卷轴升星。

标签:upgrade,tkinter,success,畅享,self,重温,rates,star,weapon
From: https://blog.csdn.net/nmdbbzcl/article/details/142267247

相关文章

  • 揭秘!AE2024官方下载渠道+安装步骤,拒绝,畅享正版魅力!
    #揭秘!AE2024官方下载渠道+安装步骤,拒绝,畅享正版魅力!在数字创意领域,AdobeAfterEffects(简称AE)一直是视频特效和动态图形设计的首选工具。随着AE2024的发布,许多设计师和创意工作者都迫不及待地想要体验这一最新版本带来的新功能和改进。然而,在追求最新技术的同时,确保使用正版软件是......
  • python中Tkinter常用控件含义
    #python中Tkinter常用控件Button'按钮控件;在程序中显示按钮。'Canvas'画布控件;显示图形元素如线条或文本'Checkbutton'多选框控件;用于在程序中提供多项选择框'Entry'输入控件;用于显示简单的文本内容'Frame......
  • tkinter Text edit_undo()/edit_redo() 没反应解决方法
    问题tkinter.Text调用edit_undo()和edit_redo()没反应。问题分析这是因为没有设置Text的undo参数为True,设置后才能“激活”edit_undo()和edit_redo()。这个错误难发现是因为它没有报错,查了好多资料才发现……希望以后python官方能改进这点。解决方法fromtkinterimport*......
  • 从计组中从重温C中浮点数表示及C程序翻译过程
    目录移码​编辑 传统浮点表示格式浮点数的存储(ieee754)->修炼内功例子:  ​编辑浮点数取的过程  C程序翻译过程移码 传统浮点表示格式浮点数的存储(ieee754)->修炼内功根据国际标准IEEE(电⽓和电⼦⼯程协会) 32位例子:  64位  IEEE754对有效......
  • tkinter搭建GUI软件框架并创建不同的Frame界面实现不同的功能
    引言    在本篇博客中,小编要带大家解决的问题是如何创建一个软件窗口对象,并在窗口顶部菜单中通过按钮实现不同Frame界面的切换,在不同的Frame页面中实现访问路径等不同的功能,其中每行代码代表的意思,小编也在相应代码后面进行了注释,此外,代码在排版上也非常规范,各位小可爱......
  • 【每日一练】tkinter输入文本框实例
    """代码思路1.先创建一个文本框2.定义一个函数执行文本的获取和另一个文本框的赋值3.创建按钮,并调用函数4.创建另一个文本框"""importtkinterastkroot=tk.Tk()root.title("复制输入框")root.geometry("400x300+800+200")#创建一个输入文本框,显示为*的属性设......
  • 几分钟带你入门python GUI框架tkinter
    一、Tkinter是什么?Tkinter是Python的标准GUI库。Python与Tkinter结合使用时,提供了一种快速简便的方法来创建GUI应用程序。Tkinter为TkGUI工具包提供了一个强大的面向对象的接口。二、使用Tkinter创建GUI应用程序的基本步骤:1.安装python首先,确保你已经安......
  • tkinter基础组件——Button
    在tkinter中,Button组件用于在窗口上创建一个按钮,该按钮可以被点击以执行某个操作。下面具体介绍Button组件常用的属性和方法:一、常用属性1、text:按钮上显示的文本btn=tk.Button(app,text='Clickme')2、command:指定按钮被点击时要执行的回调函数btn=tk.Button(app......
  • 【基于python tkinter的本地音乐播放器优化版】
    系列文章目录本地音乐播放器初版本地小说阅读器初版本地小说阅读器优化版文章目录系列文章目录前言一、功能介绍二、使用注意项三、界面展示1)菜单分类:2)关键字搜索3)拓展项4)临时列表四、附件前言前面写了一文,学习开发本地音乐播放器,小试牛刀,界面小气、粗糙且羞涩......
  • MacOS 中 python无法正常使用turtle或tkinter 解决方案(备份文章)
    将以前在win机子上写的python文件拿到mac上复习时发现的问题直接运行turtle文件出现了以下报错原文:DEPRECATIONWARNING:ThesystemversionofTkisdeprecatedandmayberemovedinafuturerelease.Pleasedon’trelyonit.SetTK_SILENCE_DEPRECATION=1t......