阅读 179

Python实现原神抽卡的方法

这篇文章主要为大家介绍了Python实现原神抽卡的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助

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

  • 运行效果

  • 需要用到的两张图片

  • 总结

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
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()

运行效果

在这里插入图片描述


需要用到的两张图片

在这里插入图片描述

在这里插入图片描述

总结

本篇文章就到这里了,希望能够给你带来帮助

原文链接:https://blog.csdn.net/qq_41256425/article/details/121731159


文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。