利用python实现原神自动化弹琴

2023-11-10 00:50

本文主要是介绍利用python实现原神自动化弹琴,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

不多说,直接上代码

import time
import win32api
import win32conclass Genmu:def __init__(self):self.notes = self.create_notes()#创建音阶字符def create_notes(self):key1 = list(' QWERTYU')key2 = list(' ASDFGHJ')key3 = list(' ZXCVBNM')notes = [key1, key2, key3]#返回ASCII编码return [[ord(char) for char in inner_list] for inner_list in notes]def create_time(self, sp):#定义各种音符的时长,这里的3和6是另外定义的一种音符长度na = [1, 2, 4, 8, 16, 6, 3]t4 = 60.0/spt2 = t4 * 2t1 = t2 * 2t8 = t4 / 2t16 = t8 / 2t6 = t4 + t8t3 = t1 +t4ti = [t1, t2, t4, t8, t16, t6, t3]return dict(zip(na, ti))def press1(self, vk_code, duration):win32api.keybd_event(vk_code, win32api.MapVirtualKey(vk_code, 0), 0, 0)  # 模拟按下按键time.sleep(duration)  # 持续按下按键win32api.keybd_event(vk_code, win32api.MapVirtualKey(vk_code, 0), win32con.KEYEVENTF_KEYUP, 0)  # 模拟松开按键def press2(self, vk1, vk2, duration):win32api.keybd_event(vk1, win32api.MapVirtualKey(vk1, 0), 0, 0)win32api.keybd_event(vk2, win32api.MapVirtualKey(vk2, 0), 0, 0)time.sleep(duration)  # 持续按下按键win32api.keybd_event(vk1, win32api.MapVirtualKey(vk1, 0), win32con.KEYEVENTF_KEYUP, 0)win32api.keybd_event(vk2, win32api.MapVirtualKey(vk2, 0), win32con.KEYEVENTF_KEYUP, 0)def create_music(self, path):#音符列表content = []music = []#读取乐谱with open(path, 'r') as file:for line in file:line = line.split()content.append(line)content = [[text.split(',') for text in sublist] for sublist in content]content = [item for sublist in content for item in sublist]content = [[int(char) for char in sublist] for sublist in content]# 定义节拍时间self.t = self.create_time(content[0][0])for ind in content[1:]:if len(ind)==3:note = self.notes[ind[0]][ind[1]]duration = self.t[ind[2]]music.append((1, note, duration))elif len(ind)==5:n1 = self.notes[ind[0]][ind[1]]n2 = self.notes[ind[2]][ind[3]]duration = self.t[ind[4]]music.append((2, n1, n2, duration))return musicdef play(self, path):#创建乐谱self.music = self.create_music(path)print(self.music)#准备time.sleep(2)print('beginning!')#开始演奏for ind in self.music[1:]:if(ind[0])==1:self.press1(ind[1], ind[2])elif(ind[0])==2:self.press2(ind[1], ind[2], ind[3])music = Genmu()
music.play('music.txt')

切记,运行时要在用管理员模式打开cmd,在里面运行

python 你的文件位置

运行时候立马点进游戏里

再说乐谱文件的格式

这里第一个代表速度

后面如果是3个,第一个代表风物之诗琴的第几行,第二个代表音乐音高(1-7),第3个为节拍

如果是5个,最后一个代表节拍,前4个两个一组

这里提供一个我已经写好的一个,《废狱摇篮曲》

156
1,1,8
1,6,8
0,1,8
1,7,8
0,1,8
0,3,8
1,3,8
1,6,8
0,1,8
1,3,8
1,7,8
0,2,8
1,3,8
1,6,8
0,1,8
1,7,8
0,1,8
0,3,8
1,3,8
1,6,8
0,1,8
1,3,8
1,7,8
0,2,8
1,1,8
1,6,8
0,1,8
1,7,8
0,1,8
0,3,8
1,3,8
1,6,8
0,1,8
1,3,8
1,7,8
0,2,8
1,3,8
1,6,8
0,1,8
1,7,8
0,1,8
0,3,8
1,3,8
1,6,8
0,1,8
1,3,8
1,7,8
0,2,8
1,2,2,6,2
1,2,8
1,3,8
1,4,1,2,4
1,4,8
1,5,8
1,6,4
1,5,1,3,6
1,6,8
1,4,4
1,3,1,1,6
1,4,8
1,3,4
1,2,2,6,2
1,2,8
1,3,8
1,4,1,2,4
1,6,4
0,1,4
0,2,1,6,6
0,3,8
0,1,4
1,7,1,5,6
0,1,8
1,7,4
1,6,1,3,2
1,6,4
0,1,4
0,2,1,6,6
0,3,8
0,1,4
1,7,1,5,6
1,6,8
1,5,4
1,6,1,4,6
1,2,8
1,6,4
1,5,1,3,4
1,4,4
1,3,4
1,2,2,6,2
1,4,8
1,6,8
1,5,1,1,2
1,5,4
1,4,1,2,6
1,3,8
1,4,4
1,2,2,6,6
1,2,2,6,4
1,2,2,6,8
1,3,1,1,8
1,4,1,2,4
1,4,1,2,8
1,5,1,3,8
1,6,1,4,4
1,5,1,3,6
1,6,8
1,4,1,2,4
1,3,1,1,6
1,4,8
1,3,1,1,4
1,2,2,6,6
1,2,2,6,8
1,3,1,1,8
1,4,1,2,4
1,6,1,4,4
0,1,1,6,4
0,2,1,6,6
0,3,8
0,1,1,4,4
1,7,1,5,6
0,1,8
1,7,1,5,4
1,6,1,3,6
1,6,1,3,4
0,1,1,6,4
0,2,1,6,6
0,3,8
0,1,1,6,4
1,7,1,5,6
1,6,8
1,5,1,2,4
1,6,1,4,6
1,2,8
1,6,1,4,4
1,5,1,3,4
1,4,1,2,4
1,3,1,1,4
1,2,2,6,6
1,4,8
1,6,8
1,5,1,1,4
1,4,1,1,4
1,3,1,1,4
1,2,2,6,4

