private void GameLogic()
    {
        Display();

        //Working out if both teams are alive
        dire    = 0;
        radiant = 0;

        foreach (ResourceBuilding RB in m.mines)
        {
            if (RB.FactionType == Faction.Dire)
            {
                dire++;
            }
            else
            {
                radiant++;
            }
        }

        foreach (FactoryBuilding FB in m.factories)
        {
            if (FB.FactionType == Faction.Dire)
            {
                dire++;
            }
            else
            {
                radiant++;
            }
        }

        foreach (MeleeUnit u in m.meleeUnits)
        {
            if (u.FactionType == Faction.Dire)
            {
                dire++;
            }
            else
            {
                radiant++;
            }
        }

        foreach (RangedUnit u in m.rangedUnits)
        {
            if (u.FactionType == Faction.Dire)
            {
                dire++;
            }
            else
            {
                radiant++;
            }
        }


        if (dire > 0 && radiant > 0)//Checks to see if both teams are still alive
        {
            //Reset resource values
            direResourcesLeft    = 0;
            radientResourcesLeft = 0;

            foreach (ResourceBuilding RB in m.mines)
            {
                if (RB.FactionType == Faction.Dire)
                {
                    direResources     += RB.GenerateResource();
                    direResourcesLeft += RB.ResresourcesLeft;
                }
                else if (RB.FactionType == Faction.Radient)
                {
                    radientResources     += RB.GenerateResource();
                    radientResourcesLeft += RB.ResresourcesLeft;
                }
            }

            foreach (FactoryBuilding FB in m.factories)
            {
                Unit u = FB.SpawnUnit();

                if (FB.FactionType == Faction.Dire && direResources > FB.SpawnCost)
                {
                    if (m.round % FB.SpawnSpeed == 0)
                    {
                        m.units.Add(u);

                        if (u is MeleeUnit)
                        {
                            MeleeUnit M = (MeleeUnit)u;

                            M.MapHeight = mapHeight;
                            M.MapWidth  = mapWidth;
                            m.meleeUnits.Add(M);
                        }
                        else if (u is RangedUnit)
                        {
                            RangedUnit R = (RangedUnit)u;

                            R.MapHeight = mapHeight;
                            R.MapWidth  = mapWidth;
                            m.rangedUnits.Add(R);
                        }
                        direResources -= FB.SpawnCost;
                    }
                }
                else if (FB.FactionType == Faction.Radient && radientResources > FB.SpawnCost)
                {
                    if (m.round % FB.SpawnSpeed == 0)
                    {
                        m.units.Add(u);

                        if (u is MeleeUnit)
                        {
                            MeleeUnit M = (MeleeUnit)u;

                            m.meleeUnits.Add(M);
                        }
                        else if (u is RangedUnit)
                        {
                            RangedUnit R = (RangedUnit)u;

                            m.rangedUnits.Add(R);
                        }
                        radientResources -= FB.SpawnCost;
                    }
                }
            }

            foreach (Unit u in m.units)
            {
                u.CheckAttackRange(m.units, m.buildings);
            }

            m.round++;
            CheckDeath();
            InisialiseMap();
            m.PlaceUnits();
            m.PlaceBuildings();
            PlaceGameObjects();
        }
        else
        {
            InisialiseMap();
            m.PlaceUnits();
            m.PlaceBuildings();
            PlaceGameObjects();
            runGame = false;

            if (dire > radiant)
            {
                txtWinText.text = "Dire Wins on round " + m.round + "!";
            }
            else
            {
                txtWinText.text = "Radient Wins on round " + m.round + "!";
            }
        }
    }
