示例#1
0
        private static ColorWeight GetMaxColorWeight(ColorSpot moveSpot)
        {
            int         maxColorIndex  = LINQExstensions.MaxIndex(moveSpot.ColorsWeights, x => x.TileNumber);
            ColorWeight maxColorWeight = moveSpot.ColorsWeights[maxColorIndex];

            return(maxColorWeight);
        }
示例#2
0
 private static void MergeColorWeightData(ColorWeight colorWeight, ColorWeight moveSpotSameColorWeight, int moveSpotId)
 {
     moveSpotSameColorWeight.NeighborsSpotsIds.AddRange(colorWeight.NeighborsSpotsIds);
     moveSpotSameColorWeight.NeighborsSpotsIds = moveSpotSameColorWeight.NeighborsSpotsIds.Distinct().ToList();
     if (moveSpotSameColorWeight.NeighborsSpotsIds.Contains(moveSpotId))
     {
         moveSpotSameColorWeight.NeighborsSpotsIds.Remove(moveSpotId);
     }
 }
示例#3
0
        public static byte?ChangeColor(List <ColorSpot> colorSpots)
        {
            byte?       newColor;
            ColorSpot   moveSpot       = Program.StartSpot;
            ColorWeight maxColorWeight = GetMaxColorWeight(moveSpot);

            newColor = moveSpot.Color = maxColorWeight.Color;
            MergeWithMaxColorWeightNeigbors(colorSpots, moveSpot, maxColorWeight);
            moveSpot.SpotTiles.ForEach(x => x.Color = moveSpot.Color);
            return(newColor);
        }
示例#4
0
        private static void GetColorWeight(List <IGrouping <byte, Tile> > colorSpotsGroups, ColorSpot spot, IGrouping <byte, IGrouping <byte, Tile> > color)
        {
            ColorWeight colorWeight = new ColorWeight
            {
                Color = color.Key
            };
            var colorNeighbours = color.ToList();

            foreach (IGrouping <byte, Tile> neighbour in colorNeighbours)
            {
                colorWeight.NeighborsSpotsIds.Add(colorSpotsGroups.IndexOf(neighbour));
                colorWeight.TileNumber += neighbour.Count();
            }
            spot.ColorsWeights.Add(colorWeight);
        }
示例#5
0
 private static void MergeColorWeights(ColorSpot moveSpot, ColorSpot neighbor)
 {
     foreach (ColorWeight colorWeight in neighbor.ColorsWeights)
     {
         if (moveSpot.ColorsWeights.Any(x => x.Color == colorWeight.Color))
         {
             var moveSpotSameColorWeight = moveSpot.ColorsWeights.First(x => x.Color == colorWeight.Color);
             MergeColorWeightData(colorWeight, moveSpotSameColorWeight, moveSpot.Id);
         }
         else
         {
             ColorWeight newColorWeight = new ColorWeight()
             {
                 Color = colorWeight.Color
             };
             MergeColorWeightData(colorWeight, newColorWeight, moveSpot.Id);
             moveSpot.ColorsWeights.Add(colorWeight);
         }
     }
 }
示例#6
0
        private static void MergeWithMaxColorWeightNeigbors(List <ColorSpot> colorSpots, ColorSpot moveSpot, ColorWeight maxColorWeight)
        {
            List <ColorSpot> maxColorNeighbors = new List <ColorSpot>();

            Program.MergedIds.AddRange(maxColorWeight.NeighborsSpotsIds);
            foreach (int id in maxColorWeight.NeighborsSpotsIds)
            {
                var colorSpot = colorSpots.First(x => x.Id == id);
                maxColorNeighbors.Add(colorSpot);
                colorSpots.Remove(colorSpot);
            }

            foreach (ColorSpot neighbor in maxColorNeighbors)
            {
                MergeColorWeights(moveSpot, neighbor);
                moveSpot.SpotTiles.AddRange(neighbor.SpotTiles);
                moveSpot.ColorsWeights.First(x => x.Color == maxColorWeight.Color).NeighborsSpotsIds.Remove(neighbor.Id);
            }
            CleanupEmptyColorWeights(moveSpot);
            TilesNumbersRecalculate(colorSpots, moveSpot);
        }