problems with score function

I’m having trouble creating the score.
when the little man goes over an animal the score increases by 1, only that he increases it by 2 and after going over an animal he cannot go above the others but instead of running forward he goes back

the code is:



– game.lua


– caricamento composer library
local composer = require( “composer” )

– definizione di una nuova scena
local scene = composer.newScene()

– caricamento e inizializzazione fisica
local physics = require(“physics”)
–partenza del sistema fisico
physics.start()

–inizializzazione variabili locali
local music --variabile per impostazione musica
local playSound --variabile per impostazione suono
local bosco1 --immagine di sfondo1
local bosco2 --immagine di sfondo2
local terreno1 --terreno 1
local terreno2 --terreno2
local opt --variabile per impostazione opzioni
local boySheet --variabile impostazione sheet dell’oggetto boy
local runningBoy --variabile per far correre l’oggetto boy
local boy --variabile per oggetto boy
local score=0 --variabile per impostazione punteggio
local highscoreTx --variabile per il testo del punteggio
local obstacle --variabile per la creazione degli ostacoli
local animal --variabile per la creazione degli animali
local sceneGroup --variabile per inserimento oggetti nella scena
local element --variabile per la creazione di nuovi elementi

local elementSpeed=3
local gameLoopTimer
local speed=2 --velocità sfondo e terreno

–tabella per inserimenti di ostacoli e animali
local elements={}

– funzione per far saltare boy quando viene toccato
local function boyJump(self, event)
–se boy non sta saltando…
if boy.action ~= “jump” then
–da commentare
boy:applyLinearImpulse(0,-220,boy.x,boy.y)
boy.action = “run”

end  

end

local function onCollision(self,event)
– self rappresenta l’oggetto badGuy
– event.other rappresenta l’altro ogetto
– coinvolto nell’urto
if event.phase==“began” then
if event.other.name==“ground” and event.contact.isTouching==true then
self.action=“run”
end
end
return true
end

– IMPLEMENTAZIONEMPLEMENTAZIONE DELLO SCORRIMENTO ORIZZONTALE DEL TERRENO E DELLO SFONDO
– mentre l’oggetto boy continua a stare nella stessa posizione

function scrolling(self,event)
– self è l’oggetto da muovere verso sinistra
if self.x<-(display.contentCenterX-speed*2) then
self.x = display.contentWidth+display.contentCenterX
else
self.x =self.x - speed
end
return true
end

– Funzione per la creazione degli ostacoli e animali
local function createElement( event )

-- 1, 3, 6, 8 = ostacoli  
-- 2, 4, 5, 7 = animali
-- In base al numero cambia l'immagine caricata
local rType = math.random(1, 8)

-- Ostacolo fiamma 
if(rType == 1 or rType == 6) then
	element = display.newImageRect(sceneGroup,"img/flame.png", 80, 80);
	element.myName = "flame"
	--element.touchable = true
	element.anchorX = 0
	element.anchorY = 0
	-- L'elemento generato viene posizionato in modo casuale, ma entro i margini dello schermo
	element.x = 1080
	element.y = 200;
    -- Aggiungiamo un corpo statico alla fiamma 
	
	physics.addBody(element, "dynamic", { bounce = 0.0 })
	
-- Ostacolo roccia 
elseif(rType == 3 or rType == 8) then
	element = display.newImageRect(sceneGroup,"img/rock.png", 70, 50);
	element.myName = "roccia"
	--element.touchable = true
	element.anchorX = 0
	element.anchorY = 0
	
	element.x = 1080
	element.y = 200;
     -- Aggiungiamo un corpo statico alla roccia
	
    physics.addBody(element, "dynamic", { bounce = 0.0 })
	
-- Animale 
elseif (rType == 2 or rType == 5) then
	
	element = display.newImageRect(sceneGroup,"img/rabbit.png", 80, 80);
	element.myName = "rabbit"
	
	element.anchorX = 0
	element.anchorY = 0
	
	element.x = 1080
	element.y = 200;
     -- Aggiungiamo un corpo statico al coniglio 
	
    physics.addBody(element, "dynamic", { bounce = 0.0 })
else
	element = display.newImageRect(sceneGroup,"img/koala.png", 200, 120);
	element.myName = "koala"
	
	element.anchorX = 0
	element.anchorY = 0
	-- L'elemento generato viene posizionato in modo casuale, ma entro i margini dello schermo
	element.x = 1080
	element.y = 150;
     -- Aggiungiamo un corpo statico al koala 
	
    physics.addBody(element, "dynamic", { bounce = 0.0 })

	


end	
table.insert(elements, element)
return element
 
end 

–funzione che implementa lo scorrimento orizzontale di ogni ostacolo attivo
local function obstacleScroll(self, event)
self.x=self.x - elementSpeed
end

