网站建设的重要,建设银行官网首页网站南山片区,网站建设phpcms,有特效的网站文章目录 桃花渊代码代码解读 桃花渊
规划击杀各个boss顺序。
副本持续时间为30分钟#xff0c;每个地方的boss被打死后#xff0c;需要一定时间才能重新刷新。
只考虑其中两种boss#xff0c;龟将和龟龙。各有四个。
其中我从一个boss地点到达另一个boss地点移动时间为… 文章目录 桃花渊代码代码解读 桃花渊
规划击杀各个boss顺序。
副本持续时间为30分钟每个地方的boss被打死后需要一定时间才能重新刷新。
只考虑其中两种boss龟将和龟龙。各有四个。
其中我从一个boss地点到达另一个boss地点移动时间为20秒。作为变量可设
我击杀龟龙需要时间40秒击杀龟将时间需要20秒。作为变量可设
四个龟将被击杀后下一次刷新所需时间分别为9:55 12:55 14:55 17:55 四个龟龙被击杀后下一次刷新所需时间分别为22:55 25:55 27:55 31:55
规划攻打顺序击杀最大数量boss。
代码
from itertools import permutationsdef format_time(seconds):将时间从秒转换为分:秒的格式return f{seconds // 60}分{seconds % 60}秒def calculate_kills_verbose(order, move_time20, kill_time_turtle20, kill_time_dragon40):# 刷新时间refresh_times {J1: 9*60 55,J2: 12*60 55,J3: 14*60 55,J4: 17*60 55,L1: 22*60 55,L2: 25*60 55,L3: 27*60 55,L4: 31*60 55,}# Boss备注信息boss_notes {J1: 右下角龟将,J2: 右上角龟将,J3: 左上角龟将,J4: 左下角龟将,L1: 右下角龟龙,L2: 左下角龟龙,L3: 右上角龟龙,L4: 左上角龟龙}# 初始化变量current_time 0kills {J: 0, L: 0}last_kill_time {key: -refresh_times[key]for key in refresh_times} # 记录每个boss上次被击杀的时间kill_sequence [] # 新增用于记录击杀顺序for boss in order:if current_time 30*60: # 副本时间结束print(副本时间已结束)break# 打印攻击前Boss的剩余刷新时间print_boss_refresh_times(current_time, last_kill_time, refresh_times, boss_notes)current_time move_time # 移动到下一个boss# 计算击杀时间kill_time kill_time_turtle if boss.startswith(J) else kill_time_dragon# 获取Boss备注note boss_notes.get(boss, ) # 如果Boss没有备注则默认为空字符串# 检查boss是否刷新if current_time - last_kill_time[boss] refresh_times[boss]:# 如果已经刷新则击杀bossprint(f\n攻击{boss} ({note}), 剩余时间: {format_time(30*60 - current_time)}\n)kill_sequence.append(note) # 新增记录击杀顺序current_time kill_timekills[boss[0]] 1last_kill_time[boss] current_timeelse:# 如果还未刷新则计算等待时间wait_time refresh_times[boss] - \(current_time - last_kill_time[boss])if current_time wait_time kill_time 30*60:print(f{boss} ({note}) 刷新所需时间超过剩余副本时间无法继续击杀)break # 剩余时间不够等待此boss刷新print(f\n等待{boss} ({note}) 刷新, 需要等待{format_time(wait_time)}, 剩余时间: {format_time(30*60 - (current_time wait_time))}\n)kill_sequence.append(note) # 新增记录击杀顺序current_time wait_time kill_timekills[boss[0]] 1last_kill_time[boss] current_time# 打印攻击后Boss的剩余刷新时间print_boss_refresh_times(current_time, last_kill_time, refresh_times, boss_notes)print(\n----------------------------------------------------------------------------------------------------------------------------------------------------\n)# 函数结束前打印击杀顺序print(\n击杀顺序汇总)for i, kill in enumerate(kill_sequence, start1):print(f{i}. {kill})return killsdef print_boss_refresh_times(current_time, last_kill_time, refresh_times, boss_notes):for boss, refresh_time in refresh_times.items():time_since_last_kill current_time - last_kill_time[boss]if time_since_last_kill refresh_time:remaining_time refresh_time - time_since_last_killprint(f{boss} ({boss_notes[boss]}) 剩余刷新时间: {format_time(remaining_time)})else:print(f{boss} ({boss_notes[boss]}) 已刷新)# 输入攻击顺序
order [J2, J1, L1, L2, J4, J3,L4, L3, J2, J1, J3, J1, J4, J2, L1, L2]result calculate_kills_verbose(order)
print(f\n击杀总结击杀龟将数量{result[J]}, 击杀龟龙数量{result[L]})
代码解读
这个代码主要实现了一个计算和模拟游戏中的“副本”击杀策略的功能。在这个游戏中有两种类型的boss龟将和龟龙每种boss有不同的刷新时间并分布在地图的不同位置。玩家需要在一定的时间内尽可能多地击杀boss以获得奖励。
下面是对这个代码的详细解读 首先定义了一个format_time函数该函数接受一个表示秒数的参数并将其转换为分钟:秒的格式。 然后定义了主要的函数calculate_kills_verbose该函数接收四个参数攻击顺序、移动时间、击杀龟将所需时间和击杀龟龙所需时间。其中攻击顺序是一个列表包含按顺序要击杀的boss的标识符。 在calculate_kills_verbose函数中首先定义了两个字典refresh_times和boss_notes。refresh_times字典存储每个boss的刷新时间boss_notes字典存储每个boss的备注信息。 接着初始化了一些变量包括当前时间、各类boss的击杀数量最后一次击杀每个boss的时间以及用于记录击杀顺序的列表kill_sequence。 然后函数进入一个主循环按照给定的顺序遍历并处理每个boss。在每次循环中首先打印出当前时间和各个boss的剩余刷新时间然后计算移动到下一个boss所需的时间并增加当前时间。 对于每个boss首先检查它是否已经刷新。如果已经刷新那么就直接击杀它并更新相关信息。如果还未刷新那么需要等待其刷新然后再击杀它。在等待过程中会不断检查剩余的副本时间是否足够。 击杀完boss后会打印出击杀后的当前时间和各个boss的剩余刷新时间。 在处理完所有boss或者副本时间结束后函数会退出主循环然后打印出整个副本过程中的击杀顺序最后返回一个包含各类boss击杀数量的字典。 print_boss_refresh_times函数是用来打印各个boss的剩余刷新时间的辅助函数。 在最后的部分定义了一个攻击顺序然后调用calculate_kills_verbose函数模拟副本过程并打印出击杀结果。