Making a Simple Game Using Love2D and Lua

4 min read

Ever wanted to create your own game but felt overwhelmed by complex game engines? Let me show you how I built a fun bird-shooting game using Love2D - a lightweight, beginner-friendly framework that makes game development a blast! 🎮

What We're Building

We'll create a game where colorful birds fly across a beautiful sky, and you'll try to shoot them down with your trusty crosshair. You'll have to be quick though - there's a timer ticking down! The game features:

  • Smooth bird animations and movement
  • Background music that sets the mood
  • A scoring system to track your progress
  • A challenging time limit to test your skills

Setting Up Your Development Environment

First things first, you'll need:

  1. The Love2D framework - grab it from love2d.org
  2. A code editor (I recommend VSCode with the Love2D extensions)
  3. Basic Lua knowledge (don't worry, we'll keep it simple!)

Project Structure

Here's how we'll organize our game files:

plaintext
bird-shooter/ ├── sprites/ │ ├── birds/ # Our colorful bird sprites │ │ ├── bird1.png │ │ ├── bird2.png │ │ └── ... │ ├── crosshair.png # Player's aim cursor │ ├── sky.png # Beautiful background │ └── fonts/ │ └── game.ttf # Custom game font ├── music/ │ └── background.mp3 # Relaxing background tune └── main.lua # Where the magic happens!

The Core Game Logic

Let's start with the heart of our game. Here's how we load everything up:

lua
function love.load() -- Initialize our game world gameState = { score = 0, timeLeft = 30, -- 30 seconds to play isPlaying = false } -- Load our beautiful assets assets = { birds = loadBirdSprites(), background = love.graphics.newImage('sprites/sky.png'), crosshair = love.graphics.newImage('sprites/crosshair.png'), music = love.audio.newSource('music/background.mp3', 'stream') } -- Hide the default cursor love.mouse.setVisible(false) -- Hide the default cursor love.mouse.setVisible(false) -- Start the music assets.music:setLooping(true) assets.music:play() end

The birds are the stars of our show. Here's how we bring them to life:

lua
function createBird() return { x = -50, -- Start off-screen y = math.random(50, love.graphics.getHeight() - 50), speed = math.random(100, 200), sprite = assets.birds[math.random(#assets.birds)], isHit = false } end function updateBirds(dt) for i, bird in ipairs(birds) do if not bird.isHit then -- Make birds fly across the screen bird.x = bird.x + bird.speed * dt -- Add some gentle up/down movement bird.y = bird.y + math.sin(love.timer.getTime() * 2) * 0.5 else -- When hit, birds fall dramatically bird.y = bird.y + 300 * dt end end end

Making It Fun

The real magic happens in the interaction between player and game. Here's how we handle shooting:

lua
function love.mousepressed(x, y, button) if button == 1 then -- Left click for _, bird in ipairs(birds) do if checkHit(x, y, bird) and not bird.isHit then bird.isHit = true gameState.score = gameState.score + 1 playHitSound() spawnFeathers(bird.x, bird.y) -- Visual feedback! break end end end end

Adding Polish

What makes our game special is the attention to detail. Let's add some juice:

lua
function spawnFeathers(x, y) -- Create a burst of feathers when a bird is hit for i = 1, 8 do local feather = { x = x, y = y, rotation = math.random() * math.pi * 2, speed = math.random(50, 100), lifetime = 2 } table.insert(feathers, feather) end end

The Final Touch

The game loop brings everything together:

lua
function love.update(dt) if gameState.isPlaying then updateBirds(dt) updateFeathers(dt) updateTimer(dt) -- Spawn new birds occasionally if math.random() < 0.02 then spawnBird() end end end

Try It Yourself!

  • Add different bird types with varying points
  • Implement power-ups (slow motion, rapid fire)
  • Create challenging levels
  • Add sound effects and particle systems

Wrapping Up

Building games with Love2D is incredibly rewarding. This simple bird-shooting game demonstrates basic game development concepts like:

  • Asset management
  • Game states
  • Player input
  • Collision detection
  • Visual effects