public GemView(Gem gemType, GemSub subType = GemSub.Gem) { uint cornerCount; Color color; Texture texture; GemType = gemType; GemSubType = subType; switch (gemType) { case Gem.Romb: cornerCount = 4; color = Colors.RombGemColor; texture = subType == GemSub.Line ? new Texture(Assets.RombLine) : new Texture(Assets.RombBomb); break; case Gem.Pentagon: cornerCount = 5; color = Colors.PentagonGemColor; texture = subType == GemSub.Line ? new Texture(Assets.PentagonLine) : new Texture(Assets.PentagonBomb); break; case Gem.Hexagon: cornerCount = 6; color = Colors.HexagonGemColor; texture = subType == GemSub.Line ? new Texture(Assets.HexagonLine) : new Texture(Assets.HexagonBomb); break; case Gem.Octagon: cornerCount = 8; color = Colors.OctagonGemColor; texture = subType == GemSub.Line ? new Texture(Assets.OctagonLine) : new Texture(Assets.OctagonBomb); break; default: cornerCount = 0; color = Colors.CircleGemColor; texture = subType == GemSub.Line ? new Texture(Assets.CircleLine) : new Texture(Assets.CircleBomb); break; } if (subType == GemSub.Gem) { GemShape = cornerCount == 0 ? new CircleShape(Layout.GemSize - 3) : new CircleShape(Layout.GemSize - 3, cornerCount); GemShape.OutlineThickness = 3; GemShape.OutlineColor = Colors.GemOutlineColor; GemShape.FillColor = color; } else { GemShape = new RectangleShape(new SFML.System.Vector2f(Layout.BombSize, Layout.BombSize)); GemShape.Texture = texture; } }
void FindLines() { var gottenGems = new List <Gotten>(); for (int i = 0; i < Settings.GameSize; i++) { for (int j = 0; j < Settings.GameSize; j++) { gottenGems.Add(new Gotten()); } } for (int i = 0; i < Settings.GameSize; i++) { for (int j = 0; j < Settings.GameSize; j++) { var currentId = i * Settings.GameSize + j; var horDelete = new List <int> { idGrid[currentId] }; var vertDelete = new List <int> { idGrid[currentId] }; int horLineSize = 1; int vertLineSize = 1; for (int z = 1; j + z < Settings.GameSize; z++) { if (gemGrid[i, j] == gemGrid[i, j + z]) { var id = idGrid[i * Settings.GameSize + j + z]; if (!gottenGems[id].Horizontal) { gottenGems[id].Horizontal = true; horDelete.Add(id); horLineSize++; } } else { break; } } for (int z = 1; i + z < Settings.GameSize; z++) { if (gemGrid[i, j] == gemGrid[i + z, j]) { var id = idGrid[(i + z) * Settings.GameSize + j]; if (!gottenGems[id].Vertical) { gottenGems[id].Vertical = true; vertDelete.Add(id); vertLineSize++; } } else { break; } } if (horLineSize < minLineSize) { horDelete.Clear(); } if (vertLineSize < minLineSize) { vertDelete.Clear(); } CheckBonuses(horDelete, vertDelete); if (horLineSize >= 4 || vertLineSize >= 4 || horLineSize >= 3 && vertLineSize >= 3 ) { int id; if (lastMoved != -1) { id = lastMoved; lastMoved = -1; } else { id = currentId; } GemSub subType = GemSub.Line; if (horLineSize >= 3 && vertLineSize >= 3) { horDelete.Remove(id); vertDelete.Remove(id); } else if (vertLineSize >= 4) { vertDelete.Remove(id); } else if (horLineSize >= 4) { horDelete.Remove(id); } if (horLineSize >= 5 || vertLineSize >= 5 || horLineSize >= 3 && vertLineSize >= 3 ) { subType = GemSub.Bomb; } var target = (GemNode)gemNodes.Find( n => n.Entity.Name.BaseName == BaseNames.Gem && n.Entity.Name.Id - 1 == id ); var gem = new GemView(gemGrid[GetGridPlace(id).X, GetGridPlace(id).Y], subType); var gemShape = gem.GemShape; gemShape.Origin = new Vector2f( gemShape.GetLocalBounds().Width / 2.0f, gemShape.GetLocalBounds().Height / 2.0f ); target.Display.DisplayObject = gemShape; target.Gem.GemSubType = gem.GemSubType; } needDelete.UnionWith(horDelete); needDelete.UnionWith(vertDelete); } } }