Example #1
0
        /// <summary>
        /// Describe the interraction between player and the levels objects (spikes, slims, doors and keys)
        /// Is not used if the player is dead
        /// This function is executed inside of the BackgroundWorker bw_action
        /// </summary>
        private void actions()
        {
            foreach (PictureBox rect in this.Controls)
            {
                switch (rect.Tag)
                {
                case "key":
                    if (player.Bounds.IntersectsWith(rect.Bounds) && rect.Enabled != false)
                    {
                        switch (rect.Name)
                        {
                        case "blueKey":
                            blueKey.Taken = true;
                            rect.Location = new Point(275, 30);
                            rect.Tag      = "inventory";

                            break;

                        case "greenKey":
                            greenKey.Taken = true;
                            rect.Location  = new Point(345, 30);
                            rect.Tag       = "inventory";
                            break;

                        case "redKey":
                            redKey.Taken  = true;
                            rect.Location = new Point(415, 30);
                            rect.Tag      = "inventory";
                            break;

                        case "yellowKey":
                            yellowKey.Taken = true;
                            rect.Location   = new Point(485, 30);
                            rect.Tag        = "inventory";
                            break;

                        default:
                            break;
                        }
                    }
                    break;

                case "door":
                    //remplir l'interaction avec le joueur en fonction des clés en sa possession
                    if (player.Bounds.IntersectsWith(rect.Bounds) && player.Action)
                    {
                        switch (rect.Name)
                        {
                        case "endDoor":
                            //La clé bleue doit toujours être celle de la porte finale
                            if (blueKey.Taken && !endDoor.Open)
                            {
                                endDoor.Open  = true;
                                rect.Image    = Image.FromFile(Application.StartupPath + @"\res\door.open.png");
                                player.Action = false;
                            }
                            else if (endDoor.Open)
                            {
                                ClearForm(this, typeof(PictureBox));
                                //Switch qui permet de lancer le bon niveau en fonction de la porte prise
                                switch (endDoor.Output)
                                {
                                case DoorsOutputs.Level1:
                                    Level1();
                                    break;

                                case DoorsOutputs.Level2:
                                    Level2();
                                    break;

                                case DoorsOutputs.Level3:
                                    Level3();
                                    break;

                                default:
                                    break;
                                }
                            }
                            break;

                        default:
                            break;
                        }
                    }
                    break;

                case "spikes":
                    if (spike.Hurt)
                    {
                        if (player.Right <= rect.Left + rect.Width / 2 + player.Width / 2 && player.Bounds.IntersectsWith(rect.Bounds))
                        {
                            player.Lifes -= spike.DealDammage();
                            player.RefillInertia();
                            player.Jump  = true;
                            player.Left -= spike.PushPlayer();
                        }
                        else if (player.Bounds.IntersectsWith(rect.Bounds))
                        {
                            player.Lifes -= spike.DealDammage();
                            player.RefillInertia();
                            player.Jump  = true;
                            player.Left += spike.PushPlayer();
                        }
                    }
                    break;

                case "slims":
                    if (player.Bounds.IntersectsWith(rect.Bounds))
                    {
                        player.Lifes -= slims[0].DealDammage();
                        player.RefillInertia();
                        player.Jump = true;
                    }
                    break;

                default:
                    break;
                }
            }
        }