public GamePage()
        {
            this.InitializeComponent();

            //set preffered window size
            ApplicationView.PreferredLaunchViewSize = new Size(700, 500);
            ApplicationView.PreferredLaunchWindowingMode = ApplicationViewWindowingMode.PreferredLaunchViewSize;

            //initialize variable for gameplay
            playerLives = 3;
            playerGameScore = 0;
            level = 1;
            
            //initiate classes
            player = new Player(canvas, playerGameScore);
            invaders = new Invaders(canvas, level);
            sounds = new Sounds(grid);

            //start the game dispatch timer
            dispatcherTimer = new DispatcherTimer();
            dispatcherTimer.Tick += Game;
            dispatcherTimer.Interval = TimeSpan.FromTicks(TimeSpan.TicksPerSecond / 30);
            dispatcherTimer.Start();
        }
        //Draw and update all object for every game frame
        public void Draw(Canvas canvas, Image[,] invaderGrid, Sounds sounds)
        {
            Canvas.SetTop(playerSprite, Window.Current.Bounds.Height - (playerSprite.Height * 2));

            //If player is moving left and is not hitting the left screen, keep moving left.
            if (isMovingLeft && Canvas.GetLeft(playerSprite) >= 0) Canvas.SetLeft(playerSprite, Canvas.GetLeft(playerSprite) - 6);
            //If player is moving right and is not hitting the right screen, keep moving right
            if (isMovingRight && Canvas.GetLeft(playerSprite) <= Window.Current.Bounds.Width - playerSprite.Width) Canvas.SetLeft(playerSprite, Canvas.GetLeft(playerSprite) + 6);
            //if the player is shooting
            if (isShooting)
            {
                //If no bullet is found, create a new one.
                if (!canvas.Children.Contains(playerBullet))
                {
                    playerBullet = new Image();
                    playerBullet.Width = 3 * sizeModifier();
                    playerBullet.Height = 8 * sizeModifier();
                    playerBullet.Source = new BitmapImage(new Uri("ms-appx:///Assets/Sprites/player-bullet.png"));

                    Canvas.SetTop(playerBullet, Canvas.GetTop(playerSprite));
                    Canvas.SetLeft(playerBullet, Canvas.GetLeft(playerSprite) + (playerSprite.Width / 2 - 1));

                    sounds.playPlayerShootSound();
                    canvas.Children.Add(playerBullet);
                }
                //Move bullet upward and check for alienGrid collision.
                for (int r = 0; r < invaderGrid.GetLength(0); r++)
                {
                    for (int c = 0; c < invaderGrid.GetLength(1); c++)
                    {
                        //If the player bullet is in between the x coords of an invader, continue
                        if (Canvas.GetLeft(invaderGrid[r, c]) <= Canvas.GetLeft(playerBullet) && Canvas.GetLeft(invaderGrid[r, c]) + invaderGrid[r, c].Width >= Canvas.GetLeft(playerBullet))
                        {
                            //If the player bullet is in between the y coords of an invader, continue
                            if (Canvas.GetTop(invaderGrid[r, c]) + invaderGrid[r, c].Height >= Canvas.GetTop(playerBullet) && Canvas.GetTop(invaderGrid[r, c]) <= Canvas.GetTop(playerBullet))
                            {
                                //If the invader is not already dead, continue
                                if (invaderGrid[r, c].Tag != null)
                                {
                                    //Kill invader / update player score
                                    playerScore = playerScore + (10 * (invaderGrid.GetLength(1) - c));

                                    if (invaderGrid[r, c].Source == alien1A || invaderGrid[r, c].Source == alien1B) playerScore = playerScore + 100;
                                    else if (invaderGrid[r, c].Source == alien2A || invaderGrid[r, c].Source == alien2B) playerScore = playerScore + 50;
                                    else playerScore = playerScore + 25;

                                    isShooting = false;
                                    invaderGrid[r, c].Tag = null;
                                    sounds.playinvaderKilledSound();
                                    canvas.Children.Remove(playerBullet);
                                    removeKilled(canvas, invaderGrid[r, c]);

                                }
                            }
                        }
                        //If the bullet collides with the top of the screen, remove bullet
                        else if (Canvas.GetTop(playerBullet) <= 0)
                        {
                            isShooting = false;
                            canvas.Children.Remove(playerBullet);
                        }
                    }
                }

                //Move bullet upward
                Canvas.SetTop(playerBullet, Canvas.GetTop(playerBullet) - 15);
            }
        }
        //Draw and update all object for every game frame
        public void Draw(Canvas canvas, Image player, Sounds sounds)
        {
            //For every 15 loops (minus the speed) toggle the invader image and move it
            if (count % (15 - speed) == 1) toggleSprite = invadersAreMoving = true;
            //For every 20 loops (minus the speed) make a selected invader shoot if the randomNumber is equal to 2
            if (count % (20 - speed) == 1 && new Random().Next(0, 3) == 2) invaderShoot(canvas, player);
            //Move the invader downward
            if (isMovingDown)
            {
                for (int c = 0; c < columns; c++)
                {
                    for (int r = 0; r < rows; r++)
                    {
                        isMovingDown = false;
                        Canvas.SetTop(invaderGrid[c, r], Canvas.GetTop(invaderGrid[c, r]) + invaderGrid[c, r].Width);
                        //If the invader is not dead, continue
                        if (invaderGrid[c, r].Tag != null)
                        {
                            if (Canvas.GetTop(invaderGrid[c, r]) >= Window.Current.Bounds.Height - (invaderGrid[c, r].Height * 3))
                            {
                                isPlayerAlive = false;
                            }
                        }
                    }
                }
            }

            //change the x coords for all the invaders
            if (invadersAreMoving)
            {
                //Invaders are moving left
                if (isMovingLeft)
                {
                    for (int c = 0; c < columns; c++)
                    {
                        for (int r = 0; r < rows; r++)
                        {
                            if (invaderGrid[c, r].Tag != null)
                            {
                                if (toggleSprite) toggle(invaderGrid[c, r]);
                                if (Canvas.GetLeft(invaderGrid[c, r]) <= 0 + (invaderGrid[c, r].Width * 2))
                                {
                                    isMovingDown = true;
                                    isMovingLeft = false;
                                }

                                Canvas.SetLeft(invaderGrid[c, r], Canvas.GetLeft(invaderGrid[c, r]) - (20 + speed));
                            }
                        }
                    }
                }
                //Invaders are moving right
                else
                {
                    for (int c = 0; c < columns; c++)
                    {
                        for (int r = 0; r < rows; r++)
                        {
                            if (invaderGrid[c, r].Tag != null)
                            {
                                if (toggleSprite) toggle(invaderGrid[c, r]);
                                if (Canvas.GetLeft(invaderGrid[c, r]) >= Window.Current.Bounds.Width - (invaderGrid[c, r].Width * 3))
                                {
                                    isMovingDown = true;
                                    isMovingLeft = true;
                                }

                                Canvas.SetLeft(invaderGrid[c, r], Canvas.GetLeft(invaderGrid[c, r]) + (20 + speed));
                            }
                        }
                    }
                }

                invadersAreMoving = false;
            }

            //Handle bullet collision and motion
            if (isShooting)
            {
                for (int i = 0; i < invaderBullets.Length; i++)
                {
                    if (canvas.Children.Contains(invaderBullets[i]))
                    {
                        //If the invader bullet is in between the x coords of the player, continue
                        if (Canvas.GetLeft(player) <= Canvas.GetLeft(invaderBullets[i]) && Canvas.GetLeft(player) + player.Width >= Canvas.GetLeft(invaderBullets[i]))
                        {
                            //If the invader bullet is in between the y coords of the player, continue
                            if (Canvas.GetTop(player) + player.Height >= Canvas.GetTop(invaderBullets[i]) && Canvas.GetTop(player) <= Canvas.GetTop(invaderBullets[i]))
                            {
                                //Kill the player
                                removeKilled(player);
                                sounds.playPlayerKilledSound();
                                isShooting = false;                                
                            }
                        }
                        //If the invader bullet collides with the bottom screen, continue
                        else if (Canvas.GetTop(invaderBullets[i]) >= Window.Current.Bounds.Height - invaderBullets[i].Height)
                        {
                            //delete bullet
                            canvas.Children.Remove(invaderBullets[i]);
                        }

                        //Move bullet downward
                        Canvas.SetTop(invaderBullets[i], Canvas.GetTop(invaderBullets[i]) + 15);
                    }
                }
            }

            toggleSprite = false;
            count++;
        }