예제 #1
0
        private void gameTimer_Tick(object sender, EventArgs e)
        {
            //swaps controls when shrooms is active for p1
            if (isShroomsControls)
            {
                if (leftArrowDown && paddle.x < (this.Width - paddle.width))
                {
                    paddle.Move("right");
                }
                if (rightArrowDown && paddle.x > 0)
                {
                    paddle.Move("left");
                }
            }

            if (isShroomsControls)//for p2
            {
                if (aKeyDown && paddle2.x < (this.Width - paddle2.width))
                {
                    paddle2.Move("right");
                }
                if (dKeyDown && paddle.x > 0)
                {
                    paddle2.Move("left");
                }
            }

            // Move the paddle for p1
            if (leftArrowDown && paddle.x > 0)
            {
                paddle.Move("left");
            }
            if (rightArrowDown && paddle.x < (this.Width - paddle.width))
            {
                paddle.Move("right");
            }

            //move the paddle for p2
            if (aKeyDown && paddle2.x > 0)
            {
                paddle2.Move("left");
            }
            if (dKeyDown && paddle2.x < (this.Width - paddle2.width))
            {
                paddle2.Move("right");
            }

            #region Stefan and Jacks PowerUps

            if (MagnetTimer > 0 && isMagnet == true)
            {
                MagnetTimer--;
            }
            else if (MagnetTimer <= 0 && isMagnet == true)
            {
                isMagnet = false;
            }

            if (longPaddle == true)
            {
                longPaddleTimer++;
                if (longPaddleTimer >= 14 && paddle.width > 80)
                {
                    longPaddleTimer = 0;
                    paddle.x++;
                    paddle.width -= 2;
                }
                else if (paddle.width <= 80 && longPaddleTimer >= 14)
                {
                    longPaddleTimer = 0;
                    longPaddle      = false;
                }
            }
            else if (longPaddle == true && paddle.width != 80)
            {
                paddle.width = 80;
            }

            if (isFloor == true && floorTimer <= 0)
            {
                isFloor = false;
            }
            else if (isFloor == true && floorTimer > 0)
            {
                floorTimer--;
                foreach (Ball ba in balls)
                {
                    if (ba.PaddleCollision(floorPaddle, false, false, 100) == 0)
                    {
                        floorTimer = 0;
                    }
                }
                CollidePowerUps(floorPaddle);
            }

            if (strongBallTimer > 0 && isStrongball == true)
            {
                strongBallTimer--;
            }
            else if (strongBallTimer <= 0 && isStrongball == true)
            {
                isStrongball = false;

                ballBrush.Color = Color.White;
            }

            if (shroomsTimer > 0 && isShrooms == true)
            {
                ballBrush.Color   = Color.FromArgb(randomNum.Next(0, 255), randomNum.Next(0, 255), randomNum.Next(0, 255));
                paddleBrush.Color = Color.FromArgb(randomNum.Next(0, 255), randomNum.Next(0, 255), randomNum.Next(0, 255));

                if (shroomsControlTimer >= 80 && isShroomsControls == false)
                {
                    isShroomsControls = true;
                }

                shroomsControlTimer++;
                shroomsTimer--;
            }
            else if (shroomsTimer <= 0 && isShrooms == true)
            {
                isShrooms         = isShroomsControls = false;
                paddleBrush.Color = ballBrush.Color = Color.White;
            }

            if (blindfoldTimer > 0 && isBlindfold == true)
            {
                blindfoldTimer--;
            }
            else if (blindfoldTimer <= 0 && isBlindfold == true)
            {
                isBlindfold = false;
            }


            // Moves powerups
            MovePowerups(powerUps);

            // Check for collision with powerups and paddle
            CollidePowerUps(paddle);
            CollidePowerUps(paddle2);

            #endregion

            // Moves ball
            ball.Move();

            // Check for collision with top and side walls
            ball.WallCollision(this);

            // Check for collision of ball with paddle, (incl. paddle movement)

            ticksSinceHit = ball.PaddleCollision(paddle, leftArrowDown, rightArrowDown, ticksSinceHit);
            ticksSinceHit = ball.PaddleCollision(paddle2, aKeyDown, dKeyDown, ticksSinceHit);

            // Check if ball has collided with any of player 1 blocks
            foreach (Block b in blocks1p)
            {
                if (ball.BlockCollision(b))
                {
                    b.hp--;
                    if (b.hp == 0)
                    {
                        blocks1p.Remove(b);
                    }
                    //reduce life of player
                    p1HP--;

                    Random n = new Random();
                    if (n.Next(0, 1) == 0)
                    {
                        PowerUp p = new PowerUp(b.x, b.y, 20, -3, n.Next(0, 7));
                        powerUps.Add(p);
                    }

                    hpLabelp1.Text = "Player 1 HP: " + p1HP.ToString();
                    if (blocks1p.Count == 0 && p1HP <= 0)//if player 1 runs out of blocks
                    {
                        gameTimer.Enabled = false;
                        player1Won        = false;
                        player2Won        = true;
                        OnEnd();
                    }

                    break;
                }
            }
            // Check if ball has collided with any of player 2 blocks
            foreach (Block b in blocks2p)
            {
                if (ball.BlockCollision(b))
                {
                    b.hp--;
                    if (b.hp == 0)
                    {
                        blocks2p.Remove(b);
                    }

                    p2HP--;

                    Random n = new Random();
                    if (n.Next(0, 1) == 0)
                    {
                        PowerUp p = new PowerUp(b.x, b.y, 20, 3, n.Next(0, 7));
                        powerUps.Add(p);
                    }

                    hpLabelp2.Text = "Player 2 HP: " + p2HP.ToString();
                    if (blocks2p.Count == 0 && p2HP <= 0)
                    {
                        gameTimer.Enabled = false;
                        player2Won        = false;
                        player1Won        = true;
                        OnEnd();
                    }

                    break;
                }
            }

            // Check for ball hitting bottom of screen
            if (ball.BottomCollision(this))
            {
                // Moves the ball back to origin
                ball.ySpeed *= -1;
            }

            //redraw the screen
            Refresh();
        }
        private void gameTimer_Tick(object sender, EventArgs e)
        {
            //pause the game
            if (gamePaused == true)
            {
                gameTimer.Enabled = false;
            }

            // Move the paddle
            if (leftArrowDown && paddle.x > 0)
            {
                paddle.Move("left");
            }
            if (rightArrowDown && paddle.x < (this.Width - paddle.width))
            {
                paddle.Move("right");
            }

            if (escDown == true)
            {
                gamePaused = !gamePaused;
            }

            // Move ball
            ball.Move();

            //Move powerups
            foreach (PowerUp p in powers)
            {
                p.Move();
            }

            // Check for collision with top and side walls
            ball.WallCollision(this);

            // Check for ball hitting bottom of screen
            foreach (Ball b in ballList)
            {
                if (ballList.Count() < 1)
                {
                    if (b.BottomCollision(this))
                    {
                        ballList.Remove(b);
                    }
                }

                if (ballList.Count() == 1)
                {
                    if (b.BottomCollision(this))
                    {
                        lives--;

                        // Moves the ball back to origin
                        b.x      = ((paddle.x - (ball.size / 2)) + (paddle.width / 2));
                        b.y      = (this.Height - paddle.height) - 85;
                        b.xSpeed = 6;
                        b.ySpeed = 6;
                        b.size   = 20;

                        Refresh();


                        if (lives == 0)
                        {
                            gameTimer.Enabled = false;
                            OnEnd();
                        }
                        Thread.Sleep(2000);
                    }
                }
            }


            if (ballList.Count() == 0)
            {
                lives--;

                // Moves the ball back to origin
                int ballX    = ((paddle.x - (ball.size / 2)) + (paddle.width / 2));
                int ballY    = (this.Height - paddle.height) - 85;
                int xSpeed   = 6;
                int ySpeed   = 6;
                int ballSize = 20;

                ball = new Ball(ballX, ballY, xSpeed, ySpeed, ballSize);
                ballList.Add(ball);

                if (lives == 0)
                {
                    gameTimer.Enabled = false;
                    OnEnd();
                }
            }

            // Check for collision of ball with paddle, (incl. paddle movement)
            ball.PaddleCollision(paddle, leftArrowDown, rightArrowDown);

            // Check if ball has collided with any blocks
            foreach (Block b in blocks)
            {
                if (ball.BlockCollision(b))
                {
                    --b.hp;
                    //blocks.Remove(b);
                    int blockX    = b.x;
                    int blockY    = b.y + b.height;
                    int blockSize = b.width;

                    if (b.hp == 0)
                    {
                        blocks.Remove(b);

                        score = score + 100 * scoreMult;
                        double d        = score / 500;
                        double scoreint = Math.Round(d);

                        if (scoreint > lastPower)
                        {
                            lastPower = scoreint;
                            NumberGen();
                            int powertype = powerValue;

                            PowerUp power = new PowerUp(blockSize / 2 + blockX, blockY, powerupSpeed, 15, powertype);
                            powers.Add(power);
                        }
                    }

                    if (blocks.Count == 0)
                    {
                        currentLevel++;
                        NewLevel();
                    }

                    break;
                }
            }

            //redraw the screen
            Refresh();
        }