Ejemplo n.º 1
0
        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);
            }
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
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;
            }
        }
Ejemplo n.º 4
0
        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);
        }