这篇文章应该是面向崩坏3的游戏玩家
首先要计算与目标天数之间有多少的日常和周常活动
from time import strftime #调用关于时间的库,用于时间的计算
import math
def time(Time_difference):
#获取本地时间 年 月 日 星期
tm_Year = int(strftime('%Y'))
tm_Month = int(strftime('%m'))
tm_Day = int(strftime('%d'))
tm_Week = int(strftime('%w'))
if tm_Week == 0: #星期日表示的数字是 0 在这里转换成容易理解的 7
tm_Week = 7
else:
pass
Battle_open = [] #创建意思为 记忆战场开放日期的集合
Battle_end = [] #创建意思为 记忆战场关闭日期的集合
Abyss_open = [] #创建意思为 深渊开放日期的集合
Abyss_end = [] #创建意思为 深渊关闭日期的集合
#下文中 battle 就是战场的意思 abyss 就是深渊的意思 crystal 就是水晶的意思
Start_month = 'not-28-day' #判定首月是否为28天
Standard_Month = 0 #判定是否为标准月(这是我瞎定义的,主要是为了方便计算签到的奖励 其实无关紧要 我是将大于等于29天标记为标准月)
Standard_not_Month = 0 #判定非标准月的数量
#标准月和非标准月
#判定首月的结束日期,也就是说一个月有几天
if tm_Month in (1,3,5,7,8,10,12):
Month_over = 31
elif tm_Month == 2:
if (tm_Year % 4 == 0 and tm_Year % 100 != 0) or (tm_Year % 4 == 0):
Month_over = 29
else:
Month_over = 28
Start_month = '28-day'
else:
Month_over = 30
#判定tm_Month的月末日期
#传递变量用于后续在循环中进行计算
tm_future_Year = tm_Year
tm_future_Month = tm_Month
tm_future_Day = tm_Day + Time_difference
now_Day = tm_Day
now_Year = tm_Year
now_Month = tm_Month #仅在下方while中使用
first_month = 'yes' #判定是否要跨月计算
last_month = 'no' #判定是否要跨月计算
#定义这两个属性是为了后面计算深渊和战场在首月与末月的开放结束次数
same_year = 'yes' #判定是否要跨月计算
while tm_future_Day > Month_over: #当末天数通过简单的加法求得发现比这个月的末天数多
#为了整体连贯性,重新判定月末 在第一次循环后也能据需为计算服务
if now_Month in (1,3,5,7,8,10,12):
Month_over = 31
if (first_month == 'yes' and last_month =='no') or (first_month == 'no' and last_month == 'yes'): #这个判定式确实有点诡异 这是用来计算除了首月和末月,之间经过了几个标准月和非标准月
pass
else:
Standard_Month += 1
elif now_Month == 2:
if (tm_Year % 4 == 0 and tm_Year % 100 != 0) or (tm_Year % 4 == 0):
Month_over = 29
if (first_month == 'yes' and last_month == 'no') or (first_month == 'no' and last_month == 'yes'): #同上
pass
else:
Standard_Month += 1
else:
Month_over = 28
if (first_month == 'yes' and last_month == 'no') or (first_month == 'no' and last_month == 'yes'): #同上
pass
else:
Standard_not_Month += 1 #由于末天数是28天,所以是非标准月
else:
Month_over = 30
if (first_month == 'yes' and last_month == 'no') or (first_month == 'no' and last_month == 'yes'):
pass
else:
Standard_Month += 1
tm_future_Day = tm_future_Day - Month_over
tm_future_Month += 1
now_Month = tm_future_Month
first_month = 'no'
#这后面的判定式是用来将一个月多余的天数减去 比如 现在29号了,计算天数是30天,这个月是30
if tm_future_Month in (1,3,5,7,8,10,12):
Month_over = 31
elif tm_future_Month == 2:
if (tm_Year % 4 == 0 and tm_Year % 100 != 0) or (tm_Year % 4 == 0):
Month_over = 29
else:
Month_over = 28
else:
Month_over = 30
if tm_future_Day <= Month_over:
last_month = 'yes'
else:
pass
if tm_future_Month > 12:
tm_future_Year += 1
tm_future_Month = tm_future_Month - 12
now_Month = tm_future_Month
else:
pass
if (first_month == 'yes') and (last_month == 'no'):
same_month = 'yes'
else:
same_month = 'no'
#判定'first_month'和'last_month'的Sing_in_Crystal_times
Sign_in_Crystal_times = 0
free_Card = 0
#判定first_month和last_month的签到
if same_month == 'no':
if Start_month == 'not-28-day':
if tm_Day in (1,2,3,4,5):
Sign_in_Crystal_times += 7
free_Card += 1
elif tm_Day in (6,7):
Sign_in_Crystal_times += 6
free_Card += 1
elif tm_Day in (8,9,10,11,12):
Sign_in_Crystal_times += 5
free_Card += 1
elif tm_Day in (13,14):
Sign_in_Crystal_times += 4
free_Card += 1
elif tm_Day in (15,16,17,18,19):
Sign_in_Crystal_times += 3
free_Card += 1
elif tm_Day in (20,21):
Sign_in_Crystal_times += 2
free_Card += 1
elif tm_Day in (22,23,24,25,26):
Sign_in_Crystal_times += 1
free_Card += 1
elif tm_Day in (27,28):
Sign_in_Crystal_times += 1
else:
pass
else:
if tm_Day in (1,2,3,4,5):
Sign_in_Crystal_times += 6
free_Card += 1
elif tm_Day in (6,7):
Sign_in_Crystal_times += 5
free_Card += 1
elif tm_Day in (8,9,10,11,12):
Sign_in_Crystal_times += 4
free_Card += 1
elif tm_Day in (13,14):
Sign_in_Crystal_times += 3
free_Card += 1
elif tm_Day in (15,16,17,18,19):
Sign_in_Crystal_times += 2
free_Card += 1
elif tm_Day in (20,21):
Sign_in_Crystal_times += 1
elif tm_Day in (22,23,24,25,26):
free_Card += 1
else:
pass
if tm_future_Day in (1,2,3,4,5):
Sign_in_Crystal_times += 1
elif tm_future_Day in (6,7):
Sign_in_Crystal_times += 2
elif tm_future_Day in (8,9,10,11,12):
Sign_in_Crystal_times += 3
elif tm_future_Day in (13,14):
Sign_in_Crystal_times += 4
elif tm_future_Day in (15,16,17,18,19):
Sign_in_Crystal_times += 5
elif tm_future_Day in (20,21):
Sign_in_Crystal_times += 6
elif tm_future_Day in (22,23,24,25,26):
Sign_in_Crystal_times += 7
elif tm_future_Day in (27,28):
Sign_in_Crystal_times += 7
free_Card += 1
elif tm_future_Day in (29,30,31):
Sign_in_Crystal_times += 8
free_Card += 1
else:
pass
else:
new = 0
for day in range(1,Time_difference + 1):
Day = tm_Day + day
if new in (6,8,13,15,20,22,29):
Sign_in_Crystal_times += 1
elif new == 27:
free_Card += 1
else:
pass
Sign_in_Crystal_times = Standard_Month*8 + Standard_not_Month*7 + Sign_in_Crystal_times
free_Card = Standard_Month + Standard_not_Month + free_Card
#每周任务
Battle_open_times = 0
Battle_Crystal_times = 0
Abyss_open_times = 0
Abyss_Crystal_times = 0
t_M = tm_Month
t_Y = tm_Year
def yue(t_M):
if t_M in (1,3,5,7,8,10,12):
M_o = 31
elif t_M == 2:
if (t_Y % 4 == 0 and t_Y % 100 != 0) or (t_Y % 4 == 0):
M_o = 29
else:
M_o = 28
else:
M_o = 30
return M_o
for week in range(1,Time_difference + 1):
Week = (tm_Week + week)%7
t = tm_Day + week
M_o = yue(t_M)
#战场和深渊(battle/abyss)
if Week == 1:
Battle_open_times += 1
Abyss_open_times += 1
while t > int(M_o):
M_o = yue(t_M)
t -= int(M_o)
t_M += 1
if t_M > 12:
t_M -= 12
t_Y += 1
else:
pass
M_o = yue(t_M)
Battle_open.append(str(t_Y)+'-'+str(t_M)+'-'+str(t))
Abyss_open.append(str(t_Y)+'-'+str(t_M)+'-'+str(t))
t_M = tm_Month
t_Y = tm_Year
elif Week == 3:
Battle_Crystal_times += 1
while t > int(M_o):
M_o = yue(t_M)
t = t - M_o
t_M += 1
if t_M > 12:
t_M -= 12
t_Y += 1
else:
pass
M_o = yue(t_M)
Battle_end.append(str(t_Y)+'-'+str(t_M)+'-'+str(t))
t_M = tm_Month
t_Y = tm_Year
elif Week == 5:
Abyss_open_times += 1
while t > int(M_o):
M_o = yue(t_M)
t = t - M_o
t_M += 1
if t_M > 12:
t_M -= 12
t_Y += 1
else:
pass
M_o = yue(t_M)
Abyss_open.append(str(t_Y)+'-'+str(t_M)+'-'+str(t))
t_M = tm_Month
t_Y = tm_Year
elif Week in (4,0):
Abyss_Crystal_times += 1
while t > int(M_o):
M_o = yue(t_M)
t = t - M_o
t_M += 1
if t_M > 12:
t_M -= 12
t_Y += 1
else:
pass
M_o = yue(t_M)
Abyss_end.append(str(t_Y)+'-'+str(t_M)+'-'+str(t))
t_M = tm_Month
t_Y = tm_Year
else:
pass
tips = 'tips:不包括进行中的活动'
#测试使用
print('\n\n\n未来'+str(Time_difference)+'天内\n-----------------------------------------------')
print('签到水晶奖励次数:' + str(Sign_in_Crystal_times)+'次\n\n')
print('签到补给卡次数:'+str(free_Card)+'次\n\n')
print('战场开放次数:'+str(Battle_open_times)+'次\n\n')
print('战场获得奖励次数:'+str(Battle_Crystal_times)+'次\n\n')
print('深渊开放次数:'+str(Abyss_open_times)+'次\n\n')
print('深渊结算次数:'+str(Abyss_Crystal_times)+'次\n\n')
t = '\n\n未来'+str(Time_difference)+'天内\n------------------------\n'+'签到水晶奖励次数:' + str(Sign_in_Crystal_times)+'次\n\n'+'签到补给卡次数:'+str(free_Card)+'次\n\n'+'战场开放次数:'+str(Battle_open_times)+'次\n\n'+'战场获得奖励次数:'+str(Battle_Crystal_times)+'次\n\n'+'深渊开放次数:'+str(Abyss_open_times)+'次\n\n'+'深渊结算次数:'+str(Abyss_Crystal_times)+'次\n\n'+'tips:不包括进行中的活动'
return t,Abyss_open,Abyss_end,Battle_open,Battle_end,Abyss_Crystal_times,Battle_Crystal_times,Sign_in_Crystal_times
我知道,我写的有点臃肿,但是可读性比较高(或许吧)。我将他定义成方法,准备在总方法中引用。这样写的原因是我修bug修怕了。 下篇传送门
tips:洋洋洒洒数千字,结果篇幅不够给割了,剩下的只能在下一篇中放出来了(懵逼)
时间 2020/2/22