Python实现原神抽卡的方法

目录
  • 话不多说,直接贴所有代码
  • 运行效果
  • 需要用到的两张图片
  • 总结

话不多说,直接贴所有代码

import random
import sys
import tkinter as tk  # 导入一个第三方库,用于制作桌面软件
import tkinter.font as tf
# 数据部分
R = {
    "name": "R",
    "color": "blue",
    "size": "20",
    "font": "微软雅黑",
    "data": ["冷刃", "黑缨枪", "白缨枪", "翡玉法球", "飞天大御剑", "暗铁剑", "旅行剑", "钢轮弓",
             "吃鱼虎刀", "沾染龙血的剑", "以理服人", "异世界行记", "甲级宝钰", "翡玉法球"],
    "person": []
}
SR = {
    "name": "SR",
    "color": "purple",
    "size": "20",
    "font": "微软雅黑",
    "data": ["腐殖之剑", "祭礼剑", "西风剑", "试作斩岩", "笛剑", "螭骨剑", "钢轮弓", "西风猎弓",
             "钢轮弓", "绝弦", "祭礼弓", "万国诸海图谱", "匣里日月", "千岩古剑", "黑岩绯玉"],
    "person": ["香菱", "菲谢尔", "菲谢尔", "北斗", "芭芭拉", "北斗", "凝光", "托马", "重云",
              "砂糖", "烟绯", "安柏", "凯亚", "丽莎", "诺艾尔"]
}
SSR = {
    "name": "SSR",
    "color": "yellow",
    "size": "20",
    "font": "微软雅黑",
    "data": ["天空之卷", "四风原典", "天空之傲", "天空之脊", "风鹰剑", "风鹰剑", "狼的末路"],
    "person": ["迪卢克", "七七", "琴", "莫娜", "刻晴"]
}

ten_count = 0
ninety_count = 0
max_count = 0
person_up = "优菈"
data_up = "松籁响起之时"
ALL = [R, SR, SSR]
tag_id = "0"

# 单抽
def one():
    _res = get()
    count_flush(_res["level"], _res["thing"])
    insert_text(conf=_res["level"], message=_res["thing"])
    text.insert("end", "\n")
    text.see("end")

# 十连抽
def ten():
    text.tag_add('tag', "end")
    text.tag_config('tag', foreground="white")
    text.insert("end", "\nstart\n", 'tag')
    for i in range(10):
        one()
    text.insert("end", f"\nend{ten_count}/{ninety_count}/{max_count}\n", "tag")
    text.see("end")

# 根据抽奖出的物品index获取物品等级
def found(index):
    for i in ALL:
        if pool[index] in i["person"]:
            return i
        if pool[index] in i["data"]:
            return i

# 每次抽卡后刷新当前计数器
def count_flush(level, thing):
    global ten_count
    global ninety_count
    global max_count
    if level["name"] == "SR":
        ten_count = 0
    if level["name"] == "SSR":
        ninety_count = 0
    if level["name"] == "SSR" and ((thing in person_up) or (thing in data_up)):
        max_count = 0

# 抽卡规则
def get():
    global ten_count
    global ninety_count
    global max_count
    level = None
    ten_count += 1
    ninety_count += 1
    max_count += 1
    if ten_count == 10:
        level = SR
    if ninety_count == 90:
        level = SSR
    if level is SR or level is SSR:
        index = random.randrange(len(level[what]))
        thing = level[what][index]
    if max_count != ninety_count and level is SSR:
        level = SSR
        thing = person_up if what == "person" else data_up
    if max_count == 180:
        level = SSR
        thing = person_up if what == "person" else data_up
    if level is None:
        index = random.randrange(len(pool))
        level = found(index)
        thing = pool[index]
    return {
        "level": level,
        "thing": thing
    }