– funzione che elimina gli ostacoli non attivi e ne crea di nuovi
– e viene chiamato ogni secondo

–funzione per gestire il loop del videogioco
local function gameLoop()
– creazione nuovo ostacolo fuori dal display
element=createElement()
– attivazione dello scorrimento orizzontale degli ostacoli
– per farli entrare nel display
element.enterFrame = obstacleScroll
Runtime:addEventListener(“enterFrame”,element)

-- analizza la tabella degli ostacoli attivi alla ricerca di
-- ostacoli attivi che si trovano nel margine sinistro del display
-- gli ostacoli e gli ascoltatori vengono rimossi insieme 
-- all'entrata degli ostacoli nella tabella 

for i,thisElement in ipairs(elements) do
	if thisElement.x < -display.contentWidth then
		Runtime:removeEventListener("enterFrame",thisElement)
		display.remove(thisElement)
		table.remove(elements,i)
	end
end		

end

–variabile che contiene il timer del loop del gioco
–viene richiamato gameLoop ogni secondo per mezzo di timer.performWithDelay
–2500 è il ritardo con cui vengono creati gli elementi
gameLoopTimer = timer.performWithDelay(2500,gameLoop,0)

–funzione che viene richiamata quando l’oggetto boy collide con un ostacolo
local function elementCollision(self,event)
if (event.phase==“began”) then

–se la collisione avviene tra boy, la fiamma e la roccia
if ((event.other.myName==“flame” and self.myName==“boy”) or (event.other.myName==“roccia” and self.myName==“boy”)) then

physics.pause()
timer.cancel(gameLoopTimer)
display.remove(boy)
boy = nil
–rimozione suono in sottofondo
audio.stop(playSound)
playSound=nil
–liberazione memoria
audio.dispose(playSound)

Runtime:removeEventListener(“enterFrame”, bosco1)
Runtime:removeEventListener(“enterFrame”, bosco2)
Runtime:removeEventListener(“enterFrame”, terreno1)
Runtime:removeEventListener(“enterFrame”, terreno2)
Runtime:removeEventListener(“enterFrame”, onCollision)
Runtime:removeEventListener(“enterFrame”, elementCollision)
Runtime:removeEventListener(“enterFrame”, element)

for i=#elements,1,-1 do
	      local thisElement=elements[i]
		  Runtime:removeEventListener("enterFrame",thisElements)  
	    end

composer.gotoScene(“restart”,{ time=800, effect=“crossFade” } )

end
end

if ((event.other.myName==“rabbit” and self.myName==“boy”) or (event.other.myName==“koala” and self.myName==“boy”)) then
if (event.contact.isTouching==true)then

score=score + 1
end

event.contact.isTouching=false
–l’animale “salvato” scompare
transition.fadeOut(event.other, {time=60})

print(“score”)
print(score)
highscoreTx.text=“Score” … score
end
end

– creazione scene ()
function scene:create( event )

sceneGroup = self.view

– Code here runs when the scene is first created but has not yet appeared on screen
–caricamento di un suono in sottofondo
music=audio.loadStream(“audio/Sand_Castle.mp3”)
–riproduzione suono con loop continuo
playSound=audio.play(music, {loops=-1})
–impostazione background

bosco1 = display.newImageRect(sceneGroup, “img/back1.jpg”,display.contentWidth,display.contentHeight)
bosco1.x=display.contentCenterX
bosco1.y = display.contentCenterY

bosco2 = display.newImageRect(sceneGroup, “img/back2.jpg”,display.contentWidth,display.contentHeight)
bosco2.x=display.contentCenterX+display.contentWidth
bosco2.y = display.contentCenterY

– impostazione terreno

terreno1 = display.newImageRect(sceneGroup, “img/ground.png”,1920,105)
terreno1.x = display.contentCenterX
terreno1.y = display.contentHeight-52
terreno1.myName=“ground”

terreno2 = display.newImageRect(sceneGroup, “img/ground.png”,1920,105)
terreno2.x = display.contentCenterX+display.contentWidth
terreno2.y = display.contentHeight-52
terreno2.myName=“ground”

–impostazione boy

opt={width =93, height= 150, numFrames = 60}
boySheet=graphics.newImageSheet(“img/boy.png”,opt)
runningBoy={

		 {
		   name = "runRight",
		   start = 31,
		   count = 30,
		   time = 300,
		   loopCount = 0,
		   loopDirection ="forward"
		 }
                 
		 }

boy=display.newSprite(boySheet, runningBoy)
boy.x=50
boy.y=display.contentHeight-232
boy:setSequence(“runRight”)
boy:play()
boy.action=“run”
boy.myName=“boy”

– aggiunta corpo fisico dinamico a boy, con attrito elevato e rimbalzo 0
physics.addBody(boy,“dynamic”,{friction=1.0,bounce=0.0,density=1.3})
boy.isFixedRotation = true

