Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- display.setStatusBar(display.HiddenStatusBar)
- local storyboard = require "storyboard"
- local scene = storyboard.newScene()
- require("physics")
- require("sprite")
- ----------------------------
- -- Functions
- ----------------------------
- local function collisionGround(event)
- event.other:removeSelf()
- end
- local function collisionCharacter(event)
- if (event.other.type == "penny") then
- storyboard.money = storyboard.money + 0.01
- event.other:removeSelf()
- elseif (event.other.type == "nickel") then
- storyboard.money = storyboard.money + 0.05
- event.other:removeSelf()
- elseif (event.other.type == "dime") then
- storyboard.money = storyboard.money + 0.10
- event.other:removeSelf()
- elseif (event.other.type == "quarter") then
- storyboard.money = storyboard.money + 0.25
- event.other:removeSelf()
- elseif (event.other.type == "rock") then
- storyboard.gotoScene("gameover", "slideLeft", 1000)
- end
- textMoney.text = string.format("$%.02f", storyboard.money)
- end
- local motion = 0
- local isPaused = false
- local function moveLeft(event)
- if not isPaused then
- motion = -9
- buttonLeft:prepare("leftt")
- buttonLeft:play()
- character:prepare("charml")
- character:play()
- character.type = "left"
- end
- end
- local function moveRight(event)
- if not isPaused then
- motion = 9
- buttonRight:prepare("rightt")
- buttonRight:play()
- character:prepare("charmr")
- character:play()
- character.type = "right"
- end
- end
- local function moveCharacter(event)
- character.x = character.x + motion
- if character.x < 50 then character.x = 50
- elseif character.x > 910 then character.x = 910 end
- buttonLeft:toFront()
- buttonRight:toFront()
- end
- local function stopCharacter(event)
- if event.phase == "ended" then
- motion = 0
- buttonLeft:prepare("leftu")
- buttonLeft:play("leftu")
- buttonRight:prepare("rightu")
- buttonRight:play("rightu")
- if (character.type == "left") then
- character:prepare("charsl")
- character:play("charsl")
- elseif (character.type == "right") then
- character:prepare("charsr")
- character:play("charsr")
- end
- end
- end
- local function pauseGame(scene)
- isPaused = not isPaused
- if isPaused then
- buttonPause:prepare("pauset")
- buttonPause:play()
- physics.pause()
- timer.pause(createCoinsTimer)
- else
- buttonPause:prepare("pauseu")
- buttonPause:play()
- physics.start()
- timer.resume(createCoinsTimer)
- end
- end
- ----------------------------
- -- Storyboard
- ----------------------------
- function scene:createScene(event)
- local group = self.view
- local background = display.newImage(group, "visuals/game_background.png", 0, 0)
- ground = display.newImage(group, "visuals/game_ground.png", 0, 590)
- physics.addBody(ground, "static")
- ground:addEventListener("collision", collisionGround)
- local buttonSheet = sprite.newSpriteSheet("visuals/game_buttons.png", 75, 75)
- local buttonLeftSet = sprite.newSpriteSet(buttonSheet, 1, 2)
- sprite.add(buttonLeftSet, "leftu", 1, 1, 60000, 0)
- sprite.add(buttonLeftSet, "leftt", 2, 1, 60000, 0)
- local buttonRightSet = sprite.newSpriteSet(buttonSheet, 3, 2)
- sprite.add(buttonRightSet, "rightu", 3, 1, 60000, 0)
- sprite.add(buttonRightSet, "rightt", 4, 1, 60000, 0)
- local buttonPauseSet = sprite.newSpriteSet(buttonSheet, 5, 2)
- sprite.add(buttonPauseSet, "pauseu", 5, 1, 60000, 0)
- sprite.add(buttonPauseSet, "pauset", 6, 1, 60000, 0)
- buttonLeft = sprite.newSprite(buttonLeftSet)
- buttonLeft:addEventListener("touch", moveLeft)
- buttonLeft.x = 57.5
- buttonLeft.y = 582.5
- group:insert(buttonLeft)
- buttonRight = sprite.newSprite(buttonRightSet)
- buttonRight:addEventListener("touch", moveRight)
- buttonRight.x = 902.5
- buttonRight.y = 582.5
- group:insert(buttonRight)
- buttonPause = sprite.newSprite(buttonPauseSet)
- buttonPause:addEventListener("tap", function(event), pauseGame(self) end)
- buttonPause.x = 902.5
- buttonPause.y = 57.5
- group:insert(buttonPause)
- local characterSheet = sprite.newSpriteSheet("visuals/game_character.png", 100, 100)
- local characterSet = sprite.newSpriteSet(characterSheet, 1, 8)
- sprite.add(characterSet, "charsl", 1, 1, 60000, 0)
- sprite.add(characterSet, "charml", 2, 3, 150, 0)
- sprite.add(characterSet, "charsr", 5, 1, 60000, 0)
- sprite.add(characterSet, "charmr", 6, 3, 150, 0)
- character = sprite.newSprite(characterSet)
- physics.addBody(character, "static")
- character:addEventListener("collision", collisionCharacter)
- self:addEventListener("enterFrame", moveCharacter)
- self:addEventListener('Stop', stopCharacter)
- character.x = display.contentWidth / 2
- character.y = 540
- group:insert(character)
- storyboard.money = 0
- textMoney = display.newText(string.format("$%.02f", storyboard.money), 0, 20, native.systemFont, 75)
- textMoney:setReferencePoint(display.CenterReferencePoint)
- textMoney.x = display.contentWidth / 2
- textMoney:setTextColor(0, 0, 0)
- group:insert(textMoney)
- Runtime:addEventListener('enterFrame', self)
- Runtime:addEventListener('touch', self)
- end
- local function createCoins(scene)
- local group = self.view
- local coinSheet = sprite.newSpriteSheet("visuals/game_coins.png", 50, 50)
- local coinSet = sprite.newSpriteSet(coinSheet, 1, 25)
- sprite.add(coinSet, "penny", 1, 5, 250, 0)
- sprite.add(coinSet, "nickel", 6, 5, 250, 0)
- sprite.add(coinSet, "dime", 11, 5, 250, 0)
- sprite.add(coinSet, "quarter", 16, 5, 250, 0)
- sprite.add(coinSet, "rock", 21, 5, 250, 0)
- local coin = sprite.newSprite(coinSet)
- physics.addBody(coin, "dynamic")
- coin.isSensor = true
- coin.isFixedRotation = true
- local chooseCoin = math.random(1, 100)
- if chooseCoin >= 1 and chooseCoin <= 25 then
- coin.type = "penny"
- elseif chooseCoin >= 26 and chooseCoin <= 45 then
- coin.type = "nickel"
- elseif chooseCoin >= 46 and chooseCoin <= 65 then
- coin.type = "dime"
- elseif chooseCoin >= 66 and chooseCoin <= 80 then
- coin.type = "quarter"
- elseif chooseCoin >= 81 and chooseCoin <= 100 then
- coin.type = "rock"
- end
- coin:prepare(coin.type)
- coin:play()
- local chooseLocation = math.random(0, 1)
- coin.y = 400
- coin.x = -25 + chooseLocation * 1010
- coin:applyLinearImpulse(0.2 - (chooseLocation * 0.4), -math.random(0.50, 3.45) / 10, coin.x, coin.y)
- function coin:removeSelf()
- scene:removeEventListener('exitScene', self)
- display.remove(coin)
- end
- function coin:exitScene(event)
- timer.performWithDelay(1,
- function(...)
- self:removeSelf()
- end
- )
- end
- scene:addEventListener('exitScene', coin)
- group:insert(coin)
- end
- local function sceneEnterFrame(self, event)
- if not isPaused then
- self:dispatchEvent(event)
- end
- end
- local function sceneTouch(self, event)
- if not isPaused then
- self:dispatchEvent{name="Stop"}
- end
- end
- function scene:enterScene(event)
- physics.setGravity(0, 9.8)
- physics.start()
- scene.enterFrame = sceneEnterFrame
- scene.touch = sceneTouch
- createCoinsTimer = timer.performWithDelay(500, function() createCoins(self) end, 0)
- end
- function scene:exitScene(event)
- physics.stop()
- self.enterFrame = nil
- self.touch = nil
- timer.cancel(createCoinsTimer)
- storyboard.purgeScene("game")
- end
- function scene:destroyScene(event)
- Runtime:removeEventListener('enterFrame', self)
- Runtime:removeEventListener('touch', moveCharacter)
- end
- scene:addEventListener("createScene", scene)
- scene:addEventListener("enterScene", scene)
- scene:addEventListener("exitScene", scene)
- scene:addEventListener("destroyScene", scene)
- return scene
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement