예제 #1
0
        public static Boolean testCollision(Object obj1, BoundingBox obj2)
        {
            // On réalise le mvt dans une bounding box de test et on renvoie le résultat de l'intersection avec l'objet obj
            Vector3 upperLeftCorner   = new Vector3(0, 0, 0);
            Vector3 bottomRightCorner = new Vector3(0, 0, 0);

            if (obj1 is Balle)
            {
                Balle balle = (Balle)obj1;
                upperLeftCorner.X   = balle.Uneballe.Position.X + balle.Uneballe.Vitesse.X;
                upperLeftCorner.Y   = balle.Uneballe.Position.Y + balle.Uneballe.Vitesse.Y;
                bottomRightCorner.X = balle.Uneballe.Position.X + balle.Uneballe.Size.X + balle.Uneballe.Vitesse.X;
                bottomRightCorner.Y = balle.Uneballe.Position.Y + balle.Uneballe.Size.Y + balle.Uneballe.Vitesse.Y;
            }
            else if (obj1 is Raquette)
            {
                Raquette raquette = (Raquette)obj1;
                upperLeftCorner.X   = raquette.Uneraquette.Position.X;
                upperLeftCorner.Y   = raquette.Uneraquette.Position.Y + raquette.Uneraquette.Vitesse.Y;
                bottomRightCorner.X = raquette.Uneraquette.Position.X + raquette.Uneraquette.Size.X;
                bottomRightCorner.Y = raquette.Uneraquette.Position.Y + raquette.Uneraquette.Size.Y + raquette.Uneraquette.Vitesse.Y;
            }

            BoundingBox bbox_test = new BoundingBox(upperLeftCorner, bottomRightCorner);

            return(bbox_test.Intersects(obj2));
        }
예제 #2
0
        /// <summary>
        /// Calcule quel côté de la brique la balle a touché
        /// </summary>
        /// <param name="balle">L'objet balle</param>
        /// <param name="brique">L'objet brique</param>
        static public void Edge(Balle balle, Briques brique)
        {
            // on calcule la distance la plus courte du côté gauche,
            // et on s'assure qu'elle sera toujours plus grande que 0
            int left = brique.X - (balle.X + balle.Diametre);

            left = (left < 0) ? -left : left;

            // on calcule la distance la plus courte du côté haut,
            // et on s'assure qu'elle sera toujours plus grande que 0
            int top = brique.Y - (balle.Y + balle.Diametre);

            top = (top < 0) ? -top : top;

            // on calcule la distance la plus courte du côté droite,
            // et on s'assure qu'elle sera toujours plus grande que 0
            int right = (brique.X + brique.Width) - balle.X;

            right = (right < 0) ? -right : right;

            // on calcule la distance la plus courte du côté bas,
            // et on s'assure qu'elle sera toujours plus grande que 0
            int bottom = (brique.Y + brique.Height) - balle.Y;

            bottom = (bottom < 0) ? -bottom : bottom;

            // on teste de quel côté (gauche ou droite) la balle est le plus
            // proche de la brique
            if (left < top && left < right && left < bottom)
            {
                balle.OffsetX = -balle.Speed;
            }
            else if (right < left && right < top && right < bottom)
            {
                balle.OffsetX = balle.Speed;
            }

            // on teste de quel côté (haut ou bas) la balle est le plus
            // proche de la brique
            if (top < left && top < right && top < bottom)
            {
                balle.OffsetY = -balle.Speed;
            }
            else if (bottom < left && bottom < right && bottom < top)
            {
                balle.OffsetY = balle.Speed;
            }
        }
