os.cpu(333)
azul=color.new(0,0,255)
amarilo=color.new(255,255,0)

palos={}

palo_actual=1
palo_actual2=1

for i=1,5 do
	palos[i]={x=0,y=-11,w=2,h=10}
end
for i=6,10 do
	palos[i]={x=0,y=272,w=2,h=10}
end

function colX(obj1,y,obj2) 
	if obj1.x+obj1.w>obj2.x 
	and obj1.x<obj2.x+obj2.w 
	and y+obj1.h>obj2.y
	and y<obj2.y+obj2.h then 
		return true
	end
return false
end

function ataque()
	if math.random(1,40)==1 then 
		palos[palo_actual2+5].x=nave_final.x+nave_final.w/2 
		palos[palo_actual2+5].y=bichosy-24
		palo_actual2=palo_actual2+1
		space_snd.a:play(2)
	end
	if palo_actual2>5 then palo_actual2=1 end
end

function col_U() 
	vel_variable=vel_variable*1.025
	score_i=score_i+math.random(1,3)
end

function invaders()
		 space_snd.d:play(5) os.message("Has perdido") ver_nivel()
end

function no_invaders()
no_invaden=true
	for i=1,10 do
		if bichos1[i].e>0 or bichos2[i].e>0 or bichos3[i].e>0 then no_invaden=false break end
	end
	if nave_final.e>0 then no_invaden=false end
if no_invaden then
stotal=stotal+score_i
	if level_i<5 then os.message("Has ganado") level_i=level_i+1 ver_nivel() else os.message("Juego Terminado. Puntuación: "..stotal) sistema() end
end
end

function metamorfosis()
	if bicho1.t:time()<500 then bicho1.v=bicho1.i1 else bicho1.v=bicho1.i2 end
	if bicho2.t:time()<500 then bicho2.v=bicho2.i1 else bicho2.v=bicho2.i2 end
	if bicho3.t:time()<500 then bicho3.v=bicho3.i1 else bicho3.v=bicho3.i2 end

	if bicho1.t:time()>1000 then space_snd.c:play(4) bicho1.t:reset() end
	if bicho2.t:time()>1000 then space_snd.c:play(4) bicho2.t:reset() end
	if bicho3.t:time()>1000 then space_snd.c:play(4) bicho3.t:reset() end
end


space_snd={a=sound.load("GAMES/space/sonidos/nave.wav"),b=sound.load("GAMES/space/sonidos/disparo.wav"),
c=sound.load("GAMES/space/sonidos/mover.wav"),d=sound.load("GAMES/space/sonidos/muerte.wav")}

function ver_nivel()

bichosy=40
pistola.x=170
pistola.y=260
palo_actual=1
palo_actual2=1
nave_final={x=178,w=34,h=16,i=image.load("GAMES/space/imagenes/d.png"),e=5}

for i=1,5 do
	palos[i]={x=0,y=-11,w=2,h=10}
end
for i=6,10 do
	palos[i]={x=0,y=272,w=2,h=10}
end
	
if level_i==1 then
vel_variable=1.7
	for i=1,10 do
		bichos1[i]={x=i*33,w=25,h=13,e=0}
		bichos2[i]={x=i*33,w=26,h=17,e=0} 
		bichos3[i]={x=i*33,w=26,h=13,e=0}
	end
	bichos3[5]={x=5*33,w=26,h=13,e=3}
	bichos3[6]={x=6*33,w=26,h=13,e=3}
	for i=3,8 do
		bichos1[i]={x=i*33,w=25,h=13,e=1}
		bichos2[i]={x=i*33,w=26,h=17,e=2} 
	end
end

if level_i==2 then
vel_variable=2
	for i=1,10 do
		bichos1[i]={x=i*33,w=25,h=13,e=0}
		bichos2[i]={x=i*33,w=26,h=17,e=0} 
		bichos3[i]={x=i*33,w=26,h=13,e=0}
	end
	for i=1,2 do
		bichos1[i+4]={x=(4+i)*33,w=25,h=13,e=1}
		bichos2[i+4]={x=(4+i)*33,w=26,h=17,e=2} 
		bichos3[i+4]={x=(4+i)*33,w=26,h=13,e=3}
		
		bichos1[i]={x=i*33,w=25,h=13,e=1}
		bichos2[i]={x=i*33,w=26,h=17,e=2} 
		bichos3[i]={x=i*33,w=26,h=13,e=3}
	end
	for i=9,10 do
		bichos1[i]={x=i*33,w=25,h=13,e=1}
		bichos2[i]={x=i*33,w=26,h=17,e=2} 
		bichos3[i]={x=i*33,w=26,h=13,e=3}
	end

end

if level_i==3 then
vel_variable=2.2
	for i=1,10 do
		bichos1[i]={x=i*33,w=25,h=13,e=1}
		if i<3 then bichos2[i]={x=i*33,w=26,h=17,e=2} end
		if i>8 then bichos2[i]={x=i*33,w=26,h=17,e=2} end
		if i>2 and i<9 then bichos2[i]={x=i*33,w=26,h=17,e=0} end
		bichos3[i]={x=i*33,w=26,h=13,e=0}
	end
	bichos3[5]={x=5*33,w=26,h=13,e=3}
	bichos3[6]={x=6*33,w=26,h=13,e=3}

end

if level_i==4 then
vel_variable=2.3
	for i=1,10 do
		bichos1[i]={x=i*33,w=25,h=13,e=0}
		bichos2[i]={x=i*33,w=26,h=17,e=2} 
		bichos3[i]={x=i*33,w=26,h=13,e=3}
	end
	bichos1[1]={x=5*33,w=26,h=13,e=1}
	bichos1[10]={x=6*33,w=26,h=13,e=1}
