Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- Cette ligne permet d'afficher des traces dans la console pendant l'éxécution
- io.stdout:setvbuf('no')
- -- Cette ligne permet de filtrer les contours des images quand elles sont redimentionnées
- love.graphics.setDefaultFilter("nearest")
- -- Cette ligne permet de déboguer pas a pas dans ZeroBraneStudio
- if arg[#arg] == "-debug" then require("mobdebug").start() end
- local musicFont = love.audio.newSource("musiques/Alexander Ehlers - Flags.mp3", "stream")
- player = {}
- player.engineOn = false
- player.engineBoost = false
- sprites = {}
- asteroids = {}
- timer = 0
- ------------------------------------------------------------------------------
- -----------------CREATION SPRITE---CREATION SPRITE---CREATION SPRITE----------
- ------------------------------------------------------------------------------
- function CreateSprite(pNomImage, pX, pY)
- -- Fonction pour générer tous les sprites avec quelques paramètres
- sprite = {}
- sprite.x = pX
- sprite.y = pY
- sprite.vx = 0
- sprite.vy = 0
- sprite.speed = 0.001
- sprite.speedBoost = 0.005
- sprite.image = love.graphics.newImage("images/"..pNomImage..".png")
- sprite.w = sprite.image:getWidth()
- sprite.h = sprite.image:getHeight()
- sprite.angle = 270
- table.insert(sprites, sprite)
- return sprite
- end
- ---------------------------------------------------------------------------------
- ----------------------CREATION ASTEROID---CREATION ASTEROID---CREATION ASTEROID--
- ---------------------------------------------------------------------------------
- function CreateSpriteAsteroid(pNomImage, aX, aY, aA, aVx, aVy)
- asteroid = {}
- asteroid.image = love.graphics.newImage("images/"..pNomImage..".png")
- asteroid.x = aX or love.math.random(10, love.graphics.getWidth() - 100)
- asteroid.y = aY or love.math.random(10, love.graphics.getHeight() - 100)
- asteroid.angle = aA or math.rad(love.math.random(1, 360))
- asteroid.speed = love.math.random(5,50) / 100
- asteroid.vx = aVx or math.cos(asteroid.angle) * asteroid.speed
- asteroid.vy = aVy or math.sin(asteroid.angle) * asteroid.speed
- table.insert(asteroids, asteroid)
- return asteroid
- end
- -----------------------------------------------------------------------------
- --------------------LOAD---LOAD---LOAD---------------------------------------
- -----------------------------------------------------------------------------
- function love.load()
- mainFont = love.graphics.newImage("images/Space.png")
- --love.audio.play(musicFont)
- love.window.setMode(1280, 720)
- screenWidth = love.graphics.getWidth()
- screenHeight = love.graphics.getHeight()
- player = CreateSprite("Ship", (screenWidth/2), (screenHeight/2))
- player.engine = love.graphics.newImage("images/Engine.png")
- local meteor
- for meteor=1, love.math.random(2, 10) do
- CreateSpriteAsteroid("Meteor1", aX, aY, aA, aVx, aVy)
- end
- end
- -----------------------------------------------------------------------------
- -------------------COLLISION---COLLISION---COLLISION-------------------------
- -----------------------------------------------------------------------------
- function SpriteCollision()
- end
- -----------------------------------------------------------------------------
- -------------------UPDATE---UPDATE---UPDATE----------------------------------
- -----------------------------------------------------------------------------
- function love.update(dt)
- if love.keyboard.isDown("a") then
- player.angle = player.angle - 0.3
- end
- if love.keyboard.isDown("d") then
- player.angle = player.angle + 0.3
- end
- if love.keyboard.isDown("w") then
- player.engineOn = true
- local angle = math.rad(player.angle)
- local force_x = math.cos(angle) * player.speed
- local force_y = math.sin(angle) * player.speed
- player.vx = player.vx + force_x
- player.vy = player.vy + force_y
- else
- player.engineOn = false
- end
- player.x = player.x + player.vx
- player.y = player.y + player.vy
- if love.keyboard.isDown("lshift") then
- player.engineBoost = true
- player.speed = player.speedBoost
- end
- player.speed = math.max(0.001, player.speed - dt)
- if player.x >= screenWidth - (player.w/2) then -- Collision avec le mur de droite
- player.x = screenWidth - (player.w/2)
- end
- if player.y < 0 + (player.h/2) then -- Collision avec le mur du haut
- player.y = 0 + (player.h/2)
- end
- if player.x < 0 + (player.w/2) then -- Collision avec le mur de gauche
- player.x = 0 + (player.w/2)
- end
- if player.y >= screenHeight - (player.h/2) then -- Collision avec le mur du bas
- player.y = screenHeight - (player.h/2)
- end
- if asteroid.x > screenWidth and asteroid.y > screenWidth then
- asteroid.x = 0
- end
- if asteroid.x < 0 then
- asteroid.x = screenWidth
- end
- if asteroid.y > screenHeight then
- asteroid.y = 0
- end
- if asteroid.y < 0 then
- asteroid.y = screenHeight
- end
- asteroid.x = asteroid.x + asteroid.vx
- asteroid.y = asteroid.y + asteroid.vy
- end
- -----------------------------------------------------------------------------
- ------------------DRAW---DRAW---DRAW-----------------------------------------
- -----------------------------------------------------------------------------
- function love.draw()
- love.graphics.draw(mainFont, 0, 0, 0, 1, 1)
- local n
- for n=1, #sprites do
- local s = sprites[n]
- love.graphics.draw(s.image, s.x, s.y, math.rad(s.angle), 1, 1, (s.w/2), (s.h/2))
- end
- for i, asteroid in ipairs(asteroids) do
- love.graphics.draw(asteroid.image, asteroid.x, asteroid.y, math.rad(asteroid.angle), 1.5, 1.5)
- end
- if player.engineOn == true then
- love.graphics.draw(player.engine, player.x, player.y, math.rad(player.angle), 1, 1, player.engine:getWidth()/2, player.engine:getHeight()/2)
- end
- love.graphics.print("Vitesse : "..tostring(player.speed), 100, 100)
- love.graphics.print("vx : "..tostring(asteroid.vx), 100, 120)
- love.graphics.print("CreateSpriteAsteroid : "..tostring(#asteroids), 100, 140)
- love.graphics.print("Asteroid.x : "..tostring(asteroid.x), 100, 160)
- love.graphics.print("Asteroid.y : "..tostring(asteroid.y), 100, 180)
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement