This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.
Messages - Chockosta
451
« on: June 05, 2011, 09:59:23 am »
Well, the speed without optimizations was already adapted to the game. I tried the optimizations like one table instead of two for X and Y, but I couldn't see the speed changing. I think that the difference exist, but it's too small. I will post the final version in a few hours including a first page which contains explanations (keys, etc)
452
« on: June 05, 2011, 08:17:15 am »
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 ?
453
« on: June 04, 2011, 02:10:23 pm »
I updated the first post with a playable version, screenies, and a link to the .tns (unfortunately the website where I uploaded it has a lot of ads) This may be the final version, because the game is finished and the gameplay seems good for me. Some optimizations still can be done, but the speed is fast enough. (If you think that it's too slow, try to reach 100 points ) EDIT : I just saw we could attach files No more ads, now.
454
« on: June 04, 2011, 03:21:17 am »
Thanks for your helping, Ashbad. For the '+=' operators, I was thinking that I've already tried it. But I don't really understand the : 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
455
« on: June 03, 2011, 03:41:19 pm »
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...
456
« on: June 03, 2011, 03:37:34 pm »
Strange... It works perfectly on my emulator. (Nspire_emu) Oooooh i understood ! The "spoiler" option suppress all the '[i ]' of tables ! Let's try it with "code" 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 Yay, it works ! I join a screenie : Translate it to English if you want. BTW, I saw that we could join pictures. How can I do that ?
457
« on: June 03, 2011, 02:56:02 pm »
Hello everybody !
That's my first post here, so I'll try to introduce myself. 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. I was a member of TI-Bank, and I left this website because of all the troubles (fights between admins, etc) 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. 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. 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.
The player can shoot with the up arrow, but that's not really convenient. If you had any better idea... 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 !) EDIT : final version, updated.
Thank you, Chockosta (Loic Pujet)
Lua code (Edited, final version):
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 I attached the .tns It works on OS 3.0.1 and OS 3.0.2 (edited : bug fixed)
|