# 建立一个主窗口 root
root = tk.Tk()
# 设置窗口标题
root.title("原神模拟抽卡器")
# 设置单抽图片
image_one = tk.PhotoImage(file="单抽图片.png")
# 设置十连抽图片
image_ten = tk.PhotoImage(file="十连抽.png")
# 在窗口上创建一个按钮 button,用于单抽,它依赖于父窗口root
button_one = tk.Button(root, text="单抽", image=image_one, command=one)
button_ten = tk.Button(root, text="十连抽", image=image_ten, command=ten)
# 布局创建的按钮,rou代表行,column代表列
button_one.grid(row=0, column=0)
button_ten.grid(row=0, column=1)
# 创建一个文本框,用于打印抽奖日志
text = tk.Text(root, bg="black")
# columnspan代表合并两列
text.grid(row=1, columnspan=2)

# 添加日志到Text框
def insert_text(message, conf):
    global tag_id
    # 设置字体大小和颜色
    ft = tf.Font(family=conf["font"], size=conf["size"])
    text.tag_add('tag'+tag_id, "end")
    text.tag_config('tag'+tag_id, foreground=conf["color"], font=ft)
    text.insert("end", message + "\n", "tag"+tag_id)
    text.see("end")
    tag_id = str(int(tag_id) + 1)

# mian函数,程序会运行这里面的东西
if __name__ == '__main__':
    # 修改为武器抽武器池
    what = "角色"
    if what == "角色":
        what = "person"
    if what == "武器":
        what = "data"
    if what not in ["data", "person"]:
        sys.exit(1)
    # 把up角色和武器加入池
    SSR["data"].append(data_up)
    SSR["person"].append(person_up)
    # 合并在一个总池,实现概率,可以通过算法实现,难得弄..
    pool = list()
    for i in range(90):
        pool.extend(R["data"])
    for i in range(10):
        pool.extend(SR[what])
    pool.extend(SSR[what])
    # 运行窗口
    root.mainloop()

运行效果