예제 #2
0
        //Runs all the logic behind the game
        public void GameLogic()
        {
            //Working out if both teams are alive
            int dire    = 0;
            int radiant = 0;

            foreach (ResourceBuilding RB in m.mines)
            {
                if (RB.FactionType == Faction.Dire)
                {
                    dire++;
                }
                else
                {
                    radiant++;
                }
            }

            foreach (FactoryBuilding FB in m.factories)
            {
                if (FB.FactionType == Faction.Dire)
                {
                    dire++;
                }
                else
                {
                    radiant++;
                }
            }

            foreach (MeleeUnit u in m.meleeUnits)
            {
                if (u.FactionType == Faction.Dire)
                {
                    dire++;
                }
                else
                {
                    radiant++;
                }
            }

            foreach (RangedUnit u in m.rangedUnits)
            {
                if (u.FactionType == Faction.Dire)
                {
                    dire++;
                }
                else
                {
                    radiant++;
                }
            }

            if (dire > 0 && radiant > 0)//Checks to see if both teams are still alive
            {
                foreach (ResourceBuilding RB in m.mines)
                {
                    if (RB.FactionType == Faction.Dire)
                    {
                        direResources += RB.GenerateResource();
                    }
                    else if (RB.FactionType == Faction.Radient)
                    {
                        radientResources += RB.GenerateResource();
                    }
                }

                foreach (FactoryBuilding FB in m.factories)
                {
                    Unit u = FB.SpawnUnit();

                    if (FB.FactionType == Faction.Dire && direResources > FB.SpawnCost)
                    {
                        if (m.round % FB.SpawnSpeed == 0)
                        {
                            m.units.Add(u);

                            if (u is MeleeUnit)
                            {
                                MeleeUnit M = (MeleeUnit)u;

                                M.MapHeight = mapHeight;
                                M.MapWidth  = mapWidth;
                                m.meleeUnits.Add(M);
                            }
                            else if (u is RangedUnit)
                            {
                                RangedUnit R = (RangedUnit)u;

                                R.MapHeight = mapHeight;
                                R.MapWidth  = mapWidth;
                                m.rangedUnits.Add(R);
                            }
                            direResources -= FB.SpawnCost;
                        }
                    }
                    else if (FB.FactionType == Faction.Radient && radientResources > FB.SpawnCost)
                    {
                        if (m.round % FB.SpawnSpeed == 0)
                        {
                            m.units.Add(u);

                            if (u is MeleeUnit)
                            {
                                MeleeUnit M = (MeleeUnit)u;

                                m.meleeUnits.Add(M);
                            }
                            else if (u is RangedUnit)
                            {
                                RangedUnit R = (RangedUnit)u;

                                m.rangedUnits.Add(R);
                            }
                            radientResources -= FB.SpawnCost;
                        }
                    }
                }

                foreach (Unit u in m.units)
                {
                    u.CheckAttackRange(m.units, m.buildings);
                }

                m.round++;
                m.PlaceUnits();
                m.PlaceBuildings();
                Placebuttons();
            }
            else
            {
                m.PlaceUnits();
                m.PlaceBuildings();
                Placebuttons();
                GameTick.Enabled = false;

                if (dire > radiant)
                {
                    MessageBox.Show("Dire Wins in " + m.round + " rounds");
                }
                else
                {
                    MessageBox.Show("Radiant Wins in " + m.round + " rounds");
                }
            }

            //Checks to see who has died and needs to be deleted
            for (int i = 0; i < m.rangedUnits.Count; i++)
            {
                if (m.rangedUnits[i].Death())
                {
                    m.map[m.rangedUnits[i].PosX, m.rangedUnits[i].PosY] = "";
                    m.rangedUnits.RemoveAt(i);
                }
            }

            for (int i = 0; i < m.meleeUnits.Count; i++)
            {
                if (m.meleeUnits[i].Death())
                {
                    m.map[m.meleeUnits[i].PosX, m.meleeUnits[i].PosY] = "";
                    m.meleeUnits.RemoveAt(i);
                }
            }

            for (int i = 0; i < m.wizardUnits.Count; i++)
            {
                if (m.wizardUnits[i].Death())
                {
                    m.map[m.wizardUnits[i].PosX, m.wizardUnits[i].PosY] = "";
                    m.wizardUnits.RemoveAt(i);
                }
            }

            for (int i = 0; i < m.units.Count; i++)
            {
                if (m.units[i].Death())
                {
                    if (m.units[i] is MeleeUnit)
                    {
                        MeleeUnit M = (MeleeUnit)m.units[i];
                        m.map[M.PosX, M.PosY] = "";
                    }
                    else if (m.units[i] is RangedUnit)
                    {
                        RangedUnit R = (RangedUnit)m.units[i];
                        m.map[R.PosX, R.PosY] = "";
                    }
                    else if (m.units[i] is WizardUnit)
                    {
                        WizardUnit W = (WizardUnit)m.units[i];
                        m.map[W.PosX, W.PosY] = "";
                    }

                    m.units.RemoveAt(i);
                }
            }

            for (int i = 0; i < m.factories.Count; i++)
            {
                if (m.factories[i].Death())
                {
                    m.map[m.factories[i].PosX, m.factories[i].PosY] = "";
                    m.factories.RemoveAt(i);
                }
            }

            for (int i = 0; i < m.mines.Count; i++)
            {
                if (m.mines[i].Death())
                {
                    m.map[m.mines[i].PosX, m.mines[i].PosY] = "";
                    m.mines.RemoveAt(i);
                }
            }

            for (int i = 0; i < m.buildings.Count; i++)
            {
                if (m.buildings[i].Death())
                {
                    if (m.buildings[i] is FactoryBuilding)
                    {
                        FactoryBuilding FB = (FactoryBuilding)m.buildings[i];
                        m.map[FB.PosX, FB.PosY] = "";
                    }
                    else if (m.buildings[i] is ResourceBuilding)
                    {
                        ResourceBuilding RB = (ResourceBuilding)m.buildings[i];
                        m.map[RB.PosX, RB.PosY] = "";
                    }

                    m.buildings.RemoveAt(i);
                }
            }
        }