这篇关于利用python实现原神自动化弹琴的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/379444

相关文章

springboot+redis实现订单过期(超时取消)功能的方法详解

《springboot+redis实现订单过期(超时取消)功能的方法详解》在SpringBoot中使用Redis实现订单过期(超时取消)功能,有多种成熟方案,本文为大家整理了几个详细方法,文中的示例代... 目录一、Redis键过期回调方案(推荐)1. 配置Redis监听器2. 监听键过期事件3. Redi

SpringBoot全局异常拦截与自定义错误页面实现过程解读

《SpringBoot全局异常拦截与自定义错误页面实现过程解读》本文介绍了SpringBoot中全局异常拦截与自定义错误页面的实现方法,包括异常的分类、SpringBoot默认异常处理机制、全局异常拦... 目录一、引言二、Spring Boot异常处理基础2.1 异常的分类2.2 Spring Boot默

基于SpringBoot实现分布式锁的三种方法

《基于SpringBoot实现分布式锁的三种方法》这篇文章主要为大家详细介绍了基于SpringBoot实现分布式锁的三种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、基于Redis原生命令实现分布式锁1. 基础版Redis分布式锁2. 可重入锁实现二、使用Redisso

SpringBoo WebFlux+MongoDB实现非阻塞API过程

《SpringBooWebFlux+MongoDB实现非阻塞API过程》本文介绍了如何使用SpringBootWebFlux和MongoDB实现非阻塞API,通过响应式编程提高系统的吞吐量和响应性能... 目录一、引言二、响应式编程基础2.1 响应式编程概念2.2 响应式编程的优势2.3 响应式编程相关技术

浅析python如何去掉字符串中最后一个字符

《浅析python如何去掉字符串中最后一个字符》在Python中,字符串是不可变对象,因此无法直接修改原字符串,但可以通过生成新字符串的方式去掉最后一个字符,本文整理了三种高效方法,希望对大家有所帮助... 目录方法1:切片操作(最推荐)方法2:长度计算索引方法3:拼接剩余字符(不推荐,仅作演示)关键注意事

C#实现将XML数据自动化地写入Excel文件

《C#实现将XML数据自动化地写入Excel文件》在现代企业级应用中,数据处理与报表生成是核心环节,本文将深入探讨如何利用C#和一款优秀的库,将XML数据自动化地写入Excel文件,有需要的小伙伴可以... 目录理解XML数据结构与Excel的对应关系引入高效工具:使用Spire.XLS for .NETC

Nginx更新SSL证书的实现步骤

《Nginx更新SSL证书的实现步骤》本文主要介绍了Nginx更新SSL证书的实现步骤,包括下载新证书、备份旧证书、配置新证书、验证配置及遇到问题时的解决方法,感兴趣的了解一下... 目录1 下载最新的SSL证书文件2 备份旧的SSL证书文件3 配置新证书4 验证配置5 遇到的http://www.cppc

python版本切换工具pyenv的安装及用法

《python版本切换工具pyenv的安装及用法》Pyenv是管理Python版本的最佳工具之一,特别适合开发者和需要切换多个Python版本的用户,:本文主要介绍python版本切换工具pyen... 目录Pyenv 是什么?安装 Pyenv(MACOS)使用 Homebrew:配置 shell(zsh

Nginx之https证书配置实现

《Nginx之https证书配置实现》本文主要介绍了Nginx之https证书配置的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起... 目录背景介绍为什么不能部署在 IIS 或 NAT 设备上?具体实现证书获取nginx配置扩展结果验证

Java利用Spire.XLS for Java自动化设置Excel的文档属性

《Java利用Spire.XLSforJava自动化设置Excel的文档属性》一个专业的Excel文件,其文档属性往往能大大提升文件的可管理性和可检索性,下面我们就来看看Java如何使用Spire... 目录Spire.XLS for Java 库介绍与安装Java 设置内置的 Excel 文档属性Java