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