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 + "!"; } } }
//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); } } }