Пример #1
0
        void PlayerWinner()
        {
            ball.SpriteSetPos(screensize.X / 2, screensize.Y / 2);

            P2paddle.SpriteSetPos_Y(ball.GetSpritePos().Y);
            P1paddle.SpriteSetPos_Y(ball.GetSpritePos().Y);

            YouWon = true;

            if (Keyboard.GetState().IsKeyDown(Keys.Enter))
            {
                GameReset();
                P1score = 0;
                P2score = 0;
            }
        }
Пример #2
0
        void AIupdate()
        {
            Ai_dirto = ball.GetSpritePos() - P2paddle.GetSpritePos();
            Aispeed = Ai_dirto.Length() * Aispeed_previous;
            Ai_dirto.Normalize();

            Ai_vel = Ai_dirto * Aispeed;
            P2paddle.SpriteSetPos_Y(P2paddle.GetSpritePos().Y + Ai_vel.Y);

            if (difficulty == EDifficulty.EASY)
            {
                if (ball_speed.Y >= 5f)
                {
                    Aispeed_previous = +0.2f;
                }
                else
                    Aispeed_previous = 0.1f;
            }
            if (difficulty == EDifficulty.MEDIUM)
            {
                if (ball_speed.Y >= 8f)
                {
                    Aispeed_previous = +0.2f;
                }
                else
                    Aispeed_previous = 0.15f;
            }
            if (difficulty == EDifficulty.HARD)
            {
                if (ball_speed.Y >= 8f)
                {
                    Aispeed_previous = +0.2f;
                }
                else
                    Aispeed_previous = 0.2f;
            }
        }
