/// <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; } }
/// <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; }