Batman
This commit is contained in:
133
lua/Flappy.lua
Normal file
133
lua/Flappy.lua
Normal file
@@ -0,0 +1,133 @@
|
||||
-- Flappy Bird Clone using GameEngine
|
||||
|
||||
local vector2 = require("vector2")
|
||||
local utils = require("utils")
|
||||
|
||||
-- Game Variables
|
||||
local bird = {
|
||||
position = vector2.new(100, 200),
|
||||
width = 30,
|
||||
height = 30,
|
||||
velocity = 0,
|
||||
jumpStrength = -8
|
||||
}
|
||||
|
||||
local gravity = 0.5
|
||||
local pipes = {}
|
||||
local pipeWidth = 60
|
||||
local pipeGap = 120
|
||||
local pipeSpeed = 2
|
||||
local score = 0
|
||||
local gameRunning = true
|
||||
local gameStarted = false
|
||||
local screenWidth = GameEngine:getWidth()
|
||||
local screenHeight = GameEngine:getHeight()
|
||||
|
||||
-- Function to spawn new pipes
|
||||
local function spawnPipe()
|
||||
--GameEngine:messageBox(tostring(screenHeight - pipeGap - 50))
|
||||
local pipeHeight = math.random(50, screenHeight - pipeGap - 50)
|
||||
--local pipeHeight =50
|
||||
table.insert(pipes, { x = screenWidth, y = pipeHeight })
|
||||
end
|
||||
|
||||
function setup_window()
|
||||
GameEngine:setTitle("BreakOut")
|
||||
GameEngine:setWidth(800)
|
||||
GameEngine:setHeight(600)
|
||||
GameEngine:setFrameRate(60)
|
||||
end
|
||||
|
||||
--- the set_keylist function
|
||||
--- @return string
|
||||
function set_keylist()
|
||||
return "R "
|
||||
end
|
||||
|
||||
--- the start function
|
||||
--- @return nil
|
||||
function start()
|
||||
screenWidth = GameEngine:getWidth()
|
||||
screenHeight = GameEngine:getHeight()
|
||||
|
||||
-- print(GameEngine:getRequest("https://dummyjson.com/c/3029-d29f-4014-9fb4"))
|
||||
end
|
||||
|
||||
-- Update game state
|
||||
function update()
|
||||
if not gameRunning then return end
|
||||
|
||||
-- Apply gravity
|
||||
bird.velocity = bird.velocity + gravity
|
||||
bird.position.y = bird.position.y + bird.velocity
|
||||
|
||||
-- Jumping mechanic
|
||||
if GameEngine:isKeyDown(" ") then
|
||||
bird.velocity = bird.jumpStrength
|
||||
end
|
||||
|
||||
-- Move pipes
|
||||
for i = #pipes, 1, -1 do
|
||||
pipes[i].x = pipes[i].x - pipeSpeed
|
||||
|
||||
-- Remove off-screen pipes
|
||||
if pipes[i].x + pipeWidth < 0 then
|
||||
table.remove(pipes, i)
|
||||
score = score + 1
|
||||
end
|
||||
end
|
||||
|
||||
-- Collision detection
|
||||
for _, pipe in ipairs(pipes) do
|
||||
if bird.position.x < pipe.x + pipeWidth and bird.position.x + bird.width > pipe.x then
|
||||
if bird.position.y < pipe.y or bird.position.y + bird.height > pipe.y + pipeGap then
|
||||
gameRunning = false
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Check if bird hits ground or ceiling
|
||||
if bird.position.y + bird.height >= screenHeight or bird.position.y <= 0 then
|
||||
gameRunning = false
|
||||
end
|
||||
|
||||
-- Spawn pipes periodically
|
||||
if #pipes == 0 or pipes[#pipes].x < screenWidth - 200 then
|
||||
spawnPipe()
|
||||
end
|
||||
end
|
||||
|
||||
-- Draw game elements
|
||||
function draw()
|
||||
-- Clear screen
|
||||
GameEngine:fillScreen(Color.new(135, 206, 250)) -- Sky Blue background
|
||||
|
||||
-- Draw bird
|
||||
GameEngine:setColor(Color.new(255, 255, 0)) -- Yellow
|
||||
GameEngine:fillOval(bird.position.x, bird.position.y, bird.width, bird.height)
|
||||
|
||||
-- Draw pipes
|
||||
GameEngine:setColor(Color.new(0, 255, 0)) -- Green
|
||||
for _, pipe in ipairs(pipes) do
|
||||
GameEngine:fillRect(pipe.x, 0, pipeWidth, pipe.y)
|
||||
GameEngine:fillRect(pipe.x, pipe.y + pipeGap, pipeWidth, screenHeight - pipe.y - pipeGap)
|
||||
end
|
||||
|
||||
-- Draw score
|
||||
GameEngine:setColor(Color.new(255, 255, 255)) -- White
|
||||
GameEngine:drawText(tostring(score), 10, 10)
|
||||
|
||||
-- Game over message
|
||||
if not gameRunning then
|
||||
GameEngine:drawText("Game Over! Press R to restart", screenWidth / 2 - 80, screenHeight / 2)
|
||||
end
|
||||
end
|
||||
|
||||
-- Restart function
|
||||
function restart()
|
||||
bird.position.y = 200
|
||||
bird.velocity = 0
|
||||
pipes = {}
|
||||
score = 0
|
||||
gameRunning = true
|
||||
end
|
||||
Reference in New Issue
Block a user