Example #1
0
        /// <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);
                            }
                        }
                    }
                }
            }
        }
Example #2
0
        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);
                        }
                    }
                }
            }
        }
Example #3
0
    /// <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);
    }
Example #4
0
        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);
            }
        }
Example #5
0
        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);
            }
        }
Example #6
0
    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);
    }