function on.charIn(ch)
if ch=="r" then
blocks={5,5,5,5,5,5,5,5,5,5,5,5}
blockAttacked=0
game="notfinished"
score=0
player=100
shotX=0
shotY=0
level=1
wait=0.04
aliensDir="right"
down="no"
aliensX={}
aliensY={}
shotsX={}
shotsY={}
lives=3
for i=1,21,1 do
aliensX[i]=(i-1)%7*31+1
aliensY[i]=math.floor((i-1)/7)*25+10
shotsX[i]=aliensX[i]
shotsY[i]=200
end
end
if ch=="c" then
originalColors=not originalColors
end
end
function blocktest(x,y)
blockAttacked=0
if y>170 and y<177 then
if x>30 and x<40 and blocks[1]>0 then
blockAttacked=1
elseif x>40 and x<=50 and blocks[2]>0 then
blockAttacked=2
elseif x>50 and x<=60 and blocks[3]>0 then
blockAttacked=3
elseif x>60 and x<=70 and blocks[4]>0 then
blockAttacked=4
elseif x>140 and x<=150 and blocks[5]>0 then
blockAttacked=5
elseif x>150 and x<=160 and blocks[6]>0 then
blockAttacked=6
elseif x>160 and x<=170 and blocks[7]>0 then
blockAttacked=7
elseif x>170 and x<=180 and blocks[8]>0 then
blockAttacked=8
elseif x>250 and x<=260 and blocks[9]>0 then
blockAttacked=9
elseif x>260 and x<=270 and blocks[10]>0 then
blockAttacked=10
elseif x>270 and x<=280 and blocks[11]>0 then
blockAttacked=11
elseif x>280 and x<=290 and blocks[12]>0 then
blockAttacked=12
end
end
end
on.charIn("r")
function on.arrowLeft()
if player>0 then
player=player-10
end
end
function on.arrowRight()
if player<290 then
player=player+10
end
end
function on.tabKey()
if shotY<=0 then
shotY=195
shotX=player+13
end
end
function on.paint(gc)
if originalColors then
gc:setColorRGB(0,0,0)
gc:fillRect(0,0,platform.window:width(),platform.window:height())
end
if not originalColors then gc:setColorRGB(0,0,0)
else gc:setColorRGB(255,255,255) end
gc:setPen("thin","smooth")
gc:setFont("sansserif","r",8)
gc:drawString("Lua Alien Invaders - Par Loic Pujet",10,200,"top")
if game=="notfinished" then
if not originalColors then gc:setColorRGB(200,0,0)
else gc:setColorRGB(255,255,255) end
for i=1,21,1 do
if aliensY[i]~=0 then
gc:drawArc(aliensX[i]+4,aliensY[i]-9,10,10,0,360)
gc:fillArc(aliensX[i]-5,aliensY[i]-4,28,8,0,360)
end
end
if not originalColors then gc:setColorRGB(0,0,200)
else gc:setColorRGB(255,255,0) end
for i=1,21,1 do
if shotsY[i]<200 then
gc:fillRect(shotsX[i],shotsY[i],2,5)
end
end
if shotY>0 then
gc:fillRect(shotX,shotY,4,6)
end
if not originalColors then gc:setColorRGB(100,0,255)
else gc:setColorRGB(0,255,0) end
gc:fillRect(player,195,30,10)
gc:fillRect(player+13,191,4,4)
gc:setFont("sansserif","r",10)
gc:drawString("Lives:"..tostring(lives).." Score:"..tostring(score).." Level:"..tostring(level),0,0,"top")
if not originalColors then add=3
else add=0 end
for i=1,12,1 do
if blocks[i]>0 then
gc:fillRect(i*10+math.floor((i-1)/4)*70+20,180-blocks[i]*2,10,blocks[i]*2)
end
end
else
if var.recall("highscore")==nil then
var.store("highscore",0)
else
if var.recall("highscore")<score then
var.store("highscore",score)
document.markChanged()
end
end
if not originalColors then gc:setColorRGB(0,0,0)
else gc:setColorRGB(255,255,255) end
gc:setFont("sansserif","b",15)
gc:drawString("Score : "..tostring(score).." High score : "..tostring(var.recall("highscore")),50,50, "top")
if not originalColors then gc:setColorRGB(0,0,255) end
if locale.name()=="fr" then
gc:drawString("Appuyez sur R pour rejouer",50,150,"top")
else
gc:drawString("Press R to try again",80,150,"top")
end
end
if wait>0.01 then
timer.start(wait)
else
timer.start(0.01)
end
end
function on.timer()
timer.stop()
if game=="notfinished" then
if aliensDir=="right" then
for i=1,21,1 do
if aliensY[i]>0 then
aliensX[i]=aliensX[i]+1
end
end
else
for i=1,21,1 do
if aliensY[i]>0 then
aliensX[i]=aliensX[i]-1
end
end
end
if aliensDir=="right" then
for i=1,21,1 do
if aliensX[i]>295 then
down="yes"
end
end
else
for i=1,21,1 do
if aliensX[i]<5 then
down="yes"
end
end
end
if down=="yes" then
down="no"
for i=1,21,1 do
if aliensY[i]>0 then
aliensY[i]=aliensY[i]+25
end
end
if aliensDir=="left" then
aliensDir="right"
else
aliensDir="left"
end
end
for i=1,21,1 do
if aliensY[i]>180 then
game="finished"
end
if shotsY[i]>=200 and aliensY[i]~=0 then
if math.random(1,100)==5 then
shotsY[i]=aliensY[i]+math.random(1,10)
shotsX[i]=aliensX[i]
end
else
shotsY[i]=shotsY[i]+3
end
blocktest(shotsX[i],shotsY[i])
if blockAttacked>0 then
shotsY[i]=201
blocks[blockAttacked]=blocks[blockAttacked]-1
end
if shotsY[i]<200 then
if shotsY[i]>195 and shotsX[i]>player and shotsX[i]<player+30 then
lives=lives-1
shotsY[i]=200
end
end
if shotY>0 and shotY>aliensY[i]-5 and shotY<aliensY[i]+5 and shotX>aliensX[i]-10 and shotX<aliensX[i]+21 then
aliensY[i]=0
aliensX[i]=100
shotY=0
score=score+1
end
end
blocktest(shotX,shotY)
if blockAttacked>0 then
shotY=-1
blocks[blockAttacked]=blocks[blockAttacked]-1
end
if shotY>=0 then
shotY=shotY-5
end
if lives<=0 then
game="finished"
end
wintest=0
for i=1,21,1 do
wintest=wintest+aliensY[i]
end
if wintest==0 then
if wait>0.01 then
wait=wait-0.005
end
level=level+1
aliensDir="right"
down="no"
for i=1,21,1 do
aliensX[i]=(i-1)%7*31+1
aliensY[i]=math.floor((i-1)/7)*25+10
shotsX[i]=aliensX[i]
shotsY[i]=200
end
end
end
platform.window:invalidate()
end
The player can shoot with the up arrow, but that's not really convenient. If you had any better idea...Maybe the TAB key is better?
Hello everybody !Hi there :)
That's my first post here, so I'll try to introduce myself.Welcome!
First, I'm French. I am a very bad English speaker (well, I'm fifteen and our English teacher sucks) so I apologize for all the nonsenses and mistakes that I'll do.That ain't a problem. There are people who can't speak English at all. We have a French board for those n00bs :)
I was a member of TI-Bank, and I left this website because of all the troubles (fights between admins, etc)Oh God. They play The Game too?
So the most interesting website about calculators was Omnimaga, and I registered.
I have a TI-83+ and a TI-Nspire (Non-CAS & clickpad), and I code in Axe, in C for Nspire and in Lua. I also program in C with OpenGL on my PC, but that's not really interesting.I have a TI 84 + myself.
Well, I think I've enough talked about myself.
I made this post because I wanted feedbacks (not sure about this word) for my newest project, a Space Invaders game in Lua.Feedback (It's already plural)
It looks like the original game, excepted that there's only one kind of enemies, and there's no "houses". Also, the enemies doesn't go faster as they go down, but the speed increases with the level.You did that because it was easier to make or because you wanted to alter these things?
The player can shoot with the up arrow, but that's not really convenient. If you had any better idea...I don't have a Nspire :(
Also, I've never tried it on a calc. I don't have any CX and I use the OS 2.0.1 on my clickpad. If you could try it on your calc (and post your hi-score !)
Thank you,:)
Chockosta (Loic Pujet)
for i=1,21,1 do
if aliensY>0 then
aliensY=aliensY+25
end
end
function on.charIn(ch)
if ch=="r" then
game="notfinished"
score=0
player=100
shotX=0
shotY=0
wait=0.04
aliensDir="right"
down="no"
aliensX={}
aliensY={}
shotsX={}
shotsY={}
lives=3
for i=1,21,1 do
aliensX[i]=(i-1)%7*31+1
aliensY[i]=math.floor((i-1)/7)*25+10
shotsX[i]=aliensX[i]
shotsY[i]=200
end
end
end
on.charIn("r")
function on.arrowLeft()
if player>0 then
player=player-10
end
end
function on.arrowRight()
if player<290 then
player=player+10
end
end
function on.arrowUp()
if shotY<=0 then
shotY=195
shotX=player+13
end
end
function on.paint(gc)
gc:setColorRGB(0,0,0)
gc:setPen("thin","smooth")
gc:setFont("sansserif","r",8)
gc:drawString("Lua Alien Invaders - Par Loic Pujet",10,200,"top")
if game=="notfinished" then
gc:setColorRGB(200,0,0)
for i=1,21,1 do
if aliensY[i]~=0 then
gc:drawArc(aliensX[i]+4,aliensY[i]-9,10,10,0,360)
gc:fillArc(aliensX[i]-5,aliensY[i]-4,28,8,0,360)
end
end
gc:setColorRGB(0,0,200)
for i=1,21,1 do
if shotsY[i]<200 then
gc:fillRect(shotsX[i],shotsY[i],2,5)
end
end
if shotY>0 then
gc:fillRect(shotX,shotY,4,6)
end
gc:setColorRGB(100,0,255)
gc:fillRect(player,195,30,10)
gc:fillRect(player+13,191,4,4)
gc:setFont("sansserif","r",10)
gc:drawString("vies:"..tostring(lives).." score:"..tostring(score),0,0,"top")
else
gc:setColorRGB(0,0,0)
gc:setFont("sansserif","b",15)
gc:drawString("Score : "..tostring(score),100,50, "top")
gc:setColorRGB(0,0,255)
gc:drawString("Appuyez sur R pour rejouer",50,150,"top")
end
timer.start(wait)
end
function on.timer()
timer.stop()
if game=="notfinished" then
if aliensDir=="right" then
for i=1,21,1 do
if aliensY[i]>0 then
aliensX[i]=aliensX[i]+1
end
end
else
for i=1,21,1 do
if aliensY[i]>0 then
aliensX[i]=aliensX[i]-1
end
end
end
if aliensDir=="right" then
for i=1,21,1 do
if aliensX[i]>305 then
down="yes"
end
end
else
for i=1,21,1 do
if aliensX[i]<15 then
down="yes"
end
end
end
if down=="yes" then
down="no"
for i=1,21,1 do
if aliensY[i]>0 then
aliensY[i]=aliensY[i]+25
end
end
if aliensDir=="left" then
aliensDir="right"
else
aliensDir="left"
end
end
for i=1,21,1 do
if aliensY[i]>200 then
game="finished"
end
end
for i=1,21,1 do
if shotsY[i]>=200 and aliensY[i]~=0 then
if math.random(1,100)==5 then
shotsY[i]=aliensY[i]+math.random(1,10)
shotsX[i]=aliensX[i]
end
else
shotsY[i]=shotsY[i]+3
end
end
if shotY>=0 then
shotY=shotY-5
end
for i=1,21,1 do
if shotsY[i]<200 then
if shotsY[i]>195 and shotsX[i]>player and shotsX[i]<player+30 then
lives=lives-1
shotsY[i]=200
end
end
end
if lives==0 then
game="finished"
end
if shotY>0 then
for i=1,21,1 do
if shotY>0 and shotY>aliensY[i]-5 and shotY<aliensY[i]+5 and shotX>aliensX[i]-15 and shotX<aliensX[i]+15 then
aliensY[i]=0
aliensX[i]=100
shotY=0
score=score+1
end
end
end
wintest=0
for i=1,21,1 do
wintest=wintest+aliensY[i]
end
if wintest==0 then
if wait>0.02 then
wait=wait-0.005
end
aliensDir="right"
down="no"
for i=1,21,1 do
aliensX[i]=(i-1)%7*31+1
aliensY[i]=math.floor((i-1)/7)*25+10
shotsX[i]=aliensX[i]
shotsY[i]=200
end
end
end
platform.window:invalidate()
end
function on.arrowKey(key)
platform.window:invalidate()
end
I looked through some of your code, and I noticed a few things wrong with it:
- unoptimized math commands. While it's not huge, using player+=10 is a lot better than player=player+10.
- what's the deal with all of the for loops? I don't see the point in many of them.
- you should chain if statements together more, it'll remove the need for much of the redundancies and might even half your code size.
- why do you assign different functions to keys instead of just making a checkKeys() function or just putting all checks inline? Or are you overriding previously existing functions provided by an NLua module?
It looks like the original game, excepted that there's only one kind of enemies, and there's no "houses". Also, the enemies doesn't go faster as they go down, but the speed increases with the level.Only one thing (don't have the time) : In the real game, the ennemy speed increases when they were less only because it was a performance lack. More ennemy there were, more the game was laggy !
I looked through some of your code, and I noticed a few things wrong with it:
- unoptimized math commands. While it's not huge, using player+=10 is a lot better than player=player+10.
- what's the deal with all of the for loops? I don't see the point in many of them.
- you should chain if statements together more, it'll remove the need for much of the redundancies and might even half your code size.
- why do you assign different functions to keys instead of just making a checkKeys() function or just putting all checks inline? Or are you overriding previously existing functions provided by an NLua module?
I just started in LUA...
The '+=' works ? Omg I was fed up with all the 'player=player+10'
I will check all the other things tomorrow...
function on.charIn(ch)
if ch=="r" then
game="notfinished"
score=0
player=100
shotX=0;shotY=0
wait=0.04
aliensDir="right"
down="no"
aliensXY={}
shotsXY={}
lives=3
for i=1,21,2 do
aliensXY[i]=(math.ceil(i/2)-1)%7*31+1
aliensXY[i+1]=math.floor((math.ceil(i+1/2)-1)/7)*25+10
shotsXY[i]=aliensX[i]
shotsXY[i+1]=200
end
end
end
on.charIn("r")
function on.arrowLeft()
if player~=0 then
player-=10
end
end
function on.arrowRight()
if player<290 then
player+=10
end
end
function on.arrowUp()
if shotY <= 0 then
shotY=195
shotX+=13
end
end
function on.paint(gc)
gc:setColorRGB(0,0,0)
gc:setPen("thin","smooth")
gc:setFont("sansserif","r",8)
gc:drawString("Lua Alien Invaders - Par Loic Pujet",10,200,"top")
if game=="notfinished" then
gc:setColorRGB(200,0,0)
for i=1,21,2 do
if aliensXY[i+1]~=0 then
gc:drawArc(aliensXY[i]+4,aliensXY[i+1]-9,10,10,0,360)
gc:fillArc(aliensXY[i]-5,aliensXY[i+1]-4,28,8,0,360)
end
end
gc:setColorRGB(0,0,200)
for i=1,21,2 do
if shotsXY[i+1]<200 then
gc:fillRect(shotsXY[i],shotsxY[i+1],2,5)
end
end
if shotY>0 then
gc:fillRect(shotX,shotY,4,6)
end
gc:setColorRGB(100,0,255)
gc:fillRect(player,195,30,10)
gc:fillRect(player+13,191,4,4)
gc:setFont("sansserif","r",10)
gc:drawString("vies:"..tostring(lives).." score:"..tostring(score),0,0,"top")
else
gc:setColorRGB(0,0,0)
gc:setFont("sansserif","b",15)
gc:drawString("Score : "..tostring(score),100,50, "top")
gc:setColorRGB(0,0,255)
gc:drawString("Appuyez sur R pour rejouer",50,150,"top")
end
timer.start(wait)
end
function on.timer()
timer.stop()
if game=="notfinished" then
if aliensDir=="right" then
for i=1,21,2 do
if aliensXY[i+1]>0 then
aliensXY[i]+=1
end
end
else
for i=1,21,2 do
if aliensXY[i+1]>0 then
aliensXY[i]-=1
end
end
end
if aliensDir=="right" then
for i=1,21,2 do
if aliensXY[i]>305 then
down="yes"
end
end
else
for i=1,21,2 do
if aliensXY[i]<15 then
down="yes"
end
end
end
if down=="yes" then
down="no"
for i=1,21,2 do
if aliensXY[i+1]>0 then
aliensXY[i+1]+=25
end
end
if aliensDir=="left" then
aliensDir="right"
else
aliensDir="left"
end
end
for i=1,21,2 do
if aliensXY[i+1]>200 then
game="finished"
end
end
for i=1,21,2 do
if shotsXY[i+1]>=200 and aliensXY[i+1]~=0 then
if math.random(1,100)==5 then
shotsXY[i+1]=aliensXY[i+1]+math.random(1,10)
shotsXY[i]=aliensXY[i]
end
else
shotsXY[i+1]+=3
end
end
if shotY>=0 then
shotY-=5
end
for i=1,21,2 do
if shotsXY[i+]<200 then
if shotsXY[i+1]>195 and shotsXY[i]>player and shotsXY[i]<player+30 then
lives-=1
shotsXY[i+1]=200
end
end
end
if lives==0 then
game="finished"
end
if shotY ~= 0 then
for i=1,21,2 do
if shotY~=0 and shotY>aliensXY[i+1]-5 and shotY<aliensXY[i+1]+5
and shotX>aliensXY[i]-15 and shotX<aliensXY[i]+15 then
aliensXY[i+1]=0
aliensXY[i]=100
shotY=0
score+=1
end
end
end
wintest=0
for i=1,21,2 do
wintest+=aliensXY[i+1]
end
if wintest==0 and
if wait>0.02 then
wait-=0.005
end
aliensDir="right"
down="no"
for i=1,21,2 do
aliensXY[i]=(math.ceil(i/2)-1)%7*31+1
aliensXY[i+1]=math.floor((math.ceil(i+1/2)-1)/7)*25+10
shotsXY[i]=aliensX[i]
shotsXY[i+1]=200
end
end
end
platform.window:invalidate()
end
function on.arrowKey(key)
platform.window:invalidate()
end
Most double math commands like +=, -=, and the like usually work in lua, with exceptions of a few good ones like ++, --, and depending on the platform and what version was ported, the bitwise shifting ops.
Hmm, it actually seems as though they DO have 5.1.4 on it O.o No idea why the += operators aren't working then. I explicitly remember being able to use them when I used Lua a few years ago, and I've seen code examples with double ops in them.
Hmm, it actually seems as though they DO have 5.1.4 on it O.o No idea why the += operators aren't working then. I explicitly remember being able to use them when I used Lua a few years ago, and I've seen code examples with double ops in them.
Well, in the official Manual, " += " appears only one time, in the C integration part :
http://www.lua.org/manual/5.1/manual.html#lua_CFunction
for i=1,21,2 do
aliensXY[i]=(math.ceil(i/2)-1)%7*31+1
aliensXY[i+1]=math.floor((math.ceil(i+1/2)-1)/7)*25+10
shotsXY[i]=aliensX[i]
shotsXY[i+1]=200
end
Wasn't it supposed to be :for i=1,21,2 do
aliensXY[i]=(math.ceil(i/2)-1)%7*31+1
aliensXY[i+21]=math.floor((math.ceil(i+1/2)-1)/7)*25+10javascript:void(0);
shotsXY[i]=aliensXY[i]
shotsXY[i+21]=200
end
And all your "aliensXY[i+1]" shouldn't be changed in "aliensXY[i+21]" ? Because there are 21 aliens, and the table should content first their X position, and after their Y pos.- using numbers for directions rather than strings.Is it really faster ? I think that it will not really increase the speed...
PS:Well, it is 9:20 in France, but in USA, it may be very early... I will not get any answers until a few hours, I think :DYup, France is about 6-9 hours ahead of the US, so a lot of activity will happen at night in the US, when you're sleeping,and some of your activity will happen when most people in the US are sleeping. That being said, we do have a few other members from Europe. :)
If it could help you to understand :Wait... you can read that thing?
Where is the problem ? We can do this since a while ... The more important thing to know is that the data base part (like strings, keys of strings, and the Lua part) are readable without dissassembly procedure.If it could help you to understand :Wait... you can read that thing?
For pianoman :
The important thing is not all the weird characters, but the highlighted word in the last line and the following words... It says the Lua version is 5.1.4
To go back to the topic, my hi-score is 94. Can you beat it ? :)
The final version is here !Wait, 30-day trial?
I attach it in the first post, and in this post too.
It works on OS 3.0.2, as I used the official TI scripting tool, with the 30-days trial.
So thank you for all your help and replies, and I forgot to thank you for all your welcoming posts :)
The final version is here !Wait, 30-day trial?
I attach it in the first post, and in this post too.
It works on OS 3.0.2, as I used the official TI scripting tool, with the 30-days trial.
So thank you for all your help and replies, and I forgot to thank you for all your welcoming posts :)
Student software just says "Invalid 7Zip Archive" for me, If I manually extract the EXE, nothing happens still. It'll probably fix on my WinXP computer.The final version is here !Wait, 30-day trial?
I attach it in the first post, and in this post too.
It works on OS 3.0.2, as I used the official TI scripting tool, with the 30-days trial.
So thank you for all your help and replies, and I forgot to thank you for all your welcoming posts :)
He used the official TI scripting tool. To use it you need TI Nspire Computer Software. But since TI-Nspire Computer Software is under licence and we need to pay for it, Chockosta used the trial version of TI-Nspire Computer Software. But one thing is that it is not a 30-days trial, but a 90-days trial =)
Do you think that it's better if the player can shoot through blocks or not ?I think the player should not be able to shoot through blocks, as that means that he has too much protection. Make it so if the player does shoot the blocks that it counts as one of each blocks' three shots-to-destroy. ;)
Wow nice! And I like the new colors: It looks even closer to the original :D/me is crossing his fingers for possible sprites.
(http://upload.wikimedia.org/wikipedia/en/2/20/SpaceInvaders-Gameplay.gif)
do u already know when you release the one with blocks. and where could i download it then?I'm not sure if the version with blocks is available yet.
that was my question :)do u already know when you release the one with blocks. and where could i download it then?I'm not sure if the version with blocks is available yet.
function on.charIn(ch)
if ch=="r" then
blocks={5,5,5,5,5,5,5,5,5,5,5,5}
blockAttacked=0
game="notfinished"
score=0
player=100
shotX=0
shotY=0
level=1
wait=0.04
aliensDir="right"
down="no"
aliensX={}
aliensY={}
shotsX={}
shotsY={}
lives=3
for i=1,21,1 do
aliensX[i]=(i-1)%7*31+1
aliensY[i]=math.floor((i-1)/7)*25+10
shotsX[i]=aliensX[i]
shotsY[i]=200
end
end
if ch=="c" then
originalColors=not originalColors
end
end
function blocktest(x,y)
blockAttacked=0
if y>170 and y<177 then
if x>30 and x<40 and blocks[1]>0 then
blockAttacked=1
elseif x>40 and x<=50 and blocks[2]>0 then
blockAttacked=2
elseif x>50 and x<=60 and blocks[3]>0 then
blockAttacked=3
elseif x>60 and x<=70 and blocks[4]>0 then
blockAttacked=4
elseif x>140 and x<=150 and blocks[5]>0 then
blockAttacked=5
elseif x>150 and x<=160 and blocks[6]>0 then
blockAttacked=6
elseif x>160 and x<=170 and blocks[7]>0 then
blockAttacked=7
elseif x>170 and x<=180 and blocks[8]>0 then
blockAttacked=8
elseif x>250 and x<=260 and blocks[9]>0 then
blockAttacked=9
elseif x>260 and x<=270 and blocks[10]>0 then
blockAttacked=10
elseif x>270 and x<=280 and blocks[11]>0 then
blockAttacked=11
elseif x>280 and x<=290 and blocks[12]>0 then
blockAttacked=12
end
end
end
on.charIn("r")
function on.arrowLeft()
if player>0 then
player=player-10
end
end
function on.arrowRight()
if player<290 then
player=player+10
end
end
function on.tabKey()
if shotY<=0 then
shotY=195
shotX=player+13
end
end
function on.paint(gc)
if originalColors then
gc:setColorRGB(0,0,0)
gc:fillRect(0,0,platform.window:width(),platform.window:height())
end
if not originalColors then gc:setColorRGB(0,0,0)
else gc:setColorRGB(255,255,255) end
gc:setPen("thin","smooth")
gc:setFont("sansserif","r",8)
gc:drawString("Lua Alien Invaders - Par Loic Pujet",10,200,"top")
if game=="notfinished" then
if not originalColors then gc:setColorRGB(200,0,0)
else gc:setColorRGB(255,255,255) end
for i=1,21,1 do
if aliensY[i]~=0 then
gc:drawArc(aliensX[i]+4,aliensY[i]-9,10,10,0,360)
gc:fillArc(aliensX[i]-5,aliensY[i]-4,28,8,0,360)
end
end
if not originalColors then gc:setColorRGB(0,0,200)
else gc:setColorRGB(255,255,0) end
for i=1,21,1 do
if shotsY[i]<200 then
gc:fillRect(shotsX[i],shotsY[i],2,5)
end
end
if shotY>0 then
gc:fillRect(shotX,shotY,4,6)
end
if not originalColors then gc:setColorRGB(100,0,255)
else gc:setColorRGB(0,255,0) end
gc:fillRect(player,195,30,10)
gc:fillRect(player+13,191,4,4)
gc:setFont("sansserif","r",10)
gc:drawString("Vies:"..tostring(lives).." Score:"..tostring(score).." Niveau:"..tostring(level),0,0,"top")
if not originalColors then add=3
else add=0 end
for i=1,12,1 do
if blocks[i]>0 then
gc:fillRect(i*10+math.floor((i-1)/4)*70+20,180-blocks[i]*2,10,blocks[i]*2)
end
end
else
if not originalColors then gc:setColorRGB(0,0,0)
else gc:setColorRGB(255,255,255) end
gc:setFont("sansserif","b",15)
gc:drawString("Score : "..tostring(score),100,50, "top")
if not originalColors then gc:setColorRGB(0,0,255) end
gc:drawString("Appuyez sur R pour rejouer",50,150,"top")
end
timer.start(wait)
end
function on.timer()
timer.stop()
if game=="notfinished" then
if aliensDir=="right" then
for i=1,21,1 do
if aliensY[i]>0 then
aliensX[i]=aliensX[i]+1
end
end
else
for i=1,21,1 do
if aliensY[i]>0 then
aliensX[i]=aliensX[i]-1
end
end
end
if aliensDir=="right" then
for i=1,21,1 do
if aliensX[i]>305 then
down="yes"
end
end
else
for i=1,21,1 do
if aliensX[i]<15 then
down="yes"
end
end
end
if down=="yes" then
down="no"
for i=1,21,1 do
if aliensY[i]>0 then
aliensY[i]=aliensY[i]+25
end
end
if aliensDir=="left" then
aliensDir="right"
else
aliensDir="left"
end
end
for i=1,21,1 do
if aliensY[i]>180 then
game="finished"
end
if shotsY[i]>=200 and aliensY[i]~=0 then
if math.random(1,100)==5 then
shotsY[i]=aliensY[i]+math.random(1,10)
shotsX[i]=aliensX[i]
end
else
shotsY[i]=shotsY[i]+3
end
blocktest(shotsX[i],shotsY[i])
if blockAttacked>0 then
shotsY[i]=201
blocks[blockAttacked]=blocks[blockAttacked]-1
end
if shotsY[i]<200 then
if shotsY[i]>195 and shotsX[i]>player and shotsX[i]<player+30 then
lives=lives-1
shotsY[i]=200
end
end
if shotY>0 and shotY>aliensY[i]-5 and shotY<aliensY[i]+5 and shotX>aliensX[i]-10 and shotX<aliensX[i]+21 then
aliensY[i]=0
aliensX[i]=100
shotY=0
score=score+1
end
end
blocktest(shotX,shotY)
if blockAttacked>0 then
shotY=-1
blocks[blockAttacked]=blocks[blockAttacked]-1
end
if shotY>=0 then
shotY=shotY-5
end
if lives<=0 then
game="finished"
end
wintest=0
for i=1,21,1 do
wintest=wintest+aliensY[i]
end
if wintest==0 then
if wait>0.01 then
wait=wait-0.005
end
level=level+1
aliensDir="right"
down="no"
for i=1,21,1 do
aliensX[i]=(i-1)%7*31+1
aliensY[i]=math.floor((i-1)/7)*25+10
shotsX[i]=aliensX[i]
shotsY[i]=200
end
end
end
platform.window:invalidate()
end
I think that my code is pretty awful, good luck when reading it :)Space Invaders 0.8 is already in my calc and it's pretty great. However, I'd still like an English version and highscores :) I really like it though.
because a lot of French people (including me) have their calc in English..