예제 #1
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;
            }
        }
예제 #2
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;
        }