问山海——天涯海角——桃花渊攻击顺序

文章目录

    • 桃花渊
    • 代码
    • 代码解读

桃花渊

规划击杀各个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_time=20, kill_time_turtle=20, kill_time_dragon=40):# 刷新时间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, start=1):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以获得奖励。

下面是对这个代码的详细解读:

  1. 首先,定义了一个format_time函数,该函数接受一个表示秒数的参数,并将其转换为"分钟:秒"的格式。

  2. 然后,定义了主要的函数calculate_kills_verbose,该函数接收四个参数:攻击顺序、移动时间、击杀龟将所需时间和击杀龟龙所需时间。其中,攻击顺序是一个列表,包含按顺序要击杀的boss的标识符。

  3. calculate_kills_verbose函数中,首先定义了两个字典:refresh_timesboss_notesrefresh_times字典存储每个boss的刷新时间,boss_notes字典存储每个boss的备注信息。

  4. 接着,初始化了一些变量,包括当前时间、各类boss的击杀数量,最后一次击杀每个boss的时间,以及用于记录击杀顺序的列表kill_sequence

  5. 然后,函数进入一个主循环,按照给定的顺序遍历并处理每个boss。在每次循环中,首先打印出当前时间和各个boss的剩余刷新时间,然后计算移动到下一个boss所需的时间,并增加当前时间。

  6. 对于每个boss,首先检查它是否已经刷新。如果已经刷新,那么就直接击杀它,并更新相关信息。如果还未刷新,那么需要等待其刷新,然后再击杀它。在等待过程中,会不断检查剩余的副本时间是否足够。

  7. 击杀完boss后,会打印出击杀后的当前时间和各个boss的剩余刷新时间。

  8. 在处理完所有boss或者副本时间结束后,函数会退出主循环,然后打印出整个副本过程中的击杀顺序,最后返回一个包含各类boss击杀数量的字典。

  9. print_boss_refresh_times函数是用来打印各个boss的剩余刷新时间的辅助函数。

  10. 在最后的部分,定义了一个攻击顺序,然后调用calculate_kills_verbose函数模拟副本过程,并打印出击杀结果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/679943.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

全面了解C语言宏的原理和应用

在C语言中&#xff0c;宏是一种强大的预处理指令&#xff0c;它允许程序员在编译之前对代码进行文本替换和处理。了解宏的原理和用法对于提高代码质量、减少编译时间以及避免潜在的错误至关重要。本文将详细解析C语言宏的原理&#xff0c;并通过实用示例帮助您更好地理解和应用…

HarmonyOS 状态管理装饰器 Observed与ObjectLink 处理嵌套对象/对象数组 结构双向绑定

