Python编写原神抽卡模拟器(附源码)- Blog12
目录
发疯文学
跳转正文
导包,初始化:
眨眼补帧
伪随机
计算平均出金次数
Pygame主程序
觉得有帮助的小伙伴还请点个关注
发疯文学
你说的对,但是《原神》是由米哈游自主研发的一款全新开放世界冒险游戏。游戏发生在一个被称作「提瓦特」的幻想世界,在这里,被神选中的人将被授予「神之眼」,导引元素之力。你将扮演一位名为「旅行者」的神秘角色,在自由的旅行中邂逅性格各异、能力独特的同伴们,和他们一起击败强敌,找回失散的亲人——同时,逐步发掘「原神」的真相。
你说得对,但这是一个原神的时代,我想,我是不是真的太贪心了?于是今天我调整了心态开始玩原神。
锄大地时我爆了蓝面具。众所周知蓝面具=3绿面具=45尘辉=3抽的副产物。即使是副产物也足显米哈游的慷慨,于是我原地跪下跪了五分钟。以此类推绿面具就是一抽的副产物。也有相当的价值,由于锄地爆率还不错,我把桌子腿全锯了方便我一直跪在地上玩游戏也能够到电脑。
走到半路发现了以前漏了的箱,开箱得了2原石,原石是付费代币,付费代币等于人民币,这是米哈游在慷慨的给我发钱,我一时难忍激动,当场给米哈游了磕个头。
开了esc菜单发现昨天邮件没领,点开就是100原石,100原石!我要开50个箱子!就是需要我磕50个头!我觉得单纯磕头已经不能表达我的感激了,于是我沐浴更衣给米哈游上了香郑重的磕了三个头。
woc!随便一抽就是双金!
原之巅,傲世间,有我原神便有天;
罪州前,双膝下,原神救我传天下;
语之巅,劝世间,看我原神劝翻天;
坟之巅,葬世间,待我原神挖穿天;
3A尽头谁为峰,一身荣耀是原神;
纵使我需背负骂名,一只手拖住tx水军。我原神,一样不无敌于世间!
——————————————————
醒醒,这不是在玩游戏!这是抽卡模拟器!
跳转正文
导包,初始化:
import random
import pygame
import sys
import time
pygame.init()
要在python中实现动画效果,除了pyplot的animation,最方便的莫过于pygame了。。。
核心代码也就是下面这两行:
眨眼补帧
time.sleep(0.1)
pygame.display.update()
然后写入原神抽卡项目名称,使用random.randint(0,1000)实现一个伪随机,原神五星抽卡期望暂定为网上公认的73,当抽卡数量到达一定数时,概率开始递增,使期望维持在73附近。
不妨想象一个坐标轴:
以及:
可以用条件逻辑大致实现。
伪随机
def random_main():
results = []
x = 6
y = 57
count = 0
si = 1
wu = 0
wu_list = []
c0 = ''
delta = 0
for t0 in range(1):
#c0 = input("回车以继续, q键退出抽卡:")
if c0 == '':
z = input("请输入抽取次数:")
for t1 in range(int(z)):
c = random.randint(0, 1000)
if wu <= 73:
if c >= 0 and c <= x: #五星
c_ = random.choice([1, 2])
if delta != 0 or c_ == 2:
result = up[0]
delta = 0
else:
result = random.choice(kachi_wu)
delta += 1
print(f"{result}\t\t555")
wu_list.append(wu)
results.append(result)
wu_.append(result)
si += 1
wu = 0
count += 1
elif c > x and c <= y:
result = random.choice(kachi_si)
print(f"{result}\t\t444")
results.append(result)
si = 0
wu += 1
count += 1
elif c > y and c <= 1000:
if si == 10:
result = random.choice(kachi_si)
print(f"{result}\t\t444")
results.append(result)
si = 0
wu += 1
count += 1
else:
result = random.choice(kachi_san)
print(f"{result}\t\t333")
results.append(result)
si += 1
wu += 1
count += 1
elif wu > 73:
x += 58
y += 58
if c >= 0 and c <= x: # 五星
c_ = random.choice([1, 2])
if delta != 0 or c_ == 2:
result = up[0]
delta = 0
else:
result = random.choice(kachi_wu)
delta += 1
print(f"{result}\t\t555")
results.append(result)
si += 1
wu_list.append(wu)
wu_.append(result)
wu = 0
count += 1
x = 6
y = 57
elif c > x and c <= y:
if wu != 90:
result = random.choice(kachi_si)
print(f"{result}\t\t444")
results.append(result)
si = 0
wu += 1
count += 1
else:
result = random.choice(kachi_wu)
print(f"{result}\t\t555")
results.append(result)
si += 1
wu_list.append(wu)
wu = 0
count += 1
x = 6
y = 57
elif c > y and c <= 1000:
if wu == 90 and si != 10:
result = random.choice(kachi_wu)
print(f"{result}\t\t555")
results.append(result)
si += 1
wu_list.append(wu)
wu = 0
count += 1
x = 6
y = 57
elif wu != 90 and si == 10:
result = random.choice(kachi_si)
print(f"{result}\t\t444")
results.append(result)
si = 0
wu += 1
count += 1
elif wu == 90 and si == 10:
result = random.choice(kachi_wu)
print(f"{result}\t\t555")
results.append(result)
si += 0
wu_list.append(wu)
wu = 0
count += 1
x = 6
y = 57
else:
result = random.choice(kachi_san)
print(f"{result}\t\t333")
results.append(result)
si += 1
wu += 1
count += 1
print(results)
#elif c0 == 'q':
print(wu_list)
print(f"平均{average(wu_list)}发出金")
print(wu_)
计算平均出金次数
#提取五星名称
wu_ = []
def average(list):
wu_list = list
sum = 0
for t in range(len(wu_list)):
sum += wu_list[t]
return sum / len(wu_list)
Pygame主程序
screen_width = 768
screen_height = 432
img_ku = []
screen = pygame.display.set_mode((screen_width, screen_height))
events = pygame.event.get()
pygame.display.set_caption("原神抽卡器")
screen.fill((50, 50, 90))
font = pygame.font.Font('freesansbold.ttf', 28)
while True:
pygame.display.flip()
event = pygame.event.get()
if event == pygame.QUIT:
sys.exit()
try:
random_main()
except:
pass
i = 1
for x in range(34): #分四种情形遍历四种不同列表 可以直接跟在后面用条件语句遍历输出
if event == pygame.QUIT:
sys.exit()
file_name = f"{i}.jpg"
pic = pygame.image.load(file_name)
screen.blit(pic, (0, 0))
i += 1
time.sleep(0.1)
pygame.display.update()
#text = f"Please enter the time \nhow much you wanna try \nfrom your keyboard!"
#score_render = font.render(text, True, (255, 0, 0))
#screen.blit(score_render, (50, 50))
#pygame.display.update()
#t = input()
lis = ['35.jpg', '36.jpg']
file_ = random.choice(lis)
pic_ = pygame.image.load(file_)
screen.blit(pic_, (0, 0))
pygame.display.update()
time.sleep(1)
pygame.display.update()
我们原神玩家是这样的
觉得有帮助的小伙伴还请点个关注
后续会持续分享 免费、高质量 的高校相关以及Python学习文章
作者:总得跑一个