– INIZIO GENERAZIONE MONDO FISICO

– trasformazione terreno1 e terreno2
– in corpi fisici statici con elevato attrito e nessun rimbalzo
physics.addBody(terreno1,“static”,{friction=1.0,bounce=0.0,density=1.8})
physics.addBody(terreno2,“static”,{friction=1.0,bounce=0.0,density=1.8})

–scorrimento orizzontale sfondo e terreno
bosco1.enterFrame = scrolling
Runtime:addEventListener( “enterFrame”, bosco1)
bosco2.enterFrame = scrolling
Runtime:addEventListener( “enterFrame”, bosco2 )
terreno1.enterFrame=scrolling
Runtime:addEventListener(“enterFrame”,terreno1)
terreno2.enterFrame=scrolling
Runtime:addEventListener(“enterFrame”,terreno2)
– FINE IMPLEMENTAZIONE SCORRIMENTO ORIZZONTALE

–listener di tocco su boy
–quando boy viene toccato salta
boy:addEventListener(“tap”,boyJump)

– attivare il listener di tocco su boy
boy.collision = onCollision
boy:addEventListener(“collision”,boy)

–associa a boy un ascoltatore locale per l’evento collision
–l’ascoltatore deve essere un table listener che richiama la funzione
–obstacleCollision
boy.collision=elementCollision
boy:addEventListener(“collision”, boy )

end

– show()
function scene:show( event )

local sceneGroup = self.view
local phase = event.phase

if ( phase == "will" ) then
	-- Code here runs when the scene is still off screen (but is about to come on screen)
	--impostazione testo per il punteggio 
	highscoreTx=display.newText(sceneGroup, "Score:", display.contentCenterX, display.contentCenterY-150, native.systemFont, 30)
    highscoreTx:setFillColor(black)
	
    
elseif ( phase == "did" ) then

– Code here runs when the scene is entirely on screen

end
end

scene:addEventListener(“show”)

– hide()
function scene:hide( event )

local sceneGroup = self.view
local phase = event.phase

if ( phase == "will" ) then
	-- Code here runs when the scene is on screen (but is about to go off screen)
	physics.pause()
elseif ( phase == "did" ) then
	-- Code here runs immediately after the scene goes entirely off screen
	end

end

– destroy()
function scene:destroy( event )

local sceneGroup = self.view
-- Code here runs prior to the removal of scene's view
--eliminazone scena restart
composer.removeScene("restart")

end


– Scene event function listeners


scene:addEventListener( “create”, scene )
scene:addEventListener( “show”, scene )
scene:addEventListener( “hide”, scene )
scene:addEventListener( “destroy”, scene )


return scene

what is the problem? thanks!

Hello!

You seem to be opening these threads very frequently. Asking for help is perfectly fine, even encouraged, but you should, at the very least, demonstrate that you’ve tried to solve this issue on your own and that you’ve made an effort.

You should format your posts correctly so that the code can be easily read. Secondly, you should try to isolate your problem by creating a small sample project that demonstrates your issue. Often you figure out what is going on by doing this part.

Essentially, you should try to make it as easy as you can for others to help you.


Finally, as a programmer, debugging is an important and a necessary part of your job. You shouldn’t rely on strangers on the forums fixing the issues you encounter if you wish to improve as a programmer.

The easiest debugging method is adding print() calls to your code.

For instance, you can add the line: print( "score increased" ) to the function that is supposed to increase your score count. If you see the print twice, then you know that it is being called twice. Then you can try figuring out why that is, or ask a more specific question here on the forums and now you can better describe what you’ve done, what you expected to happen and what actually happened.

Happy debugging!

I’m not and I don’t want to be a programmer. I study sciene and multimedia technologies, but I am more projected towards the world of communication, photography, shooting and digital editing. they are all subjects that I have studied in these three years, but unfortunately this faculty also includes a small part of programming that I don’t like at all.

I often ask questions because among my companions we are all in a little bad shape. many give up because of programming and the few who know something about it don’t help (nice programmers ah)

anyway, i need it for the last university exam (who knows why i left it at the end)

I’m not interested in improving programming, I just need to pass this exam with an 18/30 and graduate and then go on to study marketing, communication and business strategies.

thanks anyway for the reply

I appreciate your honesty. Programming isn’t for everyone.

Perhaps someone will help you out. As a part-time lecturer myself, I’m averse to doing other people’s coursework for them. :stuck_out_tongue:

Really? :face_with_raised_eyebrow: Just like @XeduR I don’t feel like helping somebody who doesn’t have the ambition to improve. I have better things to do with my time. If you want someone to do your homework for you, I suggest you pay them and hope to get away with it. Sorry for being so harsh, but I’m just being as honest as you were in your post. Good luck with your exams, no hard feelings.