override public void UpdateStrength(Area area) { }
/** * initializing the AreaBoard */ private void InitializeAreaBoard() { for (int i = 0; i < Size * Size; i++) // Filling up the AreaBoard with Areas of type (-1) { AreaBoard.Add(new Area(-1)); } List <int>[] InfluencedLocationsList = new List <int> [4]; for (int i = 0; i < 4; i++) // Adding 4 starting points { InfluencedLocationsList[i] = new List <int>(); // separate InfluencedList for every type of Area, containing list of free Areas (type=-1) that are influenced by current Type int location = Generator.Next(0, Size * Size); while (AreaBoard[location].Type != -1) { location = Generator.Next(0, Size * Size); } AreaBoard[location] = new Area(i); LinkedList <int> potentialList = PotentialList(location); foreach (int loc in potentialList) { if (AreaBoard[loc].Type == -1) { AreaBoard[loc].AddInfluence(i); InfluencedLocationsList[i].Add(loc); } } } int type = 0; // type of Area to add while (AreaBoard.Exists(area => area.Type == -1)) // Filling up the Areaboard until there is no free spaces (Areas.type -1) { if (type > 3) { type = 0; } int chosenLocation = -1; if (InfluencedLocationsList[type].Any()) { int maxInfluence = 0; List <int> maxInfluenceList = new List <int>(); foreach (int loc in InfluencedLocationsList[type]) // chosing one of the Areas that has max Influence of current Type { if (AreaBoard[loc].Influence[type] > maxInfluence) { maxInfluence = AreaBoard[loc].Influence[type]; maxInfluenceList.Clear(); maxInfluenceList.Add(loc); } else if (AreaBoard[loc].Influence[type] == maxInfluence) { maxInfluenceList.Add(loc); } } chosenLocation = maxInfluenceList[Generator.Next(0, maxInfluenceList.Count())]; } else // there is no Area on InfluencedList, choosing random free Area on board { chosenLocation = Generator.Next(0, Size * Size); while (AreaBoard[chosenLocation].Type != -1) { chosenLocation = Generator.Next(0, Size * Size); } } AreaBoard[chosenLocation] = new Area(type); for (int j = 0; j < 4; j++) { InfluencedLocationsList[j].Remove(chosenLocation); // removing locations from lists that are already taken } LinkedList <int> potentialList = PotentialList(chosenLocation); foreach (int loc in potentialList) // adding new InfluencedAreas to the list { if (AreaBoard[loc].Type == -1) { AreaBoard[loc].AddInfluence(type); if (!InfluencedLocationsList[type].Contains(loc)) { InfluencedLocationsList[type].Add(loc); } } } type++; } }