/// <summary> /// Be conquerant spread everywhere in order to dominate the battle field /// </summary> void SpreadCuzItsFun() { // find a home which is mine IHome[] myHomes = m_Gameboard.GetHomes(TeamId, true); IHome[] theirHomes = m_Gameboard.GetHomes(TeamId, false); List <IHome> enemyHomes = SortEnemyHomes(theirHomes); foreach (IHome myHome in myHomes) { if (myHome.BoldiCount > 49) { foreach (IHome enemyHome in enemyHomes) { if (enemyHome.BoldiCount != 0 && myHome.BoldiCount / enemyHome.BoldiCount >= 2) { if (myHomes.Length > 0 && theirHomes.Length > 0) { IHome from = myHome; IHome to = enemyHome; EAmount amount = (EAmount.Half); LaunchBoldies(from, to, amount); } } } } } }
void LaunchSpread() { // find a home which is mine IHome[] myHomes = m_Gameboard.GetHomes(TeamId, true); IHome[] theirHomes = m_Gameboard.GetHomes(TeamId, false); List <IHome> neutralBoldiesPerHome = new List <IHome>(); List <IHome> enemiesBoldiesPerHome = new List <IHome>(); foreach (var myHome in myHomes) { foreach (var theirHome in theirHomes) { if (theirHome.TeamId == -1) { neutralBoldiesPerHome.Add(theirHome); } enemiesBoldiesPerHome.Add(theirHome); } foreach (var neutralBoldiesPerHom in neutralBoldiesPerHome) { if (neutralBoldiesPerHom.BoldiCount != 0 && myHome.BoldiCount / neutralBoldiesPerHom.BoldiCount >= 2 && myHome.BoldiCount > neutralBoldiesPerHom.BoldiCount || neutralBoldiesPerHom.BoldiCount == 0) { if (myHomes.Length > 0 && theirHomes.Length > 0) { IHome from = myHome; IHome to = neutralBoldiesPerHom; EAmount amount = (EAmount.ThreeQuarter); LaunchBoldies(from, to, amount); } } } foreach (var enemiesBoldiesPerHom in enemiesBoldiesPerHome) { if (enemiesBoldiesPerHom.BoldiCount != 0 && myHome.BoldiCount / enemiesBoldiesPerHom.BoldiCount >= 2 && myHome.BoldiCount > enemiesBoldiesPerHom.BoldiCount || enemiesBoldiesPerHom.BoldiCount == 0) { if (myHomes.Length > 0 && theirHomes.Length > 0) { IHome from = myHome; IHome to = enemiesBoldiesPerHom; EAmount amount = (EAmount.ThreeQuarter); LaunchBoldies(from, to, amount); } } } } }
/// <summary> /// /// </summary> /// <param name="from"></param> /// <param name="to"></param> /// <param name="amount"></param> protected void LaunchBoldies(IHome from, IHome to, EAmount amount) { // error control if (from == null) { XKLog.LogRed("Error", "AIBase.LaunchBodies() failed - (IHome)from is null"); return; } from.LaunchBoldies(to, amount, this); }
void LaunchBoldies(EAmount amount) { // find a home which is mine IHome[] myHomes = m_Gameboard.GetHomes(TeamId, true); IHome[] theirHomes = m_Gameboard.GetHomes(TeamId, false); // launch boldies if (myHomes.Length > 0 && theirHomes.Length > 0) { LaunchBoldies(myHomes[0], theirHomes[0], amount); } }
void LaunchRandom() { // find a home which is mine IHome[] myHomes = m_Gameboard.GetHomes(TeamId, true); IHome[] theirHomes = m_Gameboard.GetHomes(TeamId, false); // launch boldies if (myHomes.Length > 0 && theirHomes.Length > 0) { IHome from = myHomes[Lehmer.Range(0, myHomes.Length)]; IHome to = theirHomes[Lehmer.Range(0, theirHomes.Length)]; EAmount amount = (EAmount)Lehmer.Range(0, (int)EAmount.Count); LaunchBoldies(from, to, amount); } }
bool IHome.LaunchBoldies(IHome to, EAmount amount, AIBase ai) { // error control if (TeamId < 0) { XKLog.Log("Error", "Home.LaunchBodies() failed - home does not belong to any team"); return(false); } // error control if (TeamId != ai.TeamId) { XKLog.LogRed("Error", "Home.LaunchBodies() failed - Wrong AI asked a move from unowned Home, are you such a cheater? - " + ai.GetType().ToString()); return(false); } // error control if (to == null) { XKLog.LogRed("Error", "Home.LaunchBodies() failed - (IHome)to is null"); return(false); } // avoid StackOverFlow exception if (!CanLaunchBoldies((Home)to)) { return(false); } // compute boldiCount to launch int boldiCount = m_BoldiCount; switch (amount) { case EAmount.Quarter: boldiCount = (int)(m_BoldiCount * 0.25f); break; case EAmount.Half: boldiCount = (int)(m_BoldiCount * 0.5f); break; case EAmount.ThreeQuarter: boldiCount = (int)(m_BoldiCount * 0.75f); break; } // launch them if (!m_ToLaunch.ContainsKey((Home)to)) { m_ToLaunch.Add((Home)to, boldiCount); } else { m_ToLaunch[(Home)to] += boldiCount; } // notify who wants to listen m_Gameboard.OnBoldiLaunch(this, to); return(true); }