Space Invaders Original
My Space Invaders Variant Work in progress
// Project: SpaceInvaders
// Created: 2019-01-22
// show all errors
SetErrorMode(2)
// set window properties
SetWindowTitle( "SpaceInvaders" )
#constant KEY_SPACE 32
#constant KEY_LEFT 37
#constant KEY_UP 38
#constant KEY_RIGHT 39
#constant KEY_DOWN 40
type _bullet
ID as integer
time# as float //time to keep the bullet alive
endtype
type _barricade
ID as integer
endtype
type _player
ID as integer
hit as integer
imgID as integer
lives as integer
score as integer
endtype
type _invader
ID as integer
hit as integer
scoreValue as integer
endtype
// set display properties
SetVirtualResolution( 1024, 768 ) // doesn't have to match the window
SetOrientationAllowed( 1, 1, 1, 1 ) // allow both portrait and landscape on mobile devices
SetSyncRate( 30, 0 ) // 30fps instead of 60 to save battery
SetScissor( 0,0,0,0 ) // use the maximum available screen space, no black borders
UseNewDefaultFonts( 1 ) // since version 2.0.22 we can use nicer default fonts
player as _player
do
playGame(player)
if player.lives<1
repeat
Print("GameOver")
Print("Press Space to play again")
sync()
until GetRawKeyPressed(KEY_SPACE)
player.lives=4
endif
loop
function playGame(player ref as _player)
DeleteAllSprites()
DeleteAllImages()
player.imgID=createShipImg()
player.ID=CreateSprite(player.imgID)
player.lives=4
SetSpriteScale(player.ID,5,5)
SetSpritePositionByOffset(player.ID,500,740)
SetSpriteTransparency(player.ID,1)
barricades as _barricade[3]
barricadeImg=createBarricadeImg()
createBarricades(barricades,barricadeImg)
invaders as _invader[]
invaderImage1=createInvader1Img()
invaderImage2=createInvader2Img()
invaderImage3=createInvader3Img()
createInvaders(invaders,invaderImage1,invaderImage2,invaderImage3)
direction=-1
invaderBombs as _bullet[]
bullets as _bullet[]
repeat
if GetRawKeyState(KEY_LEFT)
SetSpritePositionByOffset(player.ID,GetSpriteXByOffset(player.ID)-4,GetSpriteYByOffset(player.ID))
if GetSpriteXByOffset(player.ID)<-10 then SetSpritePositionByOffset(player.ID,GetWindowWidth()+9,GetSpriteYByOffset(player.ID))
endif
if GetRawKeyState(KEY_RIGHT)
SetSpritePositionByOffset(player.ID,GetSpriteXByOffset(player.ID)+4,GetSpriteYByOffset(player.ID))
if GetSpriteXByOffset(player.ID)>GetWindowWidth()+10 then SetSpritePositionByOffset(player.ID,-9,GetSpriteYByOffset(player.ID))
endif
if GetRawKeyPressed(KEY_SPACE)
shoot(player.ID,bullets)
endif
moveBullets(player,bullets,invaders)
direction=moveInvaders(invaders,invaderBombs,direction)
if direction=99 then exitFunction
moveBombs(player,invaderBombs,invaders)
Print("Space Invaders")
Print("Score="+str(player.score)+" Lives="+str(player.lives))
sync()
until player.lives<1 or invaders.length=0
endfunction
function createShipImg()
local data as integer [95] = [
0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,1,1,0,0,0,0,0,
0,0,0,0,1,1,1,1,0,0,0,0,
0,0,1,1,1,1,1,1,1,1,0,0,
0,1,1,1,1,1,1,1,1,1,1,0,
0,1,1,1,1,1,1,1,1,1,1,0,
0,1,1,1,1,1,1,1,1,1,1,0,
0,0,0,0,0,0,0,0,0,0,0,0]
dataCount=0
ClearScreen()
for y = 0 to 7
for x = 0 to 11
if data[datacount]=1 then DrawLine(x,y,x,y,255,255,255)
inc dataCount,1
next x
next y
render()
img = getImage(0,0,12,8)
SetImageTransparentColor(img,0,0,0)
endfunction img
function createBarricadeImg()
local data as integer [119] = [
0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,1,1,1,1,1,1,0,0,0,
0,0,1,1,1,1,1,1,1,1,0,0,
0,1,1,1,1,1,1,1,1,1,1,0,
0,1,1,1,1,1,1,1,1,1,1,0,
0,1,1,1,1,1,1,1,1,1,1,0,
0,1,1,1,1,1,1,1,1,1,1,0,
0,1,1,1,1,1,1,1,1,1,1,0,
0,1,1,1,0,0,0,0,1,1,1,0,
0,0,0,0,0,0,0,0,0,0,0,0]
dataCount=0
ClearScreen()
for y = 0 to 9
for x = 0 to 11
if data[datacount]=1 then DrawLine(x,y,x,y,255,255,255)
inc dataCount,1
next x
next y
render()
img = getImage(0,0,12,12)
SetImageTransparentColor(img,0,0,0)
endfunction img
function createBarricades(barricades ref as _barricade[],barricadeImg as integer)
for num = 0 to 3
barricades[num].ID=createSprite(barricadeImg)
SetSpriteColor(barricades[num].ID,0,255,0,255)
SetSpriteScale(barricades[num].ID,10,10)
SetSpritePositionByOffset(barricades[num].ID,num*250+125,620)
next num
endfunction
function createInvader1Img()
local data as integer [95] = [
0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,1,1,0,0,0,0,0,
0,0,0,1,1,1,1,1,1,0,0,0,
0,0,0,1,0,1,1,0,1,0,0,0,
0,0,0,1,1,1,1,1,1,0,0,0,
0,0,1,1,1,1,1,1,1,1,0,0,
0,0,1,1,1,1,1,1,1,1,0,0,
0,0,1,0,0,0,0,0,0,1,0,0]
dataCount=0
ClearScreen()
for y = 0 to 7
for x = 0 to 11
if data[datacount]=1 then DrawLine(x,y,x,y,255,255,255)
inc dataCount,1
next x
next y
render()
img = getImage(0,0,12,8)
SetImageTransparentColor(img,0,0,0)
endfunction img
function createInvader2Img()
local data as integer [95] = [
0,0,0,1,0,0,0,0,1,0,0,0,
0,0,1,1,1,1,1,1,1,1,0,0,
0,0,1,1,1,1,1,1,1,1,0,0,
0,0,1,1,0,1,1,0,1,1,0,0,
0,1,1,1,1,1,1,1,1,1,1,0,
1,1,1,1,1,1,1,1,1,1,1,1,
1,0,1,1,1,1,1,1,1,1,0,1,
0,0,0,0,0,0,0,0,0,0,0,0]
dataCount=0
ClearScreen()
for y = 0 to 7
for x = 0 to 11
if data[datacount]=1 then DrawLine(x,y,x,y,255,255,255)
inc dataCount,1
next x
next y
render()
img = getImage(0,0,12,8)
SetImageTransparentColor(img,0,0,0)
endfunction img
function createInvader3Img()
local data as integer [95] = [
0,0,0,0,0,0,0,0,0,0,0,0,
0,0,1,1,1,1,1,1,1,1,0,0,
0,1,1,1,1,1,1,1,1,1,1,0,
1,1,1,1,0,1,1,1,0,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,
0,1,1,1,1,1,1,1,1,1,1,0,
0,1,1,0,0,0,0,0,0,1,1,0,
0,1,1,1,0,0,0,0,1,1,1,0]
dataCount=0
ClearScreen()
for y = 0 to 7
for x = 0 to 11
if data[datacount]=1 then DrawLine(x,y,x,y,255,255,255)
inc dataCount,1
next x
next y
render()
img = getImage(0,0,12,8)
SetImageTransparentColor(img,0,0,0)
endfunction img
function createInvaders(invaders ref as _invader[],image1 as integer,image2 as integer,image3 as integer)
invader as _invader
for y = 0 to 4
select y
case 0:
image=image1
invader.scoreValue=30
endcase
case 1:
image=image2
invader.scoreValue=20
endcase
case 2:
image=image2
invader.scoreValue=20
endcase
case 3:
image=image3
invader.scoreValue=10
endcase
case 4:
image=image3
invader.scoreValue=10
endcase
endselect
for x = 0 to 10
invader.ID=createSprite(image)
SetSpriteScale(invader.ID,5,5)
SetSpritePositionByOffset(invader.ID,x*75+90,y*75+90)
invaders.insert(invader)
next x
next y
endfunction
function shoot(ship,bullets ref as _bullet[])
bullet as _bullet
bullet.ID=createSprite(0)
SetSpriteScale(bullet.ID,1,1)
SetSpritePositionByOffset(bullet.ID,GetSpriteXByOffset(ship),GetSpriteYByOffset(ship))
bullet.time#=timer()
bullets.insert(bullet)
endfunction
function dropBomb(invader ref as _invader,invaderBombs ref as _bullet[])
bomb as _bullet
bomb.ID=createSprite(0)
SetSpriteScale(bomb.ID,1,1)
SetSpritePositionByOffset(bomb.ID,GetSpriteXByOffset(invader.ID),GetSpriteYByOffset(invader.ID))
bomb.time#=timer()
invaderBombs.insert(bomb)
endfunction
function moveBullets(player ref as _player,bullets ref as _bullet[],invaders ref as _invader[])
for num = bullets.length to 0 step -1
SetSpritePositionByOffset(bullets[num].ID,GetSpriteXByOffset(bullets[num].ID),GetSpriteYByOffset(bullets[num].ID)-5)
for num2 = invaders.length to 0 step -1
if GetSpriteCollision(bullets[num].ID,invaders[num2].ID )
player.score=player.score+invaders[num2].scoreValue
DeleteSprite(invaders[num2].ID)
invaders.remove(num2) //remove the invader that was shot because the sprite nolonger exists
DeleteSprite(bullets[num].ID)
bullets.remove(num):exit
elseif bullets[num].time#+5.0<timer()
DeleteSprite(bullets[num].ID)
bullets.remove(num):exit
endif
next num2
//If GetSpriteYByOffset(bullets[num].ID) <0
// deleteSprite(bullets[num].ID)
// bullets.remove(num)
//endif
next num
endfunction
function moveBombs(player ref as _player,bombs ref as _bullet[],invaders ref as _invader[])
for num = bombs.length to 0 step -1
SetSpritePositionByOffset(bombs[num].ID,GetSpriteXByOffset(bombs[num].ID),GetSpriteYByOffset(bombs[num].ID)+5)
if GetSpriteCollision(bombs[num].ID,player.ID )
player.lives=player.lives-1
DeleteSprite(bombs[num].ID)
bombs.remove(num) //remove the bomb that was shot because the sprite nolonger exists
elseif bombs[num].time#+5.0<timer()
DeleteSprite(bombs[num].ID)
bombs.remove(num):exit
endif
next num
endfunction
function moveInvaders(invaders ref as _invader[],invaderBombs ref as _bullet[],Direction as integer)
nextDirection=Direction
if invaders.length<4
speed#=5
elseif invaders.length<12
speed#=4
elseif invaders.length<24
speed#=3
elseif invaders.length<34
speed#=2
else
speed#=1
endif
for num=invaders.length to 0 step -1
SetSpritePositionByOffset(invaders[num].ID,GetSpriteXByOffset(invaders[num].ID)+(Direction*speed#),GetSpriteYByOffset(invaders[num].ID))
if GetSpriteXByOffset(invaders[num].ID)<0 then nextDirection=1
If GetSpriteXByOffset(invaders[num].ID)>GetWindowWidth() then nextDirection=-1
if random(1,1000)=1 then dropBomb(invaders[num],invaderBombs)
next num
if nextDirection<> Direction
for num=invaders.length to 0 step -1
SetSpritePositionByOffset(invaders[num].ID,GetSpriteXByOffset(invaders[num].ID),GetSpriteYByOffset(invaders[num].ID)+20)
If GetSpriteYByOffset(invaders[num].ID)>GetWindowHeight()-100
gameOver()
exitfunction 99
endif
next num
endif
endfunction nextDirection
function gameOver()
repeat
Print ("GAME OVER")
Print ("You were invaded")
Print ("Press Space to try again")
sync()
until GetRawKeyPressed(KEY_SPACE)
endfunction
below version bullets make holes in barricades
// Project: SpaceInvaders
// Created: 2019-01-22
// show all errors
SetErrorMode(2)
// set window properties
SetWindowTitle( "SpaceInvaders" )
#constant KEY_SPACE 32
#constant KEY_LEFT 37
#constant KEY_UP 38
#constant KEY_RIGHT 39
#constant KEY_DOWN 40
type _bullet
ID as integer
time# as float //time to keep the bullet alive
endtype
type _barricade
ID as integer
mem
endtype
type _player
ID as integer
hit as integer
imgID as integer
lives as integer
score as integer
endtype
type _invader
ID as integer
hit as integer
scoreValue as integer
endtype
// set display properties
SetVirtualResolution( 1024, 768 ) // doesn't have to match the window
SetOrientationAllowed( 1, 1, 1, 1 ) // allow both portrait and landscape on mobile devices
SetSyncRate( 30, 0 ) // 30fps instead of 60 to save battery
SetScissor( 0,0,0,0 ) // use the maximum available screen space, no black borders
UseNewDefaultFonts( 1 ) // since version 2.0.22 we can use nicer default fonts
player as _player
do
playGame(player)
if player.lives<1
repeat
Print("GameOver")
Print("Press Space to play again")
sync()
until GetRawKeyPressed(KEY_SPACE)
player.lives=4
endif
loop
function playGame(player ref as _player)
DeleteAllSprites()
DeleteAllImages()
player.imgID=createShipImg()
player.ID=CreateSprite(player.imgID)
player.lives=4
SetSpriteScale(player.ID,5,5)
SetSpritePositionByOffset(player.ID,500,740)
SetSpriteTransparency(player.ID,1)
barricades as _barricade[3]
for barricadesnum=0 to 3
createBarricades(barricades,createBarricadeImg())
next
invaders as _invader[]
invaderImage1=createInvader1Img()
invaderImage2=createInvader2Img()
invaderImage3=createInvader3Img()
createInvaders(invaders,invaderImage1,invaderImage2,invaderImage3)
direction=-1
invaderBombs as _bullet[]
bullets as _bullet[]
repeat
if GetRawKeyState(KEY_LEFT)
SetSpritePositionByOffset(player.ID,GetSpriteXByOffset(player.ID)-4,GetSpriteYByOffset(player.ID))
if GetSpriteXByOffset(player.ID)<-10 then SetSpritePositionByOffset(player.ID,GetWindowWidth()+9,GetSpriteYByOffset(player.ID))
endif
if GetRawKeyState(KEY_RIGHT)
SetSpritePositionByOffset(player.ID,GetSpriteXByOffset(player.ID)+4,GetSpriteYByOffset(player.ID))
if GetSpriteXByOffset(player.ID)>GetWindowWidth()+10 then SetSpritePositionByOffset(player.ID,-9,GetSpriteYByOffset(player.ID))
endif
if GetRawKeyPressed(KEY_SPACE)
shoot(player.ID,bullets)
endif
moveBullets(player,bullets,invaders,barricades)
direction=moveInvaders(invaders,invaderBombs,direction)
if direction=99 then exitFunction
moveBombs(player,invaderBombs,invaders,barricades)
Print("Space Invaders")
Print("Score="+str(player.score)+" Lives="+str(player.lives))
sync()
until player.lives<1 or invaders.length=0
endfunction
function createShipImg()
local data as integer [95] = [
0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,1,1,0,0,0,0,0,
0,0,0,0,1,1,1,1,0,0,0,0,
0,0,1,1,1,1,1,1,1,1,0,0,
0,1,1,1,1,1,1,1,1,1,1,0,
0,1,1,1,1,1,1,1,1,1,1,0,
0,1,1,1,1,1,1,1,1,1,1,0,
0,0,0,0,0,0,0,0,0,0,0,0]
dataCount=0
ClearScreen()
for y = 0 to 7
for x = 0 to 11
if data[datacount]=1 then DrawLine(x,y,x,y,255,255,255)
inc dataCount,1
next x
next y
render()
img = getImage(0,0,12,8)
SetImageTransparentColor(img,0,0,0)
endfunction img
function createBarricadeImg()
local data as integer [119] = [
0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,1,1,1,1,1,1,0,0,0,
0,0,1,1,1,1,1,1,1,1,0,0,
0,1,1,1,1,1,1,1,1,1,1,0,
0,1,1,1,1,1,1,1,1,1,1,0,
0,1,1,1,1,1,1,1,1,1,1,0,
0,1,1,1,1,1,1,1,1,1,1,0,
0,1,1,1,1,1,1,1,1,1,1,0,
0,1,1,1,0,0,0,0,1,1,1,0,
0,0,0,0,0,0,0,0,0,0,0,0]
dataCount=0
ClearScreen()
for y = 0 to 9
for x = 0 to 11
if data[datacount]=1 then DrawLine(x,y,x,y,255,255,255)
inc dataCount,1
next x
next y
render()
img = getImage(0,0,12,12)
SetImageTransparentColor(img,0,0,0)
endfunction img
function createBarricades(barricades ref as _barricade[],barricadeImg as integer)
for num = 0 to 3
barricades[num].mem = barricadeImg
barricades[num].ID=createSprite(barricades[num].mem)
SetSpriteColor(barricades[num].ID,0,255,0,255)
SetSpriteScale(barricades[num].ID,10,10)
SetSpritePositionByOffset(barricades[num].ID,num*250+125,620)
next num
endfunction
function createInvader1Img()
local data as integer [95] = [
0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,1,1,0,0,0,0,0,
0,0,0,1,1,1,1,1,1,0,0,0,
0,0,0,1,0,1,1,0,1,0,0,0,
0,0,0,1,1,1,1,1,1,0,0,0,
0,0,1,1,1,1,1,1,1,1,0,0,
0,0,1,1,1,1,1,1,1,1,0,0,
0,0,1,0,0,0,0,0,0,1,0,0]
dataCount=0
ClearScreen()
for y = 0 to 7
for x = 0 to 11
if data[datacount]=1 then DrawLine(x,y,x,y,255,255,255)
inc dataCount,1
next x
next y
render()
img = getImage(0,0,12,8)
SetImageTransparentColor(img,0,0,0)
endfunction img
function createInvader2Img()
local data as integer [95] = [
0,0,0,1,0,0,0,0,1,0,0,0,
0,0,1,1,1,1,1,1,1,1,0,0,
0,0,1,1,1,1,1,1,1,1,0,0,
0,0,1,1,0,1,1,0,1,1,0,0,
0,1,1,1,1,1,1,1,1,1,1,0,
1,1,1,1,1,1,1,1,1,1,1,1,
1,0,1,1,1,1,1,1,1,1,0,1,
0,0,0,0,0,0,0,0,0,0,0,0]
dataCount=0
ClearScreen()
for y = 0 to 7
for x = 0 to 11
if data[datacount]=1 then DrawLine(x,y,x,y,255,255,255)
inc dataCount,1
next x
next y
render()
img = getImage(0,0,12,8)
SetImageTransparentColor(img,0,0,0)
endfunction img
function createInvader3Img()
local data as integer [95] = [
0,0,0,0,0,0,0,0,0,0,0,0,
0,0,1,1,1,1,1,1,1,1,0,0,
0,1,1,1,1,1,1,1,1,1,1,0,
1,1,1,1,0,1,1,1,0,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,
0,1,1,1,1,1,1,1,1,1,1,0,
0,1,1,0,0,0,0,0,0,1,1,0,
0,1,1,1,0,0,0,0,1,1,1,0]
dataCount=0
ClearScreen()
for y = 0 to 7
for x = 0 to 11
if data[datacount]=1 then DrawLine(x,y,x,y,255,255,255)
inc dataCount,1
next x
next y
render()
img = getImage(0,0,12,8)
SetImageTransparentColor(img,0,0,0)
endfunction img
function createInvaders(invaders ref as _invader[],image1 as integer,image2 as integer,image3 as integer)
invader as _invader
for y = 0 to 4
select y
case 0:
image=image1
invader.scoreValue=30
endcase
case 1:
image=image2
invader.scoreValue=20
endcase
case 2:
image=image2
invader.scoreValue=20
endcase
case 3:
image=image3
invader.scoreValue=10
endcase
case 4:
image=image3
invader.scoreValue=10
endcase
endselect
for x = 0 to 10
invader.ID=createSprite(image)
SetSpriteScale(invader.ID,5,5)
SetSpritePositionByOffset(invader.ID,x*75+90,y*75+90)
invaders.insert(invader)
next x
next y
endfunction
function shoot(ship,bullets ref as _bullet[])
bullet as _bullet
bullet.ID=createSprite(0)
SetSpriteScale(bullet.ID,1,1)
SetSpritePositionByOffset(bullet.ID,GetSpriteXByOffset(ship),GetSpriteYByOffset(ship))
bullet.time#=timer()
bullets.insert(bullet)
endfunction
function dropBomb(invader ref as _invader,invaderBombs ref as _bullet[])
bomb as _bullet
bomb.ID=createSprite(0)
SetSpriteScale(bomb.ID,1,1)
SetSpritePositionByOffset(bomb.ID,GetSpriteXByOffset(invader.ID),GetSpriteYByOffset(invader.ID))
bomb.time#=timer()
invaderBombs.insert(bomb)
endfunction
function moveBullets(player ref as _player,bullets ref as _bullet[],invaders ref as _invader[],barricades ref as _barricade[])
for barracadenum=0 to 3
for num = bullets.length to 0 step -1
SetSpritePositionByOffset(bullets[num].ID,GetSpriteXByOffset(bullets[num].ID),GetSpriteYByOffset(bullets[num].ID)-5)
if GetSpriteCollision(bullets[num].ID, barricades[barracadenum].ID)
col=pickColor(GetSpriteXByOffset(bullets[num].ID),GetSpriteYByOffset(bullets[num].ID)+5)
if col>MakeColor(0,10,0) and col<=MakeColor(0,255,0)
changebarricadeimg(barricades,barracadenum, bullets[num].id)
DeleteSprite(bullets[num].id)
bullets.remove(num) //remove the bomb that was shot because the sprite nolonger exists
endif
else
for num2 = invaders.length to 0 step -1
if GetSpriteCollision(bullets[num].ID,invaders[num2].ID )
player.score=player.score+invaders[num2].scoreValue
DeleteSprite(invaders[num2].ID)
invaders.remove(num2) //remove the invader that was shot because the sprite nolonger exists
DeleteSprite(bullets[num].ID)
bullets.remove(num):exit
elseif bullets[num].time#+5.0<timer()
DeleteSprite(bullets[num].ID)
bullets.remove(num):exit
endif
next num2
endif
//If GetSpriteYByOffset(bullets[num].ID) <0
// deleteSprite(bullets[num].ID)
// bullets.remove(num)
//endif
next num
next barracadenum
endfunction
function changebarricadeimg(barricades ref as _barricade[], num, bullet)
memimg = CreateMemblockFromImage(barricades[num].mem)
w=GetSpriteWidth(barricades[num].ID) / 10
h=GetSpriteHeight(barricades[num].ID) / 10
x=abs(((GetSpriteX(bullet)-GetSpriteX(barricades[num].ID)))+50)/w
y=abs(((GetSpriteY(bullet)-GetSpriteY(barricades[num].ID)))+5)/h
//change these -1 +1 -4 +4 to change the design of the barracades removals
for xx=x-1 to x+1
for yy=y-1 to y+1
offset=((yy*w)+xx) * 4
if offset>0 and offset<GetMemblockSize(memimg)
SetMemblockByte(memimg,offset,0)
SetMemblockByte(memimg,offset+1,0)
SetMemblockByte(memimg,offset+2,0)
SetMemblockByte(memimg,offset+3,255)
endif
next
next
barricades[num].mem = CreateImageFromMemblock(memimg)
SetSpriteImage(barricades[num].ID,barricades[num].mem)
DeleteMemblock(memimg)
endfunction
function moveBombs(player ref as _player,bombs ref as _bullet[],invaders ref as _invader[],barricades ref as _barricade[])
for barracadenum=0 to 3
for num = bombs.length to 0 step -1
SetSpritePositionByOffset(bombs[num].ID,GetSpriteXByOffset(bombs[num].ID),GetSpriteYByOffset(bombs[num].ID)+1)
if GetSpriteExists(bombs[num].id)
if GetSpriteCollision(bombs[num].ID, barricades[barracadenum].ID)
col=pickColor(GetSpriteXByOffset(bombs[num].ID),GetSpriteYByOffset(bombs[num].ID)+5)
print(col)
if col>MakeColor(0,10,0) and col<=MakeColor(0,255,0)
changebarricadeimg(barricades,barracadenum, bombs[num].id)
DeleteSprite(bombs[num].id)
bombs.remove(num) //remove the bomb that was shot because the sprite nolonger exists
endif
elseif GetSpriteCollision(bombs[num].ID,player.ID )
player.lives=player.lives-1
DeleteSprite(bombs[num].ID)
bombs.remove(num) //remove the bomb that was shot because the sprite nolonger exists
elseif bombs[num].time#+5.0<timer()
DeleteSprite(bombs[num].ID)
bombs.remove(num):exit
endif
endif
next
next
endfunction
function moveInvaders(invaders ref as _invader[],invaderBombs ref as _bullet[],Direction as integer)
nextDirection=Direction
if invaders.length<4
speed#=5
elseif invaders.length<12
speed#=4
elseif invaders.length<24
speed#=3
elseif invaders.length<34
speed#=2
else
speed#=1
endif
for num=invaders.length to 0 step -1
SetSpritePositionByOffset(invaders[num].ID,GetSpriteXByOffset(invaders[num].ID)+(Direction*speed#),GetSpriteYByOffset(invaders[num].ID))
if GetSpriteXByOffset(invaders[num].ID)<0 then nextDirection=1
If GetSpriteXByOffset(invaders[num].ID)>GetWindowWidth() then nextDirection=-1
if random(1,1000)=1 then dropBomb(invaders[num],invaderBombs)
next num
if nextDirection<> Direction
for num=invaders.length to 0 step -1
SetSpritePositionByOffset(invaders[num].ID,GetSpriteXByOffset(invaders[num].ID),GetSpriteYByOffset(invaders[num].ID)+20)
If GetSpriteYByOffset(invaders[num].ID)>GetWindowHeight()-100
gameOver()
exitfunction 99
endif
next num
endif
endfunction nextDirection
function gameOver()
repeat
Print ("GAME OVER")
Print ("You were invaded")
Print ("Press Space to try again")
sync()
until GetRawKeyPressed(KEY_SPACE)
endfunction
Function pickColor(X,Y)
//color as integer
rem prepare image grab area
clearScreen()
setScissor(X,Y,X+1,Y+1)
render()
img = getImage(X,Y,X+1,Y+1)
rem create memblock
mem = createMemblockfromImage(img)
rem get memblock data
r = getMemblockbyte(mem,12):rem gets red channel data
g = getMemblockbyte(mem,13):rem gets green channel data
b = getMemblockbyte(mem,14):rem gets blue channel data
rem tidy up
deletememblock(mem)
deleteimage(img)
setScissor(0,0,getDeviceWidth(),getDeviceHeight())
clearScreen()
color = makeColor(r,g,b)
//color=0
endfunction color