end

if level_i==5 then
vel_variable=2.5
	for i=1,10 do
		bichos1[i]={x=i*33,w=25,h=13,e=1}
		bichos2[i]={x=i*33,w=26,h=17,e=2}
		bichos3[i]={x=i*33,w=26,h=13,e=3}
	end

end
end


space_snd.a:volume(80)
space_snd.b:volume(80)
space_snd.c:volume(190)
function SpaceInvaders()

stotal=0
bichos1={}
bichos2={}
bichos3={}

direccion_mov=1
imov=1
bajada=false

score_i=0
level_i=1
pistola={x=170,y=260,w=23,h=12,i=image.load("GAMES/space/imagenes/plataforma.png")}
ver_nivel()
spc=image.load("GAMES/space/imagenes/barra.png")
bicho1={t=timer.new(),i1=image.load("GAMES/space/imagenes/a1.png"),i2=image.load("GAMES/space/imagenes/a2.png"),v=nil}
bicho2={t=timer.new(),i1=image.load("GAMES/space/imagenes/b1.png"),i2=image.load("GAMES/space/imagenes/b2.png"),v=nil}
bicho3={t=timer.new(),i1=image.load("GAMES/space/imagenes/c1.png"),i2=image.load("GAMES/space/imagenes/c2.png"),v=nil}

bicho1.t:start()
bicho2.t:start()
bicho3.t:start()
while true do
controls.read()

if pistola.x>357 then pistola.x=357 elseif pistola.x<0 then pistola.x=0 end

spc:blit(380,0)
screen.print(419,160,level_i,azul)
screen.print(419,210,score_i,azul)
if palos[1].y<-11 then screen.print(435,253,"|",azul) end
if palos[2].y<-11 then screen.print(430,253,"|",azul) end
if palos[3].y<-11 then screen.print(425,253,"|",azul) end
if palos[4].y<-11 then screen.print(420,253,"|",azul) end
if palos[5].y<-11 then screen.print(415,253,"|",azul) end

imov=imov+vel_variable

pistola.i:blit(pistola.x,pistola.y)
if controls.left() then pistola.x=pistola.x-3 elseif controls.right() then pistola.x=pistola.x+3 end

for i=1,5 do
	draw.fillrect(palos[i].x,palos[i].y,2,10,azul)
	palos[i].y=palos[i].y-2
end
for i=6,10 do
	if col(palos[i],pistola) then invaders() end
	draw.fillrect(palos[i].x,palos[i].y,2,10,amarilo)
	palos[i].y=palos[i].y+2
end


if palo_actual>5 then palo_actual=1 end

if nave_final.e>0 then ataque() nave_final.i:blit(nave_final.x,bichosy-40) end

if controls.press("cross") and palos[palo_actual].y<0 then space_snd.b:play(3) palos[palo_actual].x=pistola.x+11 palos[palo_actual].y=248 palo_actual=palo_actual+1 end 

metamorfosis()

for i=1,10 do
 
	if bichos1[i].e>0 and bichosy+60>240 then invaders() end
	if bichos2[i].e>0 and bichosy+30>240 then invaders() end
	if bichos3[i].e>0 and bichosy>240 then invaders() end
	
	for o=1,5 do
		if colX(bichos1[i],bichosy+60,palos[o]) and bichos1[i].e>0 then bichos1[i].e=bichos1[i].e-1 col_U() palos[o].y=-11 end
		if colX(bichos2[i],bichosy+30,palos[o]) and bichos2[i].e>0 then bichos2[i].e=bichos2[i].e-1 col_U() palos[o].y=-11 end
		if colX(bichos3[i],bichosy,palos[o]) and bichos3[i].e>0 then bichos3[i].e=bichos3[i].e-1 col_U() palos[o].y=-11 end
		if colX(nave_final,bichosy-40,palos[o]) and nave_final.e>0 then nave_final.e=nave_final.e-1 col_U() palos[o].y=-11 end
	end

	if bichos1[i].e>0 then bicho1.v:blit(bichos1[i].x,bichosy+60) end
	if bichos2[i].e>0 then bicho2.v:blit(bichos2[i].x,bichosy+30) end
	if bichos3[i].e>0 then bicho3.v:blit(bichos3[i].x,bichosy) end
	
	
	if bichos1[i].e>0 then
		if bichos1[i].x>350 or bichos1[i].x<0 then bajada=true end
	end
	if bichos2[i].e>0 then 
		if bichos2[i].x>350 or bichos2[i].x<0 then bajada=true end
	end
	if bichos3[i].e>0 then 
		if bichos3[i].x>350 or bichos3[i].x<0 then bajada=true end
	end
	if nave_final.e>0 then
		if nave_final.x>350 or nave_final.x<0 then bajada=true end
	end
end

if bajada then 
	if direccion_mov==1 then direccion_mov=2 else direccion_mov=1 end
	imov=41
	bichosy=bichosy+20
	bajada=false 
end

if imov>40 then 
	for i=1,10 do
		if direccion_mov==1 then 
			bichos1[i].x=bichos1[i].x+vel_variable 
			bichos2[i].x=bichos2[i].x+vel_variable 
			bichos3[i].x=bichos3[i].x+vel_variable 
		else
			bichos1[i].x=bichos1[i].x-vel_variable 
			bichos2[i].x=bichos2[i].x-vel_variable 
			bichos3[i].x=bichos3[i].x-vel_variable 
		end
	end
	if direccion_mov==1 then nave_final.x=nave_final.x+vel_variable else nave_final.x=nave_final.x-vel_variable end
	imov=0
end

if controls.start() then sistema() end
screen.flip()

no_invaders()
end
end