Étiqueté : ,

Vous lisez 1 fil de discussion
  • Auteur
    Messages
    • #66412
      Yuneraa
      Participant

      Bonjour,

      Dans le but de m’entraîner après l’atelier Casse-briques, je me suis lancée le défi de faire un Pong. Seulement, après de nombreux essais (cela fait 2h30 que j’y suis, sans compter hier !) je n’arrive pas à programmer les collisions de la balle sur la raquette. J’ai tenté de faire des schémas pour bien me représenter ce que j’essayais de faire, j’ai revisionné la vidéo correspondante de l’atelier Casse-briques en dernier recours en essayant de bien comprendre (je pensais avoir compris, mais ce n’est visiblement pas le cas), mais rien n’y fait !

      Pouvez-vous m’aider s’il vous plaît ?

      Voici mon code :

      -- Projet Pong
      
      -- Cette ligne permet d'afficher des traces dans la console pendant l'éxécution
      io.stdout:setvbuf('no')
      
      -- Cette ligne permet de déboguer pas à pas dans ZeroBraneStudio
      if arg[#arg]== "-debug" then require("mobdebog").start() end
      
      pad1 = {}
      pad1.x = 0
      pad1.y = 0
      pad1.hauteur = 80
      pad1.largeur = 20
      
      pad2 = {}
      pad2.x = 780
      pad2.y = 0
      pad2.hauteur = 80
      pad2.largeur = 20
      
      balle = {}
      balle.x = 0
      balle.y = 0
      balle.rayon = 12
      balle.vx = 0
      balle.vy = 0
      
      function demarre ()
        
        balle.colle = true
      end
      
      function love.load()
        
        largeur = love.graphics.getWidth()
        hauteur = love.graphics.getHeight()
        
        demarre()
      end
      
      function love.update(dt)
        
        if pad1.y <= hauteur - hauteur then
          pad1.y = hauteur - hauteur
        end
        
        if pad1.y >= hauteur - pad1.hauteur then
          pad1.y = hauteur - pad1.hauteur
        end
      
        if pad2.y <= hauteur - hauteur then
            pad2.y = hauteur - hauteur
        end
        
        if pad2.y >= hauteur - pad2.hauteur then
          pad2.y = hauteur - pad2.hauteur
        end
        
        if balle.colle == true then
          balle.x = pad1.x + (pad1.largeur + balle.rayon)
          balle.y = pad1.y + (pad1.hauteur / 2)
        else
          balle.x = balle.x + (balle.vx*dt)
          balle.y = balle.y + (balle.vy*dt)
        end
        
        if balle.y > hauteur then
          balle.vy = 0 - balle.vy
          end
        
        if balle.y < 0 then
          balle.vy = 0 - balle.vy
        end
        
        if balle.x < 0 then
          balle.colle = true
        end
        
        if balle.x > largeur then
          balle.colle = true
        end
        
        -- Début du problème (ça fait bugger tout mon code :') ) 
        
        CollisionPad2 = pad2.x - balle.rayon
        
        if balle.x > CollisionPad2 then
            dist = math.abs(pad2.y - balle.y)
            if dist < pad2.hauteur/ 2 then
              balle.vx = - pad2.x + balle.vx
              balle.x = CollisionPad2
            end
            
        CollisionPad1 = pad1.largeur + balle.rayon
        
        if balle.x > CollisionPad1 then
          dist = math.abs(pad1.y - balle.y)
          if dist < pad1.hauteur/ 2 then
            balle.vx = pad1.largeur - balle.vx
            balle.x = CollisionPad1
          end
        end
        
        -- Fin du problème
        
      end
      
      function love.draw()
        
        love.graphics.rectangle ("fill", pad1.x, pad1.y, pad1.largeur, pad1.hauteur)
        love.graphics.rectangle ("fill", pad2.x, pad2.y, pad2.largeur, pad2.hauteur) 
        love.graphics.circle("fill", balle.x, balle.y, balle.rayon)
      end
      
      function love.keypressed(key, scancode, isrepeat)
          if key == "z" then
            pad1.y = pad1.y - (pad1.hauteur / 1.5)
          end
        
          if key == "s" then
            pad1.y = pad1.y + (pad1.hauteur / 1.5)
          end
          
          if key == "up" then
            pad2.y = pad2.y - (pad2.hauteur / 1.5)
          end
          
          if key == "down" then
            pad2.y = pad2.y + (pad2.hauteur / 1.5)
          end
          
          -- Petit problème dans le coin, si j'appuie plusieurs fois sur barre espace (changement de direction de la balle, comme au lancement du jeu)
          if key == "space" then
            balle.colle = false
            balle.vx = 200
            balle.vy = 200
          end
        end
      end
      

      Merci d’avance !

    • #66417
      Yuneraa
      Participant

      C’est bon, problème réglé !

Vous lisez 1 fil de discussion
  • Vous devez être connecté pour répondre à ce sujet.