该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
二、脚本中需要些什么 以PE10炮为例
#!/usr/bin/python #对mac/linux用户,可以点击脚本文件即运行
# -*- coding: utf-8 -*- #声明文字编码,在脚本用汉字时必备,全用英文也推荐写上
import threading,pvz #载入多线程模块与本帖模块
from pvz import * #可选,能够省略大部分pvz.xxxxx的前半部分。以下默认【使用了】该语句。
pvz.scene = 'PE' #标明场景,可选,默认PE。必须大写,只能在'PE' 'DE' 'RE'中选一个。
pvz.paoList = [(1,5),(6,5),(3,1),(4,1),(3,3),(4,3),(2,5),(5,5),(3,5),(4,5)] #必须,标明炮的位置
ChooseCard(2, 7, True) #imIceShroom
ChooseCard(2, 7) #IceShroom
ChooseCard(2, 8) #DoomShroom
ChooseCard(5, 4) #CoffeeBean
ChooseCard(1, 3) #CherryBomb
ChooseCard(3, 5) #Jalapeno
ChooseCard(3, 2) #Squash
ChooseCard(3, 1) #LilyPad
ChooseCard(4, 7) #Pumpkin
ChooseCard(2, 1) #PuffShroom
LetsRock()
#可选,选卡。楼主推荐把他分开,单独存在一个.py里面。
print('当前句柄 %s' % win32gui.GetWindowText(hwnd))
#在命令行中输出当前句柄(脚本所运行的窗口)的名称。当前句柄默认选择鼠标所在位置的,选错了脚本会无反应。
然后就是核心——炮要怎么打了。
我们可以先这样写:
for wave in range(1, 21): #range(x,y)得到的是[x,y)中的整数
preJudge(0) #实际上是反应炸,用一下预判以提高精度
sleep(5.5-3.73) #3.73是炮的飞行时间
Pao(2,8.1) #炸伴舞
Pao(5,8.1)
就可以了。
然后会遇到问题:第10波僵尸出生靠右,可能无法刷新
于是改为:
for wave in range(1, 21):
preJudge(0, wave%10 == 0) #用条件判断符的真假控制参数
sleep(5.5-3.73) #3.73是炮的飞行时间
if wave % 10 != 0 : #第1~9,11~19波
Pao(2,8.1) #python的层次是靠相同的空白符实现的
Pao(5,8.1)
else : #第10与20波
Pao(2,8.5)
Pao(5,8.5)
#ps:在贴吧只有使用全角空格' '才不会被吃(实际上是多个空白符被html认为成一个),但是这个不能在python中用于缩进!请自行替换成空格,或者从2楼提及的示例地址复制代码。
我们都用脚本了,当然要用炮炸珊瑚嘛,于是:
for wave in range(1, 21):
if wave == 20 :
preJudge(150, True)
Pao(4,6) #炮炸珊瑚
sleep(1.5) #记得两个分支的最终结束时间要一致
else :
preJudge(0, wave%10 == 0)
sleep(5.5-3.73)
if wave % 10 != 0 : #下同,略
.....
还差什么?第9波打完之后我们实际上还要用炮,但是现在这程序第10波会用第9波后面的两炮,因而我们需要:
for wave in range(1, 21):
...
else:
Pao(2,8.1)
Pao(5,8.1)
if(wave % 10 == 9):
pvz.nowPao += 4
pvz.nowPao是控制下一次打哪里的变量(这里pvz.必须带着),一般来说需要再用4炮,那就+4
好,现在我们用36行写好了一个PE10炮需要的【全部内容】。如果说把选卡和中间的空行去掉,那么只需要22行。