예제 #3
0
        /// <summary>
        /// Allows the game to perform any initialization it needs to before starting to run.
        /// This is where it can query for any required services and load any non-graphic
        /// related content.  Calling base.Initialize will enumerate through any components
        /// and initialize them as well.
        /// </summary>
        protected override void Initialize()
        {
            int offsetX = 40;
            int offsetY = 40;

            TAILLEH       = 1024; // this.GraphicsDevice.Viewport.Width à mettre + tard
            TAILLEV       = 660;  //this.GraphicsDevice.Viewport.Height à mettre + tard
            TAILLEBRIQUEX = 119;  //trouver la bonne équation à mettre
            TAILLEBRIQUEY = 50;   // same

            // TODO: Add your initialization logic here
            uneballe          = new Balle(this, TAILLEH, TAILLEV);
            raquette          = new Raquette(this, TAILLEH, TAILLEV);
            uneballe.Raquette = raquette;
            raquette.Balle    = uneballe;
            mesBriques        = new Brique[NBLIGNES, NBBRIQUES];
            // On passe à la balle le tableau de briques
            int xpos, ypos;

            for (int x = 0; x < NBLIGNES; x++)
            {
                ypos = offsetY + x * TAILLEBRIQUEY;
                for (int y = 0; y < NBBRIQUES; y++)
                {
                    xpos = offsetX + y * TAILLEBRIQUEX;

                    Vector2 pos = new Vector2(xpos, ypos);
                    // On mémorise les positions de la brique
                    mesBriques[x, y] = new Brique(this, pos, new Vector2(TAILLEBRIQUEX, TAILLEBRIQUEY));
                }
            }

            uneballe.MesBriquesballe = mesBriques;

            base.Initialize();
        }
예제 #4
0
        /// <summary>
        /// Est appelé lorsque l'application est en construction
        /// </summary>
        /// <param name="sender">L'objet qui a appelé</param>
        /// <param name="e">Ce que l'on peut utiliser</param>
        private void MainFrame_Load(object sender, EventArgs e)
        {
            if (!File.Exists(m_PauseImgFile))
            {
                MessageBox.Show("L'image " + m_PauseImgFile + " n'a pas pu être chargée. Le programme doit être arrêté.", "Casse briques", MessageBoxButtons.OK, MessageBoxIcon.Error);
                this.Close();
            }
            else
            {
                m_PauseImg = new Bitmap(m_PauseImgFile);
            }

            m_PauseImg.MakeTransparent(Color.FromArgb(0, 255, 255));

            m_Barre = new Barre();

            if (m_Barre.LoadImage(m_BarreImgFile, Color.FromArgb(0, 255, 255)) == false)
            {
                MessageBox.Show("L'image " + m_BarreImgFile + " n'a pas pu être chargée. Le programme doit être arrêté.", "Casse briques", MessageBoxButtons.OK, MessageBoxIcon.Error);
                this.Close();
            }

            m_Balle = new Balle();

            if (m_Balle.LoadImage(m_BalleImgFile, Color.FromArgb(0, 255, 255)) == false)
            {
                MessageBox.Show("L'image " + m_BalleImgFile + " n'a pas pu être chargée. Le programme doit être arrêté.", "Casse briques", MessageBoxButtons.OK, MessageBoxIcon.Error);
                this.Close();
            }

            m_Balle.X    = (pbDisplayer.Width / 2) - (m_Balle.Diametre / 2);
            m_Balle.Y    = (pbDisplayer.Height / 2) - (m_Balle.Diametre / 2);
            m_Balle.MaxX = pbDisplayer.Width - m_Balle.Diametre;
            m_Balle.MaxY = pbDisplayer.Height - m_Balle.Diametre;

            for (int i = 0; i < 10; ++i)
            {
                for (int j = 0; j < 5; ++j)
                {
                    m_Briques[i, j] = new Briques();
                    if (m_Briques[i, j].LoadImage(m_BriquesImgFile, Color.FromArgb(0, 255, 255)) == false)
                    {
                        MessageBox.Show("L'image " + m_BriquesImgFile + " n'a pas pu être chargée. Le programme doit être arrêté.", "Casse briques", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        this.Close();
                    }

                    int wallWidth     = ((m_Briques[0, 0].Width + 1) * m_Briques.GetLength(0));
                    int paddingWidth  = (pbDisplayer.Width - wallWidth) / 2;
                    int paddingHeight = 20;

                    m_Briques[i, j].X = paddingWidth + ((m_Briques[i, j].Width + 1) * i);
                    m_Briques[i, j].Y = paddingHeight + (m_Briques[i, j].Height + 1) * j;
                }
            }

            m_Music = new Music();

            if (m_Music.LoadTrack(m_MusiqueFile) == false)
            {
                MessageBox.Show("La musique " + m_MusiqueFile + " n'a pas pu être chargée. Le programme doit être arrêté.", "Casse briques", MessageBoxButtons.OK, MessageBoxIcon.Error);
                this.Close();
            }

            m_CanPlayMusic = m_Music.Play();

            this.DoubleBuffered = true;

            m_IsInitialized   = true;
            tmDisplay.Enabled = true;
        }