本文 我们还是来说 两个 harmonyos 状态管理的装饰器 Observed与ObjectLink 他们是用于 嵌套对象 或者 以对象类型为数组元素 的数据结构 做双向同步的 之前 我们说过的 state和link 都无法捕捉到 这两种数据内部结构的变化 这里 我们模拟一个类数据结构 class Person{name:…

Java 学习和实践笔记(3)

安装和配置成功&#xff1a; 运行第一个程序时出现这个错误&#xff1a;javac不是内部或外部命令&#xff0c;也不是可运行的程序或批处理文件。 找到这篇文章看了下&#xff1a;javac 不是内部或外部命令&#xff0c;也不是可运行的程序 或批处理文件。_javac 不是内部或外部…

2024/2/12

分支、循环练习 1、选择题 1.1、以下程序的输出结果是____A____。 main() { int k11,k22,k33,x15; if(!k1) x--; else if(k2) if(k3) x4; else x3; printf(“x%d\n”,x); } A x4 B x15 C x14 D x3 1.2、有以下程序&#xff0c;while循环执行____A____次…

88.Go设计优雅的错误处理

文章目录 导言一、Go 的约定二、简单错误创建1、 errors.New()2、fmt.Errorf() 三、哨兵错误四、对错误进行编程1、优雅的错误处理设计2、与错误有关的的API 五、总结 导言 在 75.错误码设计、实现统一异常处理和封装统一返回结果 中&#xff0c;我们介绍了错误码的设计&#…

矩阵在计算机图像处理中的应用

矩阵在计算机图像处理中是非常核心的概念&#xff0c;因为它们为表示和操作图像数据提供了一种非常方便和强大的方式。以下是矩阵在计算机图像处理中的一些关键作用&#xff1a; 图像表示&#xff1a;在计算机中&#xff0c;图像通常被表示为像素矩阵&#xff0c;也就是二维数组…

假期day5

TCP UDP区别 共同点&#xff1a;都是属于传输层的协议 TCP&#xff1a;稳定。面向连接的&#xff0c;有可靠的数据传输服务。传输过程中数据无误&#xff0c;无丢失&#xff0c;无失序&#xff0c;无重复。传输效率低&#xff0c;耗费资源多。数据收发不同步&#xff0c;有沾…

【JavaScript】变量声明和赋值

文章目录 变量的声明1. 使用 var2. 使用 let3. 使用 const 变量的赋值变量的作用域最佳实践总结 在 JavaScript 中&#xff0c; 变量是我们存储和操作数据的关键。本篇博客将讨论 JavaScript 中的变量声明和赋值&#xff0c;涵盖不同的声明关键字、变量的作用域以及一些最佳实…

从源码学习final的使用

从源码学习final的使用 final的作用 ​ final字面意思&#xff0c;意为最终的、不可变的。在Java中&#xff0c;final可以用来修饰类、方法和变量&#xff0c;可以分别起到不同的作用。 final修饰类&#xff1a;表示该类不可以被继承&#xff1b;final修饰方法&#xff1a;表…

Netty Review - NioEventLoopGroup源码解析

文章目录 概述类继承关系源码分析小结 概述 EventLoopGroup bossGroup new NioEventLoopGroup(1); EventLoopGroup workerGroup new NioEventLoopGroup();这段代码是在使用Netty框架时常见的用法&#xff0c;用于创建两个不同的EventLoopGroup实例&#xff0c;一个用于处理连…

Educational Codeforces Round 1(远古edu计划)

A. 高斯求和&#xff0c;如果2次幂小于n就减2次 #include<bits/stdc.h> #define INF 1e9 using namespace std; typedef long long ll; const int N2e59; int a[N]; int f[N],vis[N]; ll sn(ll a1,ll an,ll num){return (a1an)*num/2;} void init(){f[1]1;for(int i2;i…

【Linux】内核中的链表

&#x1f525;博客主页&#xff1a;PannLZ &#x1f38b;系列专栏&#xff1a;《Linux系统之路》 &#x1f94a;不要让自己再留有遗憾&#xff0c;加油吧&#xff01; 文章目录 链表1.创建和初始化2.创建节点3.添加节点4.删除节点5.遍历 链表 内核开发者只实现了循环双链表&am…

Android 9.0 禁用adb install 安装app功能

1.前言 在9.0的系统产品定制化开发中,在进行一些定制开发中,对于一些app需要通过属性来控制禁止安装,比如adb install也不允许安装,所以就需要 熟悉adb install的安装流程,然后来禁用adb install安装功能,接下来分析下adb 下的安装流程 2.禁用adb install 安装app功能的…

1. pick gtk dll 程序的制作

文章目录 前言预览细节要点初始窗口尺寸提示音快速提示信息对话框AlertDialog鼠标移入移出事件布局与父子控件关系图片 后续源码及资源 前言 在之前的打包测试中我提到了需要一个挑选dll的程序于是我打算用Gtk来制作这个程序 预览 细节要点 初始窗口尺寸 只有主窗口有set_d…

unity显示图片

目录 创建c#脚本 自己创建gui组件&#xff1a; 入门教程&#xff1a; 读取图片&#xff1a; Unity读取图片并显示到UI中 显示双目相机&#xff0c;可以跑通 unity3d显示图片 参考教程&#xff0c;GameObject Unity UGUI的Image&#xff08;图片&#xff09;组件的介绍及…

基于无线传感器网络的LC-DANSE波束形成算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1LC-DANSE算法原理 4.2 LCMV算法原理 5.完整程序 1.程序功能描述 在无线传感器网络中&#xff0c;通过MATLAB对比LC-DANSE波束形成算法和LCMV波束形成算法。对比SNR&#xff0c;mse等指标…

Day45- 动态规划part13

一、最长递增子序列 题目一&#xff1a;300. 最长递增子序列​​​​​​​ ​​​​​​​300. 最长递增子序列 给你一个整数数组 nums &#xff0c;找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列&#xff0c;删除&#xff08;或不删除&#xff09;数…

Java中的IO介绍

本章内容 一 、File概念 File可以代表一个目录或者一个文件&#xff0c;并不能代表文件的内容 文件和流的区别&#xff1a;File关注的是文件本身的特征&#xff0c;如名称、路径、修改时间、大小。 流关注的是文件的内容。 二、File基本的操作 常见构造方法 | File(String p…

以用户为中心,酷开科技荣获“消费者服务之星”

在企业顺应消费升级的道路中&#xff0c;企业自身不仅要着力强化对于消费者服务意识的提升&#xff0c;并且要树立诚信自律的行业示范带头作用&#xff0c;助力消费环境稳中向好&#xff0c;不断满足人民群众对美好生活的期待。企业的发展需要消费者的认可&#xff0c;酷开科技…

算法刷题框架

前言&#xff1a;最近积累了一些算法题量&#xff0c;正在刷东神的算法笔记&#xff0c;监督自己记录下读后启发&#xff0c;顺便帮助道友们阅读 数据结构 这一部分老生常谈&#xff0c;数据的存储方式只有顺序存储和链式存储。 最基本的数组和链表对应这两者&#xff0c;栈…