崩坏3水晶计算 关于日期的计算篇 上

这篇文章应该是面向崩坏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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值