Pelota = class()
function Pelota:init()
self.posicion = vec2( WIDTH /2 , HEIGHT / 2)
self.radio = 18
self.velocidad = vec2(Gravity.x*30 , Gravity.y*30)
end
function Pelota:draw()
self.velocidad = vec2(Gravity.x*30 , Gravity.y*30)
ellipse (self.posicion.x , self.posicion.y , 2* self.radio)
end
function Pelota:paredes()
self.posicion = self.posicion + self.velocidad
if (self.posicion.x + self.radio) >= WIDTH then
self.posicion.x = WIDTH - self.radio
self.velocidad.x =  -self.velocidad.x
elseif (self.posicion.x - self.radio) <= 0 then
self.posicion.x = self.radio
self.velocidad.x = -self.velocidad.x
elseif (self.posicion.y + self.radio) >= HEIGHT then
self.posicion.y = HEIGHT - self.radio
self.velocidad.y = -self.velocidad.y
 elseif (self.posicion.y - self.radio) <= 0 then
self.posicion.y = self.radio
self.velocidad.y = -self.velocidad.y
return false
end
return true  
 end
function Pelota:derecha()
return self.posicion.x + self.radio
 end
function Pelota:izquierda()
return self.posicion.x - self.radio
end
function Pelota:arriba()
return self.posicion.y + self.radio
 end  
function Pelota:abajo()
return self.posicion.y - self.radio 
end
Bloques = class()
function Bloques:init(x, y , tonos) parameter.integer("Texture",1,2)
allTextures = { 
            "Cargo Bot:Codea Icon",
          }
 m = mesh()
 m.texture = allTextures[Texture]
  self.posicion = vec2(x , y)
 self.tamano = vec2(70 , 35)
 self.mesh = mesh()
 self.color1 = tonos
 self.mesh:addRect (self.posicion.x , self.posicion.y , self.tamano.x , self.tamano.y)
 local oscuro = self.color1:mix( color(400,400,400), 0.4 )
 self.mesh:color(1 , self.color1)
 self.mesh:color(2 , oscuro)
 self.mesh:color(3 , self.color1)
 self.mesh:color(4 , oscuro)
 self.mesh:color(5 , self.color1)
 self.mesh:color(6 , oscuro)
 self.mesh.shader = shader("Effects:Ripple")
 end
 function Bloques:draw()
 fill(42, 82, 201, 153)
 self.mesh.shader.time = ElapsedTime
 self.mesh.shader.freq =1.5 noStroke() self.mesh:draw() rectMode(CENTER)
 end
function Bloques:rebote(ball)
if ball:derecha() >= self:izquierda() and ball:izquierda() <= self:derecha() and
 ball:arriba() >= self:abajo() and ball:abajo() <= self:arriba() then
sound(DATA, "ZgBAZAA+Qi0IQ0IWAAAAAAubAz5sIgq/VgBKU0BKQUBfIWcQ")
 if ball.posicion.y <= self:arriba() and ball.posicion.y >= self:abajo() then
     ball.velocidad.x = -ball.velocidad.x
 else
     ball.velocidad.y = -ball.velocidad.y
 end
 return true
 end
 return false
 end
  function Bloques:derecha()
 return self.posicion.x + self.tamano.x / 2
 end
function Bloques:izquierda()
return self.posicion.x - self.tamano.x /2
 end
function Bloques:arriba()
 return self.posicion.y + self.tamano.y /2
 end
 function Bloques:abajo()
 return self.posicion.y - self.tamano.y /2
 end
 niveles = {
  {{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1},
  {1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1}},
 {{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1},
 {1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1}},
  {{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1},
  {1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1}},
  {{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1},
   {1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1}},
   {{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1}, 
   {1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1}},
  }
 displayMode(FULLSCREEN)
 ball = nil Bola_movimiento = false bloques = {} nivel=1 velocidad = 0   maximo_nivel = table.maxn(niveles)
 function setup()
 ball = Pelota()
 ball.velocidad.x = math.random(-3,3)
  Poner_bloques()
 end
 function Poner_bloques()
 for i = 1,8 do
c = obtenerColorPorNivel(i)
for x = 1,10 do
    if niveles[nivel][i][x] > 0 then
        table.insert(bloques, Bloques(35 + (x * 62), HEIGHT - (i * 35 + 35) , c))
        end
 end
 end
 end
 function obtenerColorPorNivel(fila)
  cambiarTono = fila * 35
 if nivel % 4 == 1 then
 c = color(cambiarTono,255,255)
 elseif nivel % 4 == 2 then
 c = color(255,cambiarTono,255)
 elseif nivel % 4 == 3 then
 c = color(255,255,cambiarTono,255)
 else
 c = color(0,255,cambiarTono,255)
 end
 return c
 end
 function draw()
 background(0, 25, 25, 5)
 noSmooth()
 if ball:paredes()  == false then
     end
          for i = 1, table.maxn(bloques) do
              if bloques[i]:rebote(ball) then
                 table.remove(bloques, i)
                              break
                             end
 end
        --
        if table.maxn(bloques) == 0 then
            nuevo_nivel()
            end
 strokeWidth(2)
  ball:draw()
 for i = 1, table.maxn(bloques)do
 bloques[i]:draw()
 end
 function touched(touch)
 if CurrentTouch.state == BEGAN or
 CurrentTouch.state == MOVING then
  lastDelta = CurrentTouch.deltaX
 if Bola_movimiento == false then
        if CurrentTouch.x < bat:derecha() + 100 and 
            CurrentTouch.x > bat:izquierda() - 100 and 
            CurrentTouch.y < bat:arriba() + 200 and 
            CurrentTouch.y > bat:abajo() then
            if Bola_movimiento == false then
                Bola_movimiento = true
            end
        end
 else
 end
 elseif juego_finito == true or ganar == true then if CurrentTouch.tapCount == 1 then resetearJuego() end
 end
end
 lastDelta = 0
 end
 function nuevo_nivel()
 if nivel <= maximo_nivel then
 nivel = nivel + 1
 Poner_bloques()
 vidas = vidas + 1
 else ganar = true end
 end