本文主要是介绍利用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实现原神自动化弹琴的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!