protected override void OnNavigatedTo(NavigationEventArgs args)
        {
            if (args.Parameter as GridDefinition == null)
            {
                throw new ArgumentException("Expected a GameDefinition Parameter on Page Navigate");
                //Throw exception- expect the minersweper obejct
                //Navigate to page using Frame.Navigate(sourcePageType, minesweeperObject);
            }

            GridDefinition grid = args.Parameter as GridDefinition;

            game = new Minesweeper(grid);


            responder.Notifier      = game.Notifier;
            game.Notifier.Responder = responder;

            double wRatio = grid.width / DEFAULT_LENGTH;
            double hRatio = grid.height / DEFAULT_LENGTH;

            double wAdd = wRatio - 1;
            double hAdd = hRatio - 1;

            WIDTH  += WIDTH * wAdd * 0.2;
            HEIGHT += HEIGHT * hAdd * 0.2;
            canvas.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => { canvas.Width = WIDTH; canvas.Height = HEIGHT; });


            Rect gameBoard = GetBoardRegion(WIDTH, HEIGHT);

            gameBoardConfig = new GameBoardConfig(gameBoard, grid.width, grid.height, 5, 5);
        }
        private void drawGameBoard(CanvasAnimatedDrawEventArgs args, GameBoardConfig config)
        {
            double xCord = config.GameBoard.X;

            for (int xUnit = 0; xUnit < config.SpaceCountX; xUnit += 1)
            {
                xCord += config.SpaceXMargin;
                double yCord = config.GameBoard.Y;
                for (int yUnit = 0; yUnit < config.SpaceCountY; yUnit += 1)
                {
                    yCord += config.SpaceYMargin;
                    GridEntity entity = game.gridEntity[xUnit, yUnit];

                    bool revealed  = entity.positionRevealed;
                    bool bomb      = entity.isBomb;
                    bool flag      = entity.flagSet;
                    bool question  = entity.questionSet;
                    int  number    = entity.value;
                    Rect spaceRect = new Rect(xCord, yCord, config.SpaceWidth, config.SpaceHeight);

                    drawSpace(args.DrawingSession, spaceRect, revealed, bomb, flag, question, number);


                    yCord += config.SpaceHeight;
                    yCord += config.SpaceYMargin;
                }
                xCord += config.SpaceWidth;
                xCord += config.SpaceXMargin;
            }
        }
        private CoordPair?GetBoardSpaceClick(GameBoardConfig config, Point mouseClick)
        {
            Rect board = config.GameBoard;

            if (mouseClick.X < board.X || mouseClick.X > board.X + board.Width)
            {
                return(null);
            }
            else if (mouseClick.Y < board.Y || mouseClick.Y > board.Y + board.Height)
            {
                return(null);
            }

            double totalWidth  = config.SpaceWidth + 2 * config.SpaceXMargin;
            double totalHeight = config.SpaceHeight + 2 * config.SpaceYMargin;
            double rootedX     = mouseClick.X - board.X;
            double rootedY     = mouseClick.Y - board.Y;

            int indexX = (int)Math.Floor(rootedX / totalWidth);
            int indexY = (int)Math.Floor(rootedY / totalHeight);

            double coordX = board.X + config.SpaceXMargin + totalWidth * indexX;
            double coordY = board.Y + config.SpaceYMargin + totalHeight * indexY;

            if (mouseClick.X < coordX || mouseClick.X > coordX + config.SpaceWidth)
            {
                return(null);
            }
            else if (mouseClick.Y < coordY || mouseClick.Y > coordY + config.SpaceHeight)
            {
                return(null);
            }

            CoordPair pair = new CoordPair();

            pair.indexX = indexX;
            pair.indexY = indexY;
            return(pair);
        }