I have a problem with my simple game.
The concept of the game is character that shoots bullets. The player can move the character in four directions using arrows and shoot (only shooting right for now) with "x" key. Everything looks fine when I press "x" key the object is created and it travels right, but by pressing the key to shoot again the bullets are overlaping and the more bullets are created the faster all of the bullets that are overlapped into one go.
If someone can help me figure out what is wrong with this "game" I'd be very happy.
Link to download this game: http://www.mediafire.com/file/0q6z3ng0875uag7/game.tic
Here's the code:
-------------------------------------------------------------------- -- author: Koziorek -- desc: simple game -- script: lua xpos=96 --position x of the character ypos=24 --position y of the character bullet = {x = 96, y = 24, tick = 0, anim = 0} --entity "class" (pattern for "object") entity = {} -- table that contains all of the "objects" function create_bullet(xp, yp) --function that creates bullet local obj = {} --object is local because it is used as temporary table and is used only in thi function obj = bullet --setting new objcet (bullet) to pattern of the bullet -> table "bullet" obj.x = xp --changing position x of the newly created bullet to xp (1st parameter of this function) obj.y = yp --changing position y of the newly created bullet to yp (2nd parameter of this function) obj.anim = 1 --changing "variable": "anim" of the newly created bullet to 1 (it is done in order to enable moving the bullet) table.insert(entity, #entity+1, obj) --insert new changed bullet to table of all the objects (bullets) end function fire() -- after pressing "x" key this function will activate create_bullet(xpos, ypos) -- create new "object"(bullet) with position of the character controled by the player end function animate() --move right all of the objects (bullets) for i=0,#entity-1 do --loops through every object (bullet) if entity[i+1].anim == 1 then --if the particular object marked by iterator "i" has "variable" (anim) that is 1 then... entity[i+1].x = entity[i+1].x + 1 --...increase every object"s x position by 1 end end end function TIC() --movement controls (arrows) if btn(0) then ypos=ypos-1 end if btn(1) then ypos=ypos+1 end if btn(2) then xpos=xpos-1 end if btn(3) then xpos=xpos+1 end cls(0) spr(3, xpos, ypos, 0, 1, 0, 0, 2, 2) --draw character controled by the player if btnp(5,60,60) then --fire bullet by pressing "x" key fire() end if #entity > 0 then --if there is at least one "object" in a table, draw those objects (bullets) animate() for i=0,#entity-1 do --draw every object (bullet) --draw bullet spr(2, entity[i+1]["x"], entity[i+1]["y"], 0, 1, 0, 0, 1, 1) --[[on the first iteration the "i" has the value of 0, so using i+1 is the correctly way to tell the number of iteration--]] end end end --------------------------------------------------------------