Exemplo n.º 1
0
 public Wall(Rectangle position)
 {
     base.position = position;
     type          = Global.GameObjectType.WALL;
     ListOfObjectsWithCollision.Add(this);
     side_ratio = (double)position.Width / (double)position.Height;
 }
Exemplo n.º 2
0
 public Paddle(Rectangle position)
 {
     base.position = position;
     type          = GameObjectType.PADDLE;
     ListOfObjectsWithCollision.Add(this);
     side_ratio = (double)position.Width / (double)position.Height;
 }
Exemplo n.º 3
0
        public void Update_position(float delta)
        {
            int old_x = position.X;
            int old_y = position.Y;

            position.X += (int)(speed.x_direction * delta);
            position.Y += (int)(speed.y_direction * delta);


            foreach (Collision gameObject in ListOfObjectsWithCollision)
            {
                if (Collided(gameObject) && !isInPaddle)
                {
                    position.X = old_x;
                    position.Y = old_y;

                    // calculate distance between object and ball
                    double dist_x = Math.Abs(position.Center.X - gameObject.position.Center.X);
                    double dist_y = Math.Abs(position.Center.Y - gameObject.position.Center.Y);

                    double ratio = dist_x / dist_y;

                    if (ratio < gameObject.side_ratio && !isInPaddle)
                    {
                        speed.y_direction *= -1;

                        // odbijanie pilki od paletki ma byc podobne do tego, jak jest w arkanoidach:
                        if (gameObject.type.Equals(GameObjectType.PADDLE))
                        {
                            double x1 = 0.3, y1 = -0.3;
                            if (dist_x > 40)
                            {
                                x1 = 0.384513829233677;
                                y1 = -0.179301743237636;
                            }

                            if (position.Center.X < gameObject.position.Center.X - 10) // ball is on left side
                            {
                                speed.x_direction = -x1;
                                speed.y_direction = y1;
                            }
                            else if (position.Center.X > gameObject.position.Center.X + 10)
                            {
                                speed.x_direction = x1;
                                speed.y_direction = y1;
                            }
                            else // around middle of paddle
                            {
                                speed.y_direction = y1;
                                if (speed.x_direction < 0)
                                {
                                    speed.x_direction = -0.3;
                                }
                                else
                                {
                                    speed.x_direction = 0.3;
                                }
                            }
                        }

                        // jeżeli piłka uderzyła w paletke gracza, to usuń go z listy obiektów kolizyjnych
                        // i dodaj przeciwnika do niej przeciwnika (i vice versa)
                        if (gameObject.type.Equals(GameObjectType.PADDLE))
                        {
                            game.player_turn = !game.player_turn;
                            if (game.player_turn)
                            {
                                ListOfObjectsWithCollision.Add(game.paddle);
                                ListOfObjectsWithCollision.Remove(game.paddle_opponent);
                            }
                            else
                            {
                                ListOfObjectsWithCollision.Add(game.paddle_opponent);
                                ListOfObjectsWithCollision.Remove(game.paddle);
                            }
                        }
                    }
                    else
                    {
                        // specyficzny przypadek, gdzie paletka uderza piłkę bokiem
                        if (gameObject.type.Equals(GameObjectType.PADDLE))
                        {
                            Paddle paddle = (Paddle)gameObject;
                            if (speed.x_direction > 0)
                            {
                                if (paddle.lastMove.Equals(LastMove.LEFT))
                                {
                                    speed.x_direction *= -1;
                                }
                            }
                            else
                            if (paddle.lastMove.Equals(LastMove.RIGHT))
                            {
                                speed.x_direction *= -1;
                            }
                        }
                        else
                        {
                            speed.x_direction *= -1;
                        }
                    }

                    if (gameObject.type.Equals(GameObjectType.PADDLE))
                    {
                        isInPaddle = true;
                    }

                    if (gameObject.type.Equals(GameObjectType.LOSE_AREA))
                    {
                        // PRZEGRALES
                        position.X        = 600;
                        position.Y        = 400;
                        speed.x_direction = 0.3;
                        speed.y_direction = -0.3;

                        isFail = true;
                    }

                    if (gameObject.type.Equals(GameObjectType.GOAL))
                    {
                        // PUNKT
                        //Console.WriteLine("Masz punkt");
                        isGoal = true;
                    }

                    break;
                }
                else if (gameObject.type.Equals(GameObjectType.PADDLE) && !Collided(gameObject))
                {
                    isInPaddle = false;
                }
            }
        }