总览
PS:在Steam的指南里面写这玩意儿失败了,一直报错code 15,所以就只能放在站台里面了。
在做DDLC+全成就的时候发现了需要靠概率才能刷出来的收集要素秘密10(the 10th secret poem),其出现概率低得令人发指,导致刷出来的时间从5分钟到十多个小时不等。我个人自认脸黑且懒,但是既然是DDLC就不得不全成就,所以自己写了些代码来实现反复进入游戏的过程。最终在33分钟重复了115次后连续刷出了两次秘密10,看上去还行。
所以现在将程序代码进行修枝完善后发布,给同样对运气没有信心但是还想要收集的玩家一些帮助。
代码简介
代码由python写成,非常简单,实现鼠标的移动单击和截屏保存。代码不包括任何网络通讯功能。逻辑如下:
从游戏的OS界面(游戏中模拟电脑的画面)单击心跳文学部进入DDLC,待人物立绘出现后截屏。对于截屏的某一个特定像素进行颜色分析,若颜色为黑色,则刷出了秘密10,保存截屏,程序退出。若为原来的颜色,则退出DDLC回到OS界面再进入DDLC循环。
准备工作
DDLC
1.DDLC进入第二周目,首次见到Monika后就可以保存退出。
2.DDLC分辨率调整到1920×1080并全屏。
电脑
1.安装Python Welcome to Python.org
2.使用pip安装pyautogui(控制鼠标)和pillow(图像截屏和分析)
3.分辨率调整到1920×1080(我的电脑是这样的分辨率,鼠标的移动也是按照该分辨率设置的)
运行
代码需要在游戏全屏进行时运行。可以在游戏全屏的时候按Windows键从下面任务栏调出没有最大化的编辑器或文件管理器。注意调出的编辑器或文件管理器不能遮挡游戏的OS界面菜单选项。
对于有编程经验的人可以直接用熟手的编辑器来运行代码。
对于没有编程经验的人可以创建一个txt文件,将代码粘贴保存后文件更名为example.py(注意把txt的后缀改成py),然后在代码保存的文件夹下创建一个txt文件,粘贴以下代码:
python example.py
保存文件后文件更名为1.bat。双击文件运行程序。
结果
如果吃完饭看完电影回来发现画面停在了OS界面,则秘密10已经刷到,可以在shortcut里面找到截图和刷图用时以及刷图的次数。
如果页面停在了游戏的设置画面,则在点击进入游戏时出现了问题,需要稍微加长while下面四行的两个duration参数。
代码
import pyautogui as ui
from PIL import ImageGrab
from PIL import Image
import time
import os
path = './shortcut/'
if not os.path.exists(path=path): #创建文件夹保存截图 #create a folder to save shortcut
os.mkdir(path=path)
i = 1
time0 = time.time()
while(i):
ui.moveTo(200,480,duration=1.7) #点击开机键
ui.leftClick(200,480)
ui.moveTo(200,470,duration=0.3) #enter DDLC
ui.leftClick(200,470)
ui.moveTo(150,900,duration=5) #等待开屏动画 #5s game loading
pic = ImageGrab.grab()
pic.save(path + '0_'+str(i) + '.jpg') #截图保存格言 #save monologue
ui.moveTo(150,900,duration=0.5)
ui.moveTo(150,900,duration=4) #等待立绘动画 #load menu
pic = ImageGrab.grab() #立绘截图 #get characters image from menu
ui.moveTo(150,900,duration=0) #退出DDLC #exit DDLC and back to OS
ui.leftClick(150,900)
img = pic.convert('RGB')
color = img.getpixel((1600,680)) #截取图中某点的像素 #get pixel from characters image (actually from Monika)
if color != (166,132,143): #判断色素是否正常,不正常则保存立绘并退出自动程序
filePath = os.path.join(path,'test.txt')#check the color of the pixel, if black then save the ghost menu and cease the script
with open(filePath,'w') as f:
f.write(f'It took {(time.time()-time0)//1}s and repeated for {i} times')
pic.save(path + str(i) + '.jpg') #截图
break
ui.leftClick(850,600)#确认退出
i = i + 1