Exemple #1
0
 public Gem(Gem gem2)
 {
     this.team = gem2.team;
     this.i = gem2.i;
     this.j = gem2.j;
     var visualPosition = Gem.map.GetGemVisualPosition(i, j);
     int width = (int)(Gem.Size.X * Global.thisGame.ScreenScaleFactor.X);
     int height = (int)(Gem.Size.Y * Global.thisGame.ScreenScaleFactor.Y);
     if (team == Team.Red)
     {
         sprite = StaticSprite.CreateSprite(visualPosition.X, visualPosition.Y, new Vector2(1, 1), SpritePath[0], 0.1f, width, height);
     }
     else
     {
         sprite = StaticSprite.CreateSprite(visualPosition.X, visualPosition.Y, new Vector2(1, 1), SpritePath[1], 0.1f, width, height);
     }
     this.AddChild(sprite);
 }
Exemple #2
0
 public void AddGem(int i, int j, Gem.Team team)
 {
     Gem gem = new Gem(team, i, j);
     Gems[i, j] = gem;
     gems.AddChild(gem);
 }
Exemple #3
0
        private List<Tile> GetAdjacentCell(Gem gem)
        {
            int i = gem.i, j = gem.j;

            var list = new List<Tile>();
            AddEnemyCellToList(list, gem, i - 1, j + 1);
            AddEnemyCellToList(list, gem, i + 1, j + 1);
            AddEnemyCellToList(list, gem, i + 2, j + 0);
            AddEnemyCellToList(list, gem, i - 2, j + 0);
            AddEnemyCellToList(list, gem, i - 1, j - 1);
            AddEnemyCellToList(list, gem, i + 1, j - 1);
            return list;
        }
Exemple #4
0
        private void DuplicateCell(int i, int j, int x, int y)
        {
            visualState = VisualState.Transitioning;
            Gems[x, y] = new Gem(Gems[i, j]);

            Gems[x, y].i = x;
            Gems[x, y].j = y;

            this.gems.AddChild(Gems[x, y]);
            if (Gems[x, y].team == Gem.Team.Blue)
            {
                ScoreBlue++;
            }
            else { ScoreRed++; }

            Storyboard sb = new Storyboard();
            Animation anim = new TranslationAnimation(sb, Gems[x, y].sprite, GameSettings.GemTranslationDuration, GetGemVisualPosition(x, y), false);
            sb.AddAnimation(anim);
            sb.argument = Gems[x, y];
            sb.Start();
            sb.OnCompleted += OnMoveCellCompleted;
        }
Exemple #5
0
        private int CountRelative(Gem gem)
        {
            int count = 0;
            int[,] delta = { { -1, 1 }, { 1, 1 }, { 2, 0 }, { -2, 0 }, { -1, -1 }, { 1, -1 } };

            bool[,] isVisisted = new bool[nRows, nCols];

            for (int i = 0; i < 6; i++)
            {
                for (int t = 0; t < 6; t++)
                {
                    int ii = gem.i + delta[t, 0] + delta[i, 0];
                    int jj = gem.j + delta[t, 1] + delta[i, 1];
                    if (ii < 0 || ii >= nRows || jj < 0 || jj >= nCols) continue;
                    if (ii == gem.i && jj == gem.j) continue;
                    if (Gems[ii, jj] != null || Tiles[ii,jj]==null) continue;
                    if (!isVisisted[ii, jj])
                    {
                        ++count;
                        isVisisted[ii, jj] = true;
                    }
                }
            }

            return count;
        }
Exemple #6
0
 private void AddEnemyCellToList(List<Tile> list, Gem myGem, int i, int j)
 {
     if (i < 0 || i >= nRows || j < 0 || j >= nCols) return;
     if (Tiles[i, j] != null && Gems[i,j]!=null && myGem.team!=Gems[i,j].team)
     {
         list.Add(Tiles[i, j]);
     }
 }
Exemple #7
0
        public void OvertakeEnemies(Gem gem)
        {
            visualState = VisualState.Transitioning;
            List<Tile> adjacents = GetAdjacentCell(gem);
            if (adjacents.Count == 0)
            {
                OnOvertakeCompleted(this, null);
                return;
            }

            Storyboard sb = new Storyboard();
            List<Gem> toFades = new List<Gem>();
            foreach (Tile adjacent in adjacents)
            {
                Gem toOvertake = new Gem(gem);
                toOvertake.i = adjacent.i;
                toOvertake.j = adjacent.j;

                gems.AddChild(toOvertake);

                Gem toFade = Gems[adjacent.i, adjacent.j];
                toFades.Add(toFade);

                Gems[toOvertake.i, toOvertake.j] = toOvertake;

                Animation anim = new TranslationAnimation(sb, toOvertake.sprite, GameSettings.GemTranslationDuration, GetGemVisualPosition(toOvertake.i, toOvertake.j), false);
                sb.AddAnimation(anim);

                anim = new ColorAnimation(sb, toFade.sprite, GameSettings.GemTranslationDuration, new Vector4(0,0,0,0), false);
                sb.AddAnimation(anim);
            }

            sb.argument = toFades;
            sb.Start();
            sb.OnCompleted += OnOvertakeCompleted;
        }