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); }
public void AddGem(int i, int j, Gem.Team team) { Gem gem = new Gem(team, i, j); Gems[i, j] = gem; gems.AddChild(gem); }
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; }
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; }
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; }
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]); } }
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; }