Exemple #1
0
        private void HighlightSelectedBalls(int x, int y, bool[,] visit)
        {
            int[] dx = { -1, 0, 1, 0 };
            int[] dy = { 0, 1, 0, -1 };
            visit[x, y] = true;
            var ball = CurrentField.GetBall(x, y);

            if (ball is OjamaBall)
            {
                return;
            }
            var color = ball.Color;

            ball.IsOnMouse = true;

            for (var i = 0; i < 4; ++i)
            {
                var tx = x + dx[i];
                var ty = y + dy[i];
                if (!CurrentField.IsInFieldRange(tx, ty) ||
                    visit[tx, ty] ||
                    CurrentField.GetBall(tx, ty).Color != color)
                {
                    continue;
                }

                HighlightSelectedBalls(tx, ty, visit);
            }
        }
Exemple #2
0
        private void GameControlOnMouseLeftButtonUp(
            object sender,
            MouseButtonEventArgs mouseButtonEventArgs)
        {
            if (!IsRunning)
            {
                return;
            }

            var screenPoint   = new Point(Cursor.Position.X, Cursor.Position.Y);
            var controlPoint  = _gameControl.PointFromScreen(screenPoint);
            var ratioX        = _camera.WorldWidth / _gameControl.ActualWidth;
            var ratioY        = _camera.WorldHeight / _gameControl.ActualHeight;
            var worldPosition = new Vector2((float)(controlPoint.X * ratioX),
                                            (float)(controlPoint.Y * ratioY));

            Microsoft.Xna.Framework.Point bordPos;

            if (!CurrentField.ToBordPointFromRenderPosition(worldPosition, out bordPos) ||
                !CurrentField.IsInFieldRange(bordPos.X, bordPos.Y))
            {
                return;
            }

            var gameConfig = CurrentField.GameConfig;
            var visit      = new bool[gameConfig.Column + 1, gameConfig.Row + 1];
            var tempCount  = CurrentField.DfsDestroyableBalls(bordPos.X, bordPos.Y, visit);

            if (tempCount < gameConfig.MinChain)
            {
                return;
            }

            var ball = CurrentField.GetBall(bordPos.X, bordPos.Y);

            if (ball is OjamaBall)
            {
                return;
            }
            OutPut    = bordPos;
            IsRunning = false;
        }