Пример #3
0
        protected override void Update(GameTime gameTime)
        {
            if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape))
                Exit();

            if (gamemode == EGameMode.MENU)
            {
                //Setup Difficulty
                switch (difficulty)
                {
                    case EDifficulty.EASY: DifficultyEasy(); break;
                    case EDifficulty.MEDIUM: DifficultyMedium(); break;
                    case EDifficulty.HARD: DifficultyHard(); break;
                }

                //mouse
                mouse_rect.X = Mouse.GetState().X;
                mouse_rect.Y = Mouse.GetState().Y;
                IsMouseVisible = true;

                //menu
                //play button
                if (checkcollision(mouse_rect, playbtn.GetColbox()))
                {
                    playbtn.SpriteSetPos(screensize.X / 2 - 2, (screensize.Y / 2 + 64));
                    playbtn_font_pos.X = playbtn.GetSpritePos().X;

                    if (Mouse.GetState().LeftButton == ButtonState.Pressed)
                    {
                        gamemode = EGameMode.PLAY;
                        playstyle = EPlayStyle.ONEP;
                    }
                }
                else
                {
                    playbtn.SpriteSetPos(screensize.X / 2, screensize.Y / 2 + 64);
                    playbtn_font_pos.X = playbtn.GetSpritePos().X;
                }
                //multiplayer button
                if (checkcollision(mouse_rect, multibtn.GetColbox()))
                {
                    multibtn.SpriteSetPos(screensize.X / 2 - 2, (screensize.Y / 2 + 144));
                    multibtn_font_pos.X = multibtn.GetSpritePos().X;

                    if (Mouse.GetState().LeftButton == ButtonState.Pressed)
                    {
                        gamemode = EGameMode.PLAY;
                        playstyle = EPlayStyle.TWOP;
                    }
                }
                else
                {
                    multibtn.SpriteSetPos(screensize.X / 2, screensize.Y / 2 + 144);
                    multibtn_font_pos.X = multibtn.GetSpritePos().X;
                }
                //Help button
                if (checkcollision(mouse_rect, helpbtn.GetColbox()))
                {
                    helpbtn.SpriteSetPos(screensize.X / 2 - 126, (screensize.Y / 2 + 208));
                    helpbtn_font_pos.X = helpbtn.GetSpritePos().X;

                    if (Mouse.GetState().LeftButton == ButtonState.Pressed)
                    {
                        gamemode = EGameMode.HELP;
                    }
                }
                else
                {
                    helpbtn.SpriteSetPos(screensize.X / 2 - 124, screensize.Y / 2 + 208);
                    helpbtn_font_pos.X = helpbtn.GetSpritePos().X;
                }
                //fullscreen button
                if (checkcollision(mouse_rect, resbtn.GetColbox()))
                {
                    resbtn.SpriteSetPos(screensize.X / 2 - 157, screensize.Y / 2 - 48);
                    resbtn_font_pos.X = resbtn.GetSpritePos().X;

                    if (Mouse.GetState().LeftButton == ButtonState.Pressed)
                    {
                        if (isfullscreen != true)
                        {
                            isfullscreen = true;
                        }
                        else
                        {
                            isfullscreen = false;
                        }
                    }
                }
                else
                {
                    resbtn.SpriteSetPos(screensize.X / 2 - 155, screensize.Y / 2 - 48);
                    resbtn_font_pos.X = resbtn.GetSpritePos().X;
                }
                //Difficulty button
                if (checkcollision(mouse_rect, difbtn.GetColbox()))
                {
                    difbtn.SpriteSetPos(screensize.X / 2 - 132, screensize.Y / 2);
                    difbtn_font_pos.X = difbtn.GetSpritePos().X;

                    if (oldMState.LeftButton == ButtonState.Released && Mouse.GetState().LeftButton == ButtonState.Pressed)
                    {
                        if (difficulty == EDifficulty.EASY)
                            difficulty = EDifficulty.MEDIUM;
                        else if (difficulty == EDifficulty.MEDIUM)
                            difficulty = EDifficulty.HARD;
                        else if (difficulty == EDifficulty.HARD)
                            difficulty = EDifficulty.EASY;
                    }
                    oldMState = Mouse.GetState();

                }
                else
                {
                    difbtn.SpriteSetPos(screensize.X / 2 - 130, screensize.Y / 2);
                    difbtn_font_pos.X = difbtn.GetSpritePos().X;
                }
                //score button
                if (checkcollision(mouse_rect, scorebtn.GetColbox()))
                {
                    scorebtn.SpriteSetPos(screensize.X / 2 + 155, screensize.Y / 2 - 48);
                    scorebtn_font_pos.X = scorebtn.GetSpritePos().X;

                    if (oldMState.LeftButton == ButtonState.Released && Mouse.GetState().LeftButton == ButtonState.Pressed)
                    {
                        BestOutOf++;
                    }
                    else if (oldMState.RightButton == ButtonState.Released && Mouse.GetState().RightButton == ButtonState.Pressed)
                    {
                        BestOutOf--;
                    }
                    oldMState = Mouse.GetState();

                    if (BestOutOf >= 1)
                    {
                        BestOfOn = true;
                    }
                    if (BestOutOf <= 0)
                    {
                        BestOutOf = 0;
                        BestOfOn = false;
                    }
                    if (BestOutOf == 11)
                    {
                        BestOutOf = 0;
                        BestOfOn = false;
                    }
                }
                else
                {
                    scorebtn.SpriteSetPos(screensize.X / 2 + 157, screensize.Y / 2 - 48);
                    scorebtn_font_pos.X = scorebtn.GetSpritePos().X;
                }

                //fullscreen
                if (isfullscreen == true)
                {
                    graphics.IsFullScreen = true;
                    graphics.ApplyChanges();
                }
                else
                {
                    graphics.IsFullScreen = false;
                    graphics.ApplyChanges();
                }
            }
            if (gamemode == EGameMode.HELP)
            {
                if (Keyboard.GetState().IsKeyDown(Keys.Back))
                {
                    gamemode = EGameMode.MENU;
                }
            }
            if (gamemode == EGameMode.PLAY)
            {
                if (Keyboard.GetState().IsKeyDown(Keys.Back))
                {
                    gamemode = EGameMode.MENU;
                    GameReset();
                }

                //winner counter
                if (BestOfOn == true)
                {
                    if (P1score == BestOutOf)
                    {
                        PlayerWinner();
                    }

                    if (P2score == BestOutOf)
                    {
                        PlayerWinner();
                    }
                }

                //mouse Update
                IsMouseVisible = false;

                if (playstyle == EPlayStyle.TWOP)
                {
                    TwoPlayer();
                }
                else
                {
                    SinglePlayer();
                }

                //Player 1 paddle Rectangle update
                P1paddle.SpriteSetColbox();

                //Player 2 paddle Rectangle update
                P2paddle.SpriteSetColbox();

                //the ball rectangle update
                ball.SpriteSetColbox();

                //collision detection
                if (checkcollision(P1paddle.GetColbox(), ball.GetColbox()))
                {
                    //check pos of edge of paddle for strong angle hit
                    if (P1paddle.GetSpritePos().Y - 32 >= ball.GetSpritePos().Y)
                    {
                        Bdown = false;
                        ball_speed.Y += 2f;
                        ball_speed.X += 1f;
                    }
                    if (P1paddle.GetSpritePos().Y + 32 <= ball.GetSpritePos().Y)
                    {
                        Bdown = true;
                        ball_speed.Y += 2f;
                        ball_speed.X += 1f;
                    }
                    //check pos of edge of paddle for normal angle hit
                    if (P1paddle.GetSpritePos().Y - 16 >= ball.GetSpritePos().Y)
                    {
                        Bdown = false;
                        ball_speed.Y += 1f;
                    }
                    if (P1paddle.GetSpritePos().Y + 16 <= ball.GetSpritePos().Y)
                    {
                        Bdown = true;
                        ball_speed.Y += 1f;
                    }
                    //check pos of edge of paddle for normal hit
                    if (P1paddle.GetSpritePos().Y >= ball.GetSpritePos().Y)
                    {
                        Bdown = false;
                        ball_speed.Y -= 0.5f;
                    }
                    if (P1paddle.GetSpritePos().Y <= ball.GetSpritePos().Y)
                    {
                        Bdown = true;
                        ball_speed.Y -= 0.5f;
                    }

                    Bright = true;
                    ball_speed.X += 0.1f;

                    paddle_sound.Play();
                }

                if (checkcollision(ball.GetColbox(), P2paddle.GetColbox()))
                {
                    //check pos of edge of paddle for strong angle hit
                    if (P2paddle.GetSpritePos().Y - 32 >= ball.GetSpritePos().Y)
                    {
                        Bdown = false;
                        ball_speed.Y += 2f;
                        ball_speed.X += 1f;
                    }
                    if (P2paddle.GetSpritePos().Y + 32 <= ball.GetSpritePos().Y)
                    {
                        Bdown = true;
                        ball_speed.Y += 2f;
                        ball_speed.X += 1f;
                    }
                    //check pos of edge of paddle for normal angle hit
                    if (P2paddle.GetSpritePos().Y - 16 >= ball.GetSpritePos().Y)
                    {
                        Bdown = false;
                        ball_speed.Y += 1f;
                    }
                    if (P2paddle.GetSpritePos().Y + 16 <= ball.GetSpritePos().Y)
                    {
                        Bdown = true;
                        ball_speed.Y += 1f;
                    }
                    //check pos of edge of paddle for normal hit
                    if (P2paddle.GetSpritePos().Y >= ball.GetSpritePos().Y)
                    {
                        Bdown = false;
                        ball_speed.Y -= 0.5f;
                    }
                    if (P2paddle.GetSpritePos().Y <= ball.GetSpritePos().Y)
                    {
                        Bdown = true;
                        ball_speed.Y -= 0.5f;
                    }

                    //Bleft = true;
                    Bright = false;
                    ball_speed.X += 0.1f;

                    paddle_sound.Play();

                }
                //hits Y pos
                if (ball.GetSpritePos().Y < 0)
                {
                    rebound_sound.Play();

                    Bdown = true;

                }
                if (ball.GetSpritePos().Y > screensize.Y - 15)
                {
                    rebound_sound.Play();

                    Bdown = false;

                }
                //hitsX pos with reset
                if (ball.GetSpritePos().X < 0)
                {
                    goal_sound.Play();

                    P2score++;

                    GameReset();
                }
                if (ball.GetSpritePos().X > screensize.X)
                {
                    goal_sound.Play();

                    P1score++;

                    GameReset();
                }

                //random start direction
                if (ballrand_value == 1)
                {
                    Bdown = true;
                    Bright = true;
                    ballrand_value = 0;
                }
                if (ballrand_value == 2)
                {
                    Bdown = true;
                    Bright = false;
                    ballrand_value = 0;
                }
                if (ballrand_value == 3)
                {
                    Bdown = false;
                    Bright = true;
                    ballrand_value = 0;
                }
                if (ballrand_value == 4)
                {
                    Bdown = false;
                    Bright = false;
                    ballrand_value = 0;
                }

                if (Bdown == true)
                {
                    ball.SpriteSetPos_Y(ball.GetSpritePos().Y + ball_speed.Y);
                }
                else
                {
                    ball.SpriteSetPos_Y(ball.GetSpritePos().Y - ball_speed.Y);
                }
                if (Bright == true)
                {
                    ball.SpriteSetPos_X(ball.GetSpritePos().X + ball_speed.X);
                }
                else
                {
                    ball.SpriteSetPos_X(ball.GetSpritePos().X - ball_speed.X);
                }

                // make sure the Y speed doesnt go into the minus
                if (ball_speed.Y <= 0.1f)
                {
                    ball_speed.Y = 1f;
                }

            }

            base.Update(gameTime);
        }