PE.后置八炮(废稿,不再翻修)
#include <avz.h>
using namespace AvZ;
TickRunner TC_1;
TickRunner TC_2;
TickRunner TC_3;
TickRunner TC_4;
TickRunner TS_1;
TickRunner TB;
TickRunner gloom_shroom_user;
PlantFixer pumpkin_fixer;
PlantFixer fume_shroom_fixer;
PlantFixer lily_pad_fixer;
// 判定前场僵尸
bool IsZBBeforeExist()
{
bool result = false;
auto zombie = GetMainObject()->zombieArray();
for (int index = 0; index < GetMainObject()->zombieTotal(); ++index)
{
if (zombie[index].isExist() &&
!zombie[index].isDead() &&
zombie[index].abscissa() > 320)
{
result = true;
}
}
return result;
}
// 判定僵尸
bool IsZBExist(ZombieType type, int row, int abs_1, int abs_2, int hp)
{
bool result = false;
auto zombie = GetMainObject()->zombieArray();
for (int index = 0; index < GetMainObject()->zombieTotal(); ++index)
{
if (zombie[index].type() == type &&
zombie[index].isExist() &&
!zombie[index].isDead() &&
zombie[index].row() == row - 1 &&
zombie[index].abscissa() > abs_1 && zombie[index].abscissa() < abs_2 &&
zombie[index].hp() >= hp &&
zombie[index].state() != 70)
{
result = true;
}
}
return result;
}
// 智能用卡
void SafeCard(PlantType type, int r, int c)
{
auto seed = GetMainObject()->seedArray();
if (seed[GetCardIndex(type)].isUsable())
{
if (GetPlantIndex(r, c) == -1)
{
SetInsertOperation(false);
Card(type, r, c);
SetInsertOperation(true);
}
}
}
// 发炮
void TimePao(int w, int m)
{
InsertOperation([=]()
{
if (GetMainObject()->wave() < w + 1)
{
SetNowTime();
if (!(GetMainObject()->wave() == w && GetMainObject()->refreshCountdown() < 200 + 373) && IsZBBeforeExist())
{
if (m == 1) //通常
{
pao_operator.pao({{2, 7.0125}, {5, 7.0125}});
}
else if (m == 2) //变速关下半F
{
if (!IsZombieExist(32)) // 场上没有红眼,炸点前移
{
pao_operator.pao({{2, 8}, {5, 8}});
}
else
{
pao_operator.pao({{2, 7.0125}, {5, 7.0125}});
}
}
else if (m == 3) //快速关
{
pao_operator.pao({{2, 8}, {5, 8}});
}
}
Delay(3476 / 4);
TimePao(w, m);
} });
}
// 慢速关,白眼关,T4
void P_1()
{
SetTime(3476 / 4 - 200 - 373, 1);
pao_operator.pao({{2, 7.0125}, {5, 7.0125}});
Delay(3476 / 4);
TimePao(9, 1);
SetTime(3476 / 4 - 200 - 373, 10);
pao_operator.pao({{2, 7.5}, {5, 7.5}});
Delay(3476 / 4);
TimePao(19, 1);
SetTime(3476 / 4 - 200 - 373, 20);
pao_operator.pao({{2, 7.5}, {5, 7.5}});
Delay(3476 / 4);
TimePao(20, 1);
}
// 变速关,T4,w10以后,场上没有红眼,炸点前移
void P_2()
{
SetTime(3476 / 4 - 200 - 373, 1);
pao_operator.pao({{2, 8}, {5, 8}});
Delay(3476 / 4);
TimePao(9, 1);
SetTime(3476 / 4 - 200 - 373, 10);
pao_operator.pao({{2, 8}, {5, 8}});
Delay(3476 / 4);
TimePao(19, 2);
SetTime(3476 / 4 - 200 - 373, 20);
pao_operator.pao({{2, 8}, {5, 8}});
Delay(3476 / 4);
TimePao(20, 1);
}
// 快速关,T4
void P_3()
{
SetTime(3476 / 4 - 200 - 373, 1);
pao_operator.pao({{2, 8}, {5, 8}});
Delay(3476 / 4);
TimePao(9, 3);
SetTime(3476 / 4 - 200 - 373, 10);
pao_operator.pao({{2, 8}, {5, 8}});
Delay(3476 / 4);
TimePao(19, 3);
SetTime(3476 / 4 - 200 - 373, 20);
pao_operator.pao({{2, 8}, {5, 8}});
Delay(3476 / 4);
TimePao(20, 3);
}
// 有红有杆关,垫红眼,撑杆靠近时,场上无垫不垫(撑杆僵尸还差一个手上是否有杆子的判定)
void C_1()
{
for (int r : {1, 6, 2, 5})
{
if (IsZBExist(GIGA_GARGANTUAR, r, 410, 520, 200) && !IsZBExist(POLE_VAULTING_ZOMBIE, r, 369, 525, 0))
{
for (PlantType type : {PUFF_SHROOM, M_PUFF_SHROOM})
{
SafeCard(type, r, 6);
}
}
}
}
// 有红无杆关,垫红眼,只在6列垫
void C_2()
{
for (int r : {1, 2, 5, 6})
{
if (IsZBExist(GIGA_GARGANTUAR, r, 426, 505, 200))
{
for (PlantType type : {PUFF_SHROOM, M_PUFF_SHROOM})
{
SafeCard(type, r, 6);
}
}
}
}
// 有丑关,垫小丑,由于在岸路7列垫,不考虑撑杆
void C_3()
{
for (int r : {2, 5})
{
if (IsZBExist(JACK_IN_THE_BOX_ZOMBIE, r, 530, 550, 200))
{
for (PlantType type : {PUFF_SHROOM, M_PUFF_SHROOM, FUME_SHROOM})
{
SafeCard(type, r, 7);
}
}
}
}
// 炸点前移时,垫漏掉的伴舞
void C_4()
{
for (int r : {1, 6})
{
if (IsZBExist(BACKUP_DANCER, r, 400, 440, 0))
{
for (PlantType type : {PUFF_SHROOM, M_PUFF_SHROOM})
{
SafeCard(type, r, 6);
}
}
}
}
// 垫边路快速僵尸,在7列垫,如果边路撑杆跳过7列垫材,继续在6列垫撑杆
void C_5()
{
}
// 窝瓜,压即将进家的跳跳
void SQU()
{
}
// 铲子,撑杆靠近时,有垫铲垫,铲6列垫
void S_1()
{
for (int r : {1, 2, 5, 6})
{
if (IsZBExist(POLE_VAULTING_ZOMBIE, r, 369, 525, 0))
{
if (GetPlantIndex(r, 6) != -1)
{
ShovelNotInQueue(r, 6);
}
}
}
}
// 三叶草r1c1
void BLO()
{
for (int row : {1, 2, 3, 4, 5, 6})
{
if (IsZBExist(BALLOON_ZOMBIE, row, 0, 10, 0))
{
SafeCard(BLOVER, 1, 1);
}
}
}
// 快速关修炮
void FixPao()
{
}
// 补曾主体
void PlantGloomShroom(int r, int c)
{
auto gloom_shroom = GetMainObject()->seedArray() + GetSeedIndex(GLOOM_SHROOM);
if (GetPlantIndex(r, c, 10) > -1)
{
SafeCard(GLOOM_SHROOM, r, c);
}
}
// 补曾位置
void FixGloomShroom()
{
PlantGloomShroom(3, 6);
PlantGloomShroom(4, 6);
}
void Script()
{
OpenMultipleEffective('X', MAIN_UI_OR_FIGHT_UI);
SelectCards({PUFF_SHROOM, M_PUFF_SHROOM, BLOVER, PUMPKIN, KERNEL_PULT, COB_CANNON, COFFEE_BEAN, LILY_PAD, FUME_SHROOM, GLOOM_SHROOM});
/*SkipTick([=]()
{ return true; });*/
pumpkin_fixer.start(PUMPKIN, {{3, 5}, {3, 6}, {4, 5}, {4, 6}}, 2000);
lily_pad_fixer.start(LILY_PAD, {{3, 6}, {4, 6}}, 0);
fume_shroom_fixer.start(FUME_SHROOM, {{3, 6}, {4, 6}}, 0);
gloom_shroom_user.pushFunc(FixGloomShroom);
SetTime(-599, 1);
pao_operator.autoGetPaoList();
Shovel({{1, 6}, {2, 6}, {5, 6}, {6, 6}, {1, 7}, {2, 7}, {5, 7}, {6, 7}});
auto zt = GetMainObject()->zombieTypeList();
if (zt[GARGANTUAR])
{
P_1();
}
else
{
if (zt[GIGA_GARGANTUAR])
{
P_2();
}
else
{
P_3();
}
}
if (zt[GIGA_GARGANTUAR])
{
if (zt[POLE_VAULTING_ZOMBIE])
{
TC_1.pushFunc(C_1);
}
else
{
TC_2.pushFunc(C_2);
}
}
if (zt[JACK_IN_THE_BOX_ZOMBIE])
{
TC_3.pushFunc(C_3);
}
if (!zt[GARGANTUAR] && zt[DANCING_ZOMBIE])
{
TC_4.pushFunc(C_4);
}
if (zt[POLE_VAULTING_ZOMBIE])
{
TS_1.pushFunc(S_1);
}
if (zt[BALLOON_ZOMBIE])
{
TB.pushFunc(BLO);
}
}