Пример #1
0
		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;
			}
		}
Пример #2
0
        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);
                }
            }
        }