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