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);
? ? ? ? }
? ? }
}
// 發(fā)炮
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) //變速關(guān)下半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) //快速關(guān)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? pao_operator.pao({{2, 8}, {5, 8}});
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ? Delay(3476 / 4);
? ? ? ? ? ? TimePao(w, m);
? ? ? ? } });
}
// 慢速關(guān),白眼關(guān),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);
}
// 變速關(guān),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);
}
// 快速關(guān),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);
}
// 有紅有桿關(guān),墊紅眼,撐桿靠近時,場上無墊不墊(撐桿僵尸還差一個手上是否有桿子的判定)
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);
? ? ? ? ? ? }
? ? ? ? }
? ? }
}
// 有紅無桿關(guān),墊紅眼,只在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);
? ? ? ? ? ? }
? ? ? ? }
? ? }
}
// 有丑關(guān),墊小丑,由于在岸路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列墊材,繼續(xù)在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);
? ? ? ? }
? ? }
}
// 快速關(guān)修炮
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);
? ? }
}