_W = display.contentWidth
_H = display.contentHeight
module ( ... , package.seeall )
function new( )
local localGroup = display.newGroup ( )
local time_remain = 24
time_up = false
ready = false
local time_remain = 24
-- Display countdown text
local countdowntxt = display.newText( time_remain, 300, 11, native.systemFont, 16 )
countdowntxt:setTextColor ( 255, 0, 0 )
--Add funtion for countdown
local function countdown (e)
if (time_remain == 24) then
ready = true
end
time_remain =time_remain -1
print(time_remain)
countdowntxt.text = time_remain
if(time_remain == 0) then
time_up = true
end
end
gametimer = timer.performWithDelay ( 1000, countdown, 24 )
--> Add physics engine, start up the engine, and apply gravity
local physics = require ("physics")
physics.start( )
-- Set gravity to act "down" (ie, toward the bottom of the device)
physics.setGravity(0, 9.8)
local bounce = audio.loadSound("bbounce.mp3")
--physics.setDrawMode("hybrid")
local function onCollision(event)
if event.phase == "began" then
audio.play(bounce)
if event.object1.name == "floor" then
score = 0
else
addToScore()
end
print (event.object1.name.." and "..event.object2.name)
end
end
--> Add background image
local background = display.newImage("wp1.png")
background.x = display.contentCenterX
background.y = display.contentCenterY
localGroup:insert(background)
--> Add ball to stage and position
local ball = display.newImage("Basketball.png")
ball.x = display.contentWidth/2
ball.y = display.contentHeight/2
--> Turn ball into physics body
physics.addBody(ball, { bounce = 0.5, radius = 40, friction = 1.0 } )
ball.name = "ball"
localGroup:insert(ball)
--> Add ball2
local ball2 = display.newImage("Basketball.png")
ball2.x = ball.x - 105
ball2.y = display.contentHeight/2
physics.addBody(ball2, {bounce = 0.5, radius = 40, friction = 1.0 } )
ball2.name = "ball 2"
localGroup:insert(ball2)
--> Add ball3
local ball3 = display.newImage("Basketball.png")
ball3.x = ball.x + 105
ball3.y = display.contentHeight/2
physics.addBody (ball3, {bounce = 0.5, radius = 40, friction = 1.0 } )
ball3.name = "ball 3"
localGroup:insert(ball3)
system.activate( "multitouch" )
-- Define wall graphics (rectangles)
local leftWall = display.newRect(0, 0, 0.1, display.contentHeight )
leftWall.y = display.contentCenterY
leftWall.name = "left wall"
local rightWall = display.newRect(display.contentWidth, 0, 0.1, display.contentHeight)
rightWall.y = display.contentCenterY
rightWall.name = "right wall"
local ceiling = display.newRect(0, 0, display.contentWidth, 0.1 )
ceiling.x = display.contentCenterX
ceiling.name = "ceiling"
-- Turn wall graphics into physical bodies
physics.addBody( leftWall, "static", { bounce = 0.1 } )
physics.addBody( rightWall, "static", { bounce = 0.1 } )
physics.addBody(ceiling, "static", { bounce = 0.1 } )
--> Add floor image and position
local floor = display.newImage("floor.png")
floor.y = display.contentHeight - floor.contentHeight/2
floor.x = display.contentCenterX
floor.name = "floor"
--> Turn floor into physics body
physics.addBody(floor, "static", { bounce = 0.2, friction = 1.0 } )
localGroup:insert(floor)
-- Define our touch event listner
function moveBall(event)
local ball = event.target
ball:applyLinearImpulse( 0, -0.3, event.x, event.y )
end
-- Add the listener to our ball
ball:addEventListener("touch", moveBall)
ball2:addEventListener("touch", moveBall)
ball3:addEventListener("touch", moveBall)
--Saving/Loading Stuff
local ego = require "ego"
local saveFile = ego.saveFile
local loadFile = ego.loadFile
-- Create score text
local score = 0
local scoreText = display.newText(score, 220, 11, native.systemFont, 16)
scoreText:setTextColor( 255, 255, 255 )
scoreText.text = "Score: "..score
-- Function to add to score and update scoreText
local function addToScore()
score = score + 1
scoreText.text = "Score: "..score
end
--Load highscore value from file. (It will initally be a string.)
highscore = loadFile ("highscore.txt")
--If the file is empty (this means it is the first time you've run the app) save it as 0
local function checkForFile ()
if highscore == "empty" then
highscore = 0
saveFile("highscore.txt", highscore)
end
end
checkForFile()
--Print the current highscore
print ("Highscore is: ", highscore)
local highscoreText = display.newText(highscore, 80, 11, native.systemFont, 16)
highscoreText:setTextColor( 255, 255, 0 )
highscoreText.text = "Highscore is: "..highscore
--When the app is quit (or simulator refreshed) save the new highscore
--(If score > highscore the data will not be changed)
local function onSystemEvent ()
if score > tonumber(highscore) then --We use tonumber as highscore is a string when loaded
saveFile("highscore.txt", score)
local highscoreText = display.newText(highscore, 200, 0, native.systemFont, 16)
highscoreText:setTextColor( 255, 255, 0)
highscoreText.text = "Highscore is: "..highscore
end
end
Runtime:addEventListener( "system", onSystemEvent )
-- Add listeners to balls so it will add to score when they are touch
ball:addEventListener("touch", addToScore)
ball2:addEventListener("touch", addToScore)
ball3:addEventListener("touch", addToScore)
Runtime:addEventListener("collision", onCollision)
Runtime:addEventListener("collision", addToScore)
local function checkTime(e)
if time_remain == 0 then
Runtime:removeEventListener("enterFrame", checkTime)
director:changeScene("gameover")
end
end
Runtime:addEventListener("enterFrame", checkTime)
return localGroup
end
That is all my code from game.lua. It all worked good and without problems. Last function I did is onCollision first audio and print options and both worked. When I added if statement with floor problems started.