需要用到的两张图片

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • SpringBoot调用python接口的实现步骤

    目录 一.前言 二.方法 1.代码 2.运行 一.前言 SpringBoot作为后端开发框架,有强大且方便的处理能力.但是作为一个结合数据分析+前台展示的网站来说,后端的数据处理模块使用python脚本要更加方便. 本文主要介绍如何利用Springboot框架调用python脚本 二.方法 其实一句话来说就是利用springboot(Java)中的命令行进行调用,直接上代码. 1.代码 python文件可以放在任意位置,但是如果后续需要进行部署的话建议放在springboot自带的静态文件夹目录

  • Python实现视频中添加音频工具详解

    目录 前言 环境依赖 主要代码 前言 本文提供在在无音频的视频中添加音频的python工具,附上代码. 环境依赖 ffmpeg环境安装,可以参考:windows ffmpeg安装部署 ffmpy安装: pip install ffmpy -i https://pypi.douban.com/simple 主要代码 不废话,上代码. #!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2021/12/5 1:49 # @Author :

  • Python实现如何根据文件后缀进行分类

    目录 使用os和shutil 读取目标文件夹下的所有文件 获取每一个文件的完整路径 分组之后的文件展示 获取分组之后的文件夹路径 移动文件到目标文件夹 完整代码 使用pathlib 使用Path读取文件夹下的文件 获取目标文件夹 移动文件 如下图所示的文件,我们按文件名后缀对文件进行分类 使用os和shutil 首先导入对应的模块,将目标文件夹和到分类到的文件夹定义 import os import shutil src_folder = 'E:\文档\要分类的文件' tar_folder =

  • Python实现照片卡通化

    目录 前言 环境部署 项目使用 景色类图像使用 人像类图像使用 总结 前言 之前看到一个有意思的开源项目,主要是可以将一张照片变成卡通漫画的风格.下面给大家放几张官方给出的部分效果图. 看到这个效果图,还是非常经验的.下面我会分享一下这个项目,并且选择一些我自己找的图片试验一下. 项目Github地址:github地址  环境部署 先使用git将项目下载下来.看一下项目结构. 我们看一下需要的环境. 非常简单,只要pytorch就可以了.如果有不太会安装的,可以参考:机器学习基础环境部署  项目

  • Python实现GIF动图以及视频卡通化详解

    目录 前言 环境依赖 核心代码 gif动图卡通化 视频卡通化 总结 前言 参考文章:Python实现照片卡通化 我继续魔改一下,让该模型可以支持将gif动图或者视频,也做成卡通化效果.毕竟一张图可以那就带边视频也可以,没毛病.所以继给次元壁来了一拳,我在加两脚. 项目github地址:github地址 环境依赖 除了参考文章中的依赖,还需要加一些其他依赖,requirements.txt如下: 其他环境不太清楚的,可以看我前言链接地址的文章,有具体说明. 核心代码 不废话了,先上gif代码. g

  • python 管理系统实现mysql交互的示例代码

    没配置的可以看一下我上一篇 地址 开启小皮 数据库text 数据库表 student 字段 student_no name age sex 效果图如下 增 删 查 改 用类的方法写了一下构造搞了半天 但搞出来了 修改那有个bug 修改玩了还卡在那输入一个不存在的学号就退出当前 回到主页面了 写着复盘 ''' 学生系统基本功能 增删查改 ''' import pymysql class Mysql(object): #初始化方法 def __init__(self): self.db = pymy

  • Python爬虫实现热门电影信息采集

    目录 一.前言 二.前期准备 1.使用的软件 2.需要用的模块 3.模块安装问题 4.如何配置pycharm里面的python解释器? 5.pycharm如何安装插件? 三.思路 1.明确需求 2.发送请求 3.获取数据 4.解析数据 5.保存数据 四.代码部分  一.前言 好不容易女神喊我去看电影,但是她又不知道看啥,那么我当然得准备准备~ 二.前期准备 1.使用的软件 python 3.8 开源 免费的 (统一 3.8) Pycharm YYDS python最好用的编辑器 不接受反驳- 2

  • Python实现图片与视频互转代码实战(亲测有效)

    一. 图片转视频 任务需求背景 在标注数据的过程中,需要[反复]浏览大量图片(万张以上的数量级),确认图片中的目标类别以及室内户型布局.但是,在电脑上浏览图片有很大的不足:(a)需要持续点击鼠标或者键盘:(b)图片加载跟不上点击速度. 值得注意的是:网上有很多代码(图片转视频),但是真正能用的几乎很少,本博文的代码经过测试,可以成功生成视频. 代码依赖库 opencv-python==4.5.2 numpy==1.19.2 glob(python自带模块) 代码实战 基本步骤如下: a. 使用g

  • Python+腾讯云服务器实现每日自动健康打卡

    目录 1.配置需要 2.实现功能 3.参考链接 4.linux服务器配置 5.代码部分 6.运行结果图 1.配置需要 python3.7,Chrome或者Edeg浏览器,Chrome驱动或者Edge驱动 #需要配置selenium库,baidu-aip库,pillOW库,在终端执行以下命令 pip install selenium pip install pillow pip install baidu-aip 2.实现功能 1.模拟登录说唱大学微服务,需要百度OCR智能识别API接口识别验证码

  • Python实现原神抽卡的方法

    目录 话不多说,直接贴所有代码 运行效果 需要用到的两张图片 总结 话不多说,直接贴所有代码 import random import sys import tkinter as tk # 导入一个第三方库,用于制作桌面软件 import tkinter.font as tf # 数据部分 R = { "name": "R", "color": "blue", "size": "20",

  • python通过ffmgep从视频中抽帧的方法

    如下所示: ffmpeg中文文档:http://linux.51yip.com/search/ffmpeg ffmpeg -i test_baofeng.wmv -y -f image2 -ss 00:00:03 -vframes 1 myframe.jpg ffmpeg -i test.mp4 -y -f mjpeg -ss 3 -t 1 test1.jpg -f fmt 强迫采用格式fmt -I filename 输入文件 -y 覆盖输出文件 -t duration 设置纪录时间 hh:mm

  • 基于C语言编写一个简单的抽卡小游戏

    目录 效果图展示 开始的界面 输入1 输入10 输入0 实现代码 test4.26.c 许愿.c game.h 下载 小奔最近学了C语言不少的东西,但是想用学到的东西来搞一个小游戏. 不过小奔就不做那些猜数字等小游戏了,虽然很经典,但是可以尝试一下其他比较好玩的. 小奔喜欢玩原神,但它抽卡系统的中奖概率太低了,所以就类似做一个它的抽卡系统吧,不过没有保底功能哦(小奔还不想搞,还要学习新的知识,不过以后熟练了就可能会搞一个),是全角色抽卡,只有角色没有武器的,可以十连抽,没有保底功能,抽中的概率只

  • Python正则抓取网易新闻的方法示例

    本文实例讲述了Python正则抓取网易新闻的方法.分享给大家供大家参考,具体如下: 自己写了些关于抓取网易新闻的爬虫,发现其网页源代码与网页的评论根本就对不上,所以,采用了抓包工具得到了其评论的隐藏地址(每个浏览器都有自己的抓包工具,都可以用来分析网站) 如果仔细观察的话就会发现,有一个特殊的,那么这个就是自己想要的了 然后打开链接就可以找到相关的评论内容了.(下图为第一页内容) 接下来就是代码了(也照着大神的改改写写了). #coding=utf-8 import urllib2 import

  • 利用python模拟实现POST请求提交图片的方法

    本文主要给大家介绍的是关于利用python模拟实现POST请求提交图片的方法,分享出来供大家参考学习,下面来一看看详细的介绍: 使用requests来模拟HTTP请求本来是一件非常轻松的事情,比如上传图片来说,简单的几行代码即可: import requests files = {'attachment_file': ('1.png', open('1.png', 'rb'), 'image/png', {})} values = {'next':"http://www.xxxx.com/xxx

  • Python实现求笛卡尔乘积的方法

    本文实例讲述了Python实现求笛卡尔乘积的方法.分享给大家供大家参考,具体如下: 在数学中,两个集合X和Y的笛卡尓乘积(Cartesian product),又称直积,表示为X × Y,第一个对象是X的成员而第二个对象是Y的所有可能有序对的其中一个成员.假设集合A={a,b},集合B={0,1,2},则两个集合的笛卡尔积为{(a,0), (a,1), (a,2), (b,0), (b,1), (b, 2)}.有时我们需要在python求两个list的笛卡尔乘积,其实很简单,一行代码搞定. 例如

  • Python调用命令行进度条的方法

    本文实例讲述了Python调用命令行进度条的方法.分享给大家供大家参考.具体分析如下: 关键点是输出'\r'这个字符可以使光标回到一行的开头,这时输出其它内容就会将原内容覆盖. import time import sys def progress_test(): bar_length=20 for percent in xrange(0, 100): hashes = '#' * int(percent/100.0 * bar_length) spaces = ' ' * (bar_lengt

  • python 禁止函数修改列表的实现方法

    有时候,需要禁止函数修改列表.例如要对裂变进行修改操作,也要保留原来的未打印的设计列表,以供备案.为解决这个问题,可向函数传递列表的副本而不是原件:这样函数所做的任何修改都只影响副本,而丝毫不影响原件. function_name(list_name[:]) 8-9 魔术师 魔术师 :创建一个包含魔术师名字的列表,并将其传递给一个名为show_magicians() 的函数,这个函数打印列表中每个魔术师的名字. 8-10 了不起的魔术师 了不起的魔术师 :在你为完成练习 8-9编写一个名为mak

  • Python 给某个文件名添加时间戳的方法

    问题描述: 1.(先添加时间戳,再复制移动,两个文件加下面的文件名都被修改)将 /home/kangle/webdata/JPEGImages 路径下的111.jpg文件添加当前时刻的时间戳 重命名为类似2018-03-27-18-11-11_111.jpg的形式,而且保存到另外一个路径/home/kangle/result下 import datetime nowTime = datetime.datetime.now().strftime('%Y-%m-%d-%H-%M-%S') # 现在

  • python爬取拉勾网职位数据的方法

    今天写的这篇文章是关于python爬虫简单的一个使用,选取的爬取对象是著名的招聘网站--拉钩网,由于和大家的职业息息相关,所以爬取拉钩的数据进行分析,对于职业规划和求职时的信息提供有很大的帮助. 完成的效果 爬取数据只是第一步,怎样使用和分析数据也是一大重点,当然这不是本次博客的目的,由于本次只是一个上手的爬虫程序,所以我们的最终目的只是爬取到拉钩网的职位信息,然后保存到Mysql数据库中.最后中的效果示意图如下: 控制台输入 数据库显示 准备工作 首先需要安装python,这个网上已经有很多的

随机推荐