private void TilesChanged(object sender, ChangeEventArgs e) { if (e.ChangeType == ChangeEventArgs.EventType.Removed && CurrentTiles.Any(t => (t?.Index ?? -1) == e.Tile.Index)) { this.Hide(); this.CurrentTiles[0] = null; this.CurrentTiles[1] = null; this.CurrentTiles[2] = null; this.CurrentTiles[3] = null; } else if (e.ChangeType == ChangeEventArgs.EventType.Selected) { if (e.Tile == null) { return; } ChangeTile(e.Tile.Index); } }
private bool IsAndAddScore() { int found = 0; for (int y = 0; y < CurrentTiles.Count(); y++) { for (int x = 0; x < CurrentTiles[y].Count(); x++) { if (CurrentTiles[y][x].IsClosed && !PreviousTiles[y][x].IsClosed) { found++; var s = (int)((10 * found) * _multiplier); AddScoreParticle(x, y, s); _players[_currentPlayer].Score += s; } PreviousTiles[y][x] = CurrentTiles[y][x]; } } return(found != 0); }
public void DrawTiles() { SpriteBatch.Begin(); for (int y = 0; y < CurrentTiles.Count(); y++) { for (int x = 0; x < CurrentTiles[y].Count(); x++) { DrawTile(x, y); } } SpriteBatch.End(); for (int y = 0; y < Game.GameData.Data.GameGridsVsMode[GameType.Grid].YTiles + 1; y++) { for (int x = 0; x < Game.GameData.Data.GameGridsVsMode[GameType.Grid].XTiles + 1; x++) { DrawParticle((x * Game.GameData.Data.GameGridsVsMode[GameType.Grid].TileSize) + (int)_offset.X, (y * Game.GameData.Data.GameGridsVsMode[GameType.Grid].TileSize) + (int)_offset.Y); } } switch (_tileSelection) { case TileSelection.X: SpriteBatch.Begin(); SpriteBatch.Draw(Textures.Left, new Rectangle((_x * Game.GameData.Data.GameGridsVsMode[GameType.Grid].TileSize) + (int)_offset.X, (_y * Game.GameData.Data.GameGridsVsMode[GameType.Grid].TileSize) + (int)_offset.Y, Game.GameData.Data.GameGridsVsMode[GameType.Grid].TileSize, Game.GameData.Data.GameGridsVsMode[GameType.Grid].TileSize), null, Color.Lerp(Color.White, Color.Lerp(GameColors.Colors[CurrentPlayer.Color].Color, GameColors.Colors[PreviousPlayer.Color].Color, _colorLerp.Value), .5f)); SpriteBatch.Draw(Textures.Right, new Rectangle(((_x - 1) * Game.GameData.Data.GameGridsVsMode[GameType.Grid].TileSize) + (int)_offset.X, (_y * Game.GameData.Data.GameGridsVsMode[GameType.Grid].TileSize) + (int)_offset.Y, Game.GameData.Data.GameGridsVsMode[GameType.Grid].TileSize, Game.GameData.Data.GameGridsVsMode[GameType.Grid].TileSize), null, Color.Lerp(Color.White, Color.Lerp(GameColors.Colors[CurrentPlayer.Color].Color, GameColors.Colors[PreviousPlayer.Color].Color, _colorLerp.Value), .5f)); SpriteBatch.End(); break; case TileSelection.Y: SpriteBatch.Begin(); SpriteBatch.Draw(Textures.Top, new Rectangle((_x * Game.GameData.Data.GameGridsVsMode[GameType.Grid].TileSize) + (int)_offset.X, (_y * Game.GameData.Data.GameGridsVsMode[GameType.Grid].TileSize) + (int)_offset.Y, Game.GameData.Data.GameGridsVsMode[GameType.Grid].TileSize, Game.GameData.Data.GameGridsVsMode[GameType.Grid].TileSize), null, Color.Lerp(Color.White, Color.Lerp(GameColors.Colors[CurrentPlayer.Color].Color, GameColors.Colors[PreviousPlayer.Color].Color, _colorLerp.Value), .5f)); SpriteBatch.Draw(Textures.Bottom, new Rectangle((_x * Game.GameData.Data.GameGridsVsMode[GameType.Grid].TileSize) + (int)_offset.X, ((_y - 1) * Game.GameData.Data.GameGridsVsMode[GameType.Grid].TileSize) + (int)_offset.Y, Game.GameData.Data.GameGridsVsMode[GameType.Grid].TileSize, Game.GameData.Data.GameGridsVsMode[GameType.Grid].TileSize), null, Color.Lerp(Color.White, Color.Lerp(GameColors.Colors[CurrentPlayer.Color].Color, GameColors.Colors[PreviousPlayer.Color].Color, _colorLerp.Value), .5f)); SpriteBatch.End(); break; } }
public override IComponent Update(GameTime gameTime, BaseGame game) { if (NextComponent != null) { return(NextComponent); } _cpuPlayerTween.Update(gameTime.ElapsedGameTime); _rotation += 0.05f; _rotation = MathHelper.WrapAngle(_rotation); _colorLerp.Update(new TimeSpan(50L)); #region Human if (CurrentPlayer.Type == PlayerType.Human && !_gameOver) { var positions = new List <Vector2>(); for (var y = 0; y < Game.GameData.Data.GameGridsVsMode[GameType.Grid].YTiles + 1; y++) { for (var x = 0; x < Game.GameData.Data.GameGridsVsMode[GameType.Grid].XTiles + 1; x++) { positions.Add(new Vector2((x * Game.GameData.Data.GameGridsVsMode[GameType.Grid].TileSize) + _offset.X, (y * Game.GameData.Data.GameGridsVsMode[GameType.Grid].TileSize) + _offset.Y)); } } if (!Game.Mouse.Hidden || Game.Touch.IsTouched) { Vector2 loc = Game.Touch.IsTouched ? Game.Touch.Location : Game.Mouse.Location; Vector2?closest1 = null; var closestDistance1 = float.MaxValue; foreach (var position in positions) { var distance = Vector2.DistanceSquared(position, loc); if (closest1.HasValue && distance >= closestDistance1) { continue; } closest1 = position; closestDistance1 = distance; } _cm1 = closest1 ?? Vector2.Zero; Vector2?closest2 = null; var closestDistance2 = float.MaxValue; foreach (var position in positions) { if (position == _cm1) { continue; } var distance = Vector2.DistanceSquared(position, loc); if (closest2.HasValue && (distance >= closestDistance2)) { continue; } closest2 = position; closestDistance2 = distance; } _cm2 = closest2 ?? Vector2.Zero; _mx1 = (int)(((_cm1.X - _offset.X) / Game.GameData.Data.GameGridsVsMode[GameType.Grid].TileSize)); _my1 = (int)(((_cm1.Y - _offset.Y) / Game.GameData.Data.GameGridsVsMode[GameType.Grid].TileSize)); _mx2 = (int)(((_cm2.X - _offset.X) / Game.GameData.Data.GameGridsVsMode[GameType.Grid].TileSize)); _my2 = (int)(((_cm2.Y - _offset.Y) / Game.GameData.Data.GameGridsVsMode[GameType.Grid].TileSize)); if (_mx2 != _mx1) { var nx = Math.Min(_mx1, _mx2); var ny = Math.Min(_my1, _my2); if (_x != nx || _y != ny) { Game.Audio.Play(Cues.Move02); } _x = nx; _y = ny; _tileSelection = TileSelection.Y; } else { var nx = Math.Min(_mx1, _mx2); var ny = Math.Min(_my1, _my2); if (_x != nx || _y != ny) { Game.Audio.Play(Cues.Move01); } _x = nx; _y = ny; _tileSelection = TileSelection.X; } var xy = new Vector2((_x * Game.GameData.Data.GameGridsVsMode[GameType.Grid].TileSize) + _offset.X, (_y * Game.GameData.Data.GameGridsVsMode[GameType.Grid].TileSize) + _offset.Y); var d = Vector2.Distance(xy, loc); if ((Game.Mouse.LeftSingleClick || TapLoaction != Vector2.Zero) && (d <= (Game.GameData.Data.GameGridsVsMode[GameType.Grid].TileSize * .75))) { Game.Audio.Play(Cues.Move02); Game.Mouse.ComponentChange(); TapLoaction = Vector2.Zero; if (EndTurn(false)) { //do something } } } if (Game.KeyboardInput.TypedKey(Keys.Enter) || Game.KeyboardInput.TypedKey(Keys.Space)) { Game.Audio.Play(Cues.Move02); if (EndTurn(false)) { //do something } } if (Game.KeyboardInput.TypedKey(Keys.Up)) { Game.Audio.Play(Cues.Move02); MoveUp(); } if (Game.KeyboardInput.TypedKey(Keys.Down)) { Game.Audio.Play(Cues.Move02); MoveDown(); } if (Game.KeyboardInput.TypedKey(Keys.Left)) { Game.Audio.Play(Cues.Move01); MoveLeft(); } if (Game.KeyboardInput.TypedKey(Keys.Right)) { Game.Audio.Play(Cues.Move01); MoveRight(); } } #endregion else if (!_gameOver) { DoAI(); } if (_gameOver) { _gameOverFade.Update(gameTime.ElapsedGameTime); _gameOverScale.Update(gameTime.ElapsedGameTime); } else { _gameOver = true; for (var i = 0; i < CurrentTiles.Count(); i++) { for (var j = 0; j < CurrentTiles[i].Count(); j++) { if (CurrentTiles[i][j].IsClosed) { continue; } _gameOver = false; break; } } if (_gameOver & !_scored) { var hs = _players.Max(ps => ps.Score); for (var index = 0; index < _players.Length; index++) { var p = _players[index]; if (p.Score == hs) { _currentPlayer = index; } } var s = 5; for (var i = 0; i < CurrentTiles.Count(); i++) { for (var j = 0; j < CurrentTiles[i].Count(); j++) { if (CurrentTiles[i][j].Color != CurrentPlayer.Color) { continue; } AddScoreParticle(j, i, s); _players[_currentPlayer].Score += s; s += 5; } } if (CurrentPlayer.Type == PlayerType.Human) { _unlock = true; } _scored = true; } } foreach (var scoreParticle in _scoreParticles) { scoreParticle.Update(gameTime); } _scoreParticles.RemoveAll(p => p.IsDead()); if (_gameOverFade.IsComplete) { Back(); } return(this); }