From e9be58a1ec4ea47e7dd4bcc56e7d1fe8bcbfa841 Mon Sep 17 00:00:00 2001 From: Yatindra29 Date: Mon, 4 Oct 2021 02:01:11 +0530 Subject: [PATCH] Added a new section of projects related to Game Development along with a basic Pong Game written in Lua --- Game Dev Projects/Pong-Final/Ball.lua | 36 +++ Game Dev Projects/Pong-Final/Paddle.lua | 20 ++ Game Dev Projects/Pong-Final/Pong-The-Game | 1 + Game Dev Projects/Pong-Final/class.lua | 98 ++++++++ Game Dev Projects/Pong-Final/font.ttf | Bin 0 -> 19492 bytes Game Dev Projects/Pong-Final/main.lua | 193 +++++++++++++++ Game Dev Projects/Pong-Final/push.lua | 232 ++++++++++++++++++ .../Pong-Final/sounds/paddle_hit.wav | Bin 0 -> 5528 bytes Game Dev Projects/Pong-Final/sounds/score.wav | Bin 0 -> 57660 bytes .../Pong-Final/sounds/wall_hit.wav | Bin 0 -> 8820 bytes 10 files changed, 580 insertions(+) create mode 100644 Game Dev Projects/Pong-Final/Ball.lua create mode 100644 Game Dev Projects/Pong-Final/Paddle.lua create mode 160000 Game Dev Projects/Pong-Final/Pong-The-Game create mode 100644 Game Dev Projects/Pong-Final/class.lua create mode 100644 Game Dev Projects/Pong-Final/font.ttf create mode 100644 Game Dev Projects/Pong-Final/main.lua create mode 100644 Game Dev Projects/Pong-Final/push.lua create mode 100644 Game Dev Projects/Pong-Final/sounds/paddle_hit.wav create mode 100644 Game Dev Projects/Pong-Final/sounds/score.wav create mode 100644 Game Dev Projects/Pong-Final/sounds/wall_hit.wav diff --git a/Game Dev Projects/Pong-Final/Ball.lua b/Game Dev Projects/Pong-Final/Ball.lua new file mode 100644 index 000000000..355635db3 --- /dev/null +++ b/Game Dev Projects/Pong-Final/Ball.lua @@ -0,0 +1,36 @@ +Ball=Class{} + +function Ball:init(x,y,width,height) + self.x=x + self.y=y + self.width=width + self.height=height + self.dx=math.random(2)==1 and 100 or -100 + self.dy=math.random(-50,50) +end + +function Ball:collides(paddle) + if self.x > paddle.x+paddle.width or paddle.x > ball.x+ball.width then + return false + end + if self.y> paddle.y+paddle.height or paddle.y > self.y+self.height then + return false + end + return true +end + +function Ball:reset() + self.x=VIRTUAL_WIDTH/2-2 + self.y=VIRTUAL_HEIGHT/2-2 + self.dx = math.random(2) == 1 and -100 or 100 + self.dy = math.random(-50, 50) +end + +function Ball:update(dt) + self.x=self.x+self.dx*dt + self.y=self.y+self.dy*dt +end + +function Ball:render() + love.graphics.rectangle('fill',self.x,self.y,self.width,self.height) +end \ No newline at end of file diff --git a/Game Dev Projects/Pong-Final/Paddle.lua b/Game Dev Projects/Pong-Final/Paddle.lua new file mode 100644 index 000000000..8262f4b6e --- /dev/null +++ b/Game Dev Projects/Pong-Final/Paddle.lua @@ -0,0 +1,20 @@ +Paddle=Class{} + +function Paddle:init(x,y,width,height) + self.x=x + self.y=y + self.width=width + self.height=height + self.dy=0 +end + +function Paddle:update(dt) + if self.dy<0 then + self.y=math.max(0,self.y+self.dy*dt) + else + self.y = math.min(VIRTUAL_HEIGHT - self.height, self.y + self.dy * dt) + end +end +function Paddle:render() + love.graphics.rectangle('fill', self.x, self.y, self.width, self.height) +end diff --git a/Game Dev Projects/Pong-Final/Pong-The-Game b/Game Dev Projects/Pong-Final/Pong-The-Game new file mode 160000 index 000000000..4e6ba07c5 --- /dev/null +++ b/Game Dev Projects/Pong-Final/Pong-The-Game @@ -0,0 +1 @@ +Subproject commit 4e6ba07c5b062a1bad19f11c69cc5a0ae7ae9836 diff --git a/Game Dev Projects/Pong-Final/class.lua b/Game Dev Projects/Pong-Final/class.lua new file mode 100644 index 000000000..7d6270724 --- /dev/null +++ b/Game Dev Projects/Pong-Final/class.lua @@ -0,0 +1,98 @@ +--[[ +Copyright (c) 2010-2013 Matthias Richter + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +Except as contained in this notice, the name(s) of the above copyright holders +shall not be used in advertising or otherwise to promote the sale, use or +other dealings in this Software without prior written authorization. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +]]-- + +local function include_helper(to, from, seen) + if from == nil then + return to + elseif type(from) ~= 'table' then + return from + elseif seen[from] then + return seen[from] + end + + seen[from] = to + for k,v in pairs(from) do + k = include_helper({}, k, seen) -- keys might also be tables + if to[k] == nil then + to[k] = include_helper({}, v, seen) + end + end + return to +end + +-- deeply copies `other' into `class'. keys in `other' that are already +-- defined in `class' are omitted +local function include(class, other) + return include_helper(class, other, {}) +end + +-- returns a deep copy of `other' +local function clone(other) + return setmetatable(include({}, other), getmetatable(other)) +end + +local function new(class) + -- mixins + class = class or {} -- class can be nil + local inc = class.__includes or {} + if getmetatable(inc) then inc = {inc} end + + for _, other in ipairs(inc) do + if type(other) == "string" then + other = _G[other] + end + include(class, other) + end + + -- class implementation + class.__index = class + class.init = class.init or class[1] or function() end + class.include = class.include or include + class.clone = class.clone or clone + + -- constructor call + return setmetatable(class, {__call = function(c, ...) + local o = setmetatable({}, c) + o:init(...) + return o + end}) +end + +-- interface for cross class-system compatibility (see https://github.com/bartbes/Class-Commons). +if class_commons ~= false and not common then + common = {} + function common.class(name, prototype, parent) + return new{__includes = {prototype, parent}} + end + function common.instance(class, ...) + return class(...) + end +end + + +-- the module +return setmetatable({new = new, include = include, clone = clone}, + {__call = function(_,...) return new(...) end}) diff --git a/Game Dev Projects/Pong-Final/font.ttf b/Game Dev Projects/Pong-Final/font.ttf new file mode 100644 index 0000000000000000000000000000000000000000..fe4328b6accff5ea1c2554ef0148814ff3203ca4 GIT binary patch literal 19492 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 then + ball.y=VIRTUAL_HEIGHT-4 + ball.dy=-ball.dy + sounds['wall_hit']:play() + end + if ball.x<0 then + servingPlayer = 1 + player2Score= player2Score + 1 + sounds['score']:play() + if player2Score==10 then + winningPlayer=2 + gameState='done' + else + gameState='serve' + ball:reset() + end + end + if ball.x > VIRTUAL_WIDTH then + servingPlayer = 2 + player1Score = player1Score + 1 + sounds['score']:play() + if player1Score==10 then + winningPlayer=1 + gameState='done' + else + gameState='serve' + ball:reset() + end + end + end + if love.keyboard.isDown('w') then + player1.dy=-PADDLE_SPEED + elseif love.keyboard.isDown('s') then + player1.dy=PADDLE_SPEED + else + player1.dy=0 + end + --player 2 movement + if love.keyboard.isDown('up') then + player2.dy=-PADDLE_SPEED + elseif love.keyboard.isDown('down') then + player2.dy=PADDLE_SPEED + else + player2.dy=0 + end + if gameState=='play' then + ball:update(dt) + end + player1:update(dt) + player2:update(dt) +end + +function love.keypressed(key) + if key=='escape' then + love.event.quit() + elseif key=='enter' or key=='return' then + if gameState=='start' then + gameState='serve' + elseif gameState=='serve' then + gameState='play' + elseif gameState=='done' then + gameState='serve' + ball:reset() + player1Score=0 + player2Score=0 + if winningPlayer==1 then + servingPlayer=2 + else + servingPlayer=1 + end + end + end +end + +function love.draw() + push:apply('start') + love.graphics.clear(40/255,45/255,52/255,255/255) + --message + love.graphics.setFont(smallFont) + displayScore() + if gameState=='start' then + love.graphics.setFont(smallFont) + love.graphics.printf('Welcome to Pong!', 0, 10, VIRTUAL_WIDTH, 'center') + love.graphics.printf('Press Enter to begin!', 0, 20, VIRTUAL_WIDTH, 'center') + elseif gameState=='serve' then + love.graphics.setFont(smallFont) + love.graphics.printf('Player ' .. tostring(servingPlayer) .. "'s serve!", 0, 10, VIRTUAL_WIDTH, 'center') + love.graphics.printf('Press Enter to serve!', 0, 20, VIRTUAL_WIDTH, 'center') + elseif gameState=='play' then + --no messages + elseif gameState=='done' then + love.graphics.setFont(largeFont) + love.graphics.printf('Player ' .. tostring(winningPlayer) .. ' wins!',0, 10, VIRTUAL_WIDTH, 'center') + love.graphics.setFont(smallFont) + love.graphics.printf('Press Enter to restart!', 0, 30, VIRTUAL_WIDTH, 'center') + end + --first paddle + player1:render() + --second paddle + player2:render() + --ball + ball:render() + displayFPS() + push:apply('end') +end + +function displayFPS() + love.graphics.setFont(smallFont) + love.graphics.setColor(0,1,0,1) + love.graphics.print('FPS: ' .. tostring(love.timer.getFPS()), 10, 10) +end + +function displayScore() + love.graphics.setFont(scoreFont) + love.graphics.print(tostring(player1Score),VIRTUAL_WIDTH/ 2 - 50,VIRTUAL_HEIGHT/3) + love.graphics.print(tostring(player2Score),VIRTUAL_WIDTH/ 2 + 30,VIRTUAL_HEIGHT/3) +end diff --git a/Game Dev Projects/Pong-Final/push.lua b/Game Dev Projects/Pong-Final/push.lua new file mode 100644 index 000000000..026fcb2e1 --- /dev/null +++ b/Game Dev Projects/Pong-Final/push.lua @@ -0,0 +1,232 @@ +-- push.lua v0.2 + +-- Copyright (c) 2017 Ulysse Ramage +-- Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: +-- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +local push = { + + defaults = { + fullscreen = false, + resizable = false, + pixelperfect = false, + highdpi = true, + canvas = true + } + +} +setmetatable(push, push) + +--TODO: rendering resolution? +--TODO: clean up code + +function push:applySettings(settings) + for k, v in pairs(settings) do + self["_" .. k] = v + end +end + +function push:resetSettings() return self:applySettings(self.defaults) end + +function push:setupScreen(WWIDTH, WHEIGHT, RWIDTH, RHEIGHT, settings) + + settings = settings or {} + + self._WWIDTH, self._WHEIGHT = WWIDTH, WHEIGHT + self._RWIDTH, self._RHEIGHT = RWIDTH, RHEIGHT + + self:applySettings(self.defaults) --set defaults first + self:applySettings(settings) --then fill with custom settings + + love.window.setMode( self._RWIDTH, self._RHEIGHT, { + fullscreen = self._fullscreen, + resizable = self._resizable, + highdpi = self._highdpi + } ) + + self:initValues() + + if self._canvas then + self:setupCanvas({ "default" }) --setup canvas + end + + self._borderColor = {0, 0, 0} + + self._drawFunctions = { + ["start"] = self.start, + ["end"] = self.finish + } + + return self +end + +function push:setupCanvas(canvases) + table.insert(canvases, { name = "_render" }) --final render + + self._canvas = true + self.canvases = {} + + for i = 1, #canvases do + self.canvases[i] = { + name = canvases[i].name, + shader = canvases[i].shader, + canvas = love.graphics.newCanvas(self._WWIDTH, self._WHEIGHT) + } + end + + return self +end + +function push:setCanvas(name) + if not self._canvas then return true end + return love.graphics.setCanvas( self:getCanvasTable(name).canvas ) +end +function push:getCanvasTable(name) + for i = 1, #self.canvases do + if self.canvases[i].name == name then + return self.canvases[i] + end + end +end +function push:setShader(name, shader) + if not shader then + self:getCanvasTable("_render").shader = name + else + self:getCanvasTable(name).shader = shader + end +end + +function push:initValues() + self._PSCALE = self._highdpi and love.window.getDPIScale() or 1 + + self._SCALE = { + x = self._RWIDTH/self._WWIDTH * self._PSCALE, + y = self._RHEIGHT/self._WHEIGHT * self._PSCALE + } + + if self._stretched then --if stretched, no need to apply offset + self._OFFSET = {x = 0, y = 0} + else + local scale = math.min(self._SCALE.x, self._SCALE.y) + if self._pixelperfect then scale = math.floor(scale) end + + self._OFFSET = {x = (self._SCALE.x - scale) * (self._WWIDTH/2), y = (self._SCALE.y - scale) * (self._WHEIGHT/2)} + self._SCALE.x, self._SCALE.y = scale, scale --apply same scale to X and Y + end + + self._GWIDTH = self._RWIDTH * self._PSCALE - self._OFFSET.x * 2 + self._GHEIGHT = self._RHEIGHT * self._PSCALE - self._OFFSET.y * 2 +end + +--[[ DEPRECATED ]]-- +function push:apply(operation, shader) + if operation == "start" then + self:start() + elseif operation == "finish" or operation == "end" then + self:finish(shader) + end +end + +function push:start() + if self._canvas then + love.graphics.push() + love.graphics.setCanvas(self.canvases[1].canvas) + else + love.graphics.translate(self._OFFSET.x, self._OFFSET.y) + love.graphics.setScissor(self._OFFSET.x, self._OFFSET.y, self._WWIDTH*self._SCALE.x, self._WHEIGHT*self._SCALE.y) + love.graphics.push() + love.graphics.scale(self._SCALE.x, self._SCALE.y) + end +end + +function push:finish(shader) + love.graphics.setBackgroundColor(unpack(self._borderColor)) + if self._canvas then + local _render = self:getCanvasTable("_render") + + love.graphics.pop() + + love.graphics.setColor(255, 255, 255) + + --draw canvas + love.graphics.setCanvas(_render.canvas) + for i = 1, #self.canvases - 1 do --do not draw _render yet + local _table = self.canvases[i] + love.graphics.setShader(_table.shader) + love.graphics.draw(_table.canvas) + end + love.graphics.setCanvas() + + --draw render + love.graphics.translate(self._OFFSET.x, self._OFFSET.y) + love.graphics.setShader(shader or self:getCanvasTable("_render").shader) + love.graphics.draw(self:getCanvasTable("_render").canvas, 0, 0, 0, self._SCALE.x, self._SCALE.y) + + --clear canvas + for i = 1, #self.canvases do + love.graphics.setCanvas( self.canvases[i].canvas ) + love.graphics.clear() + end + + love.graphics.setCanvas() + love.graphics.setShader() + else + love.graphics.pop() + love.graphics.setScissor() + end +end + +function push:setBorderColor(color, g, b) + self._borderColor = g and {color, g, b} or color +end + +function push:toGame(x, y) + x, y = x - self._OFFSET.x, y - self._OFFSET.y + local normalX, normalY = x / self._GWIDTH, y / self._GHEIGHT + + x = (x >= 0 and x <= self._WWIDTH * self._SCALE.x) and normalX * self._WWIDTH or nil + y = (y >= 0 and y <= self._WHEIGHT * self._SCALE.y) and normalY * self._WHEIGHT or nil + + return x, y +end + +--doesn't work - TODO +function push:toReal(x, y) + return x+self._OFFSET.x, y+self._OFFSET.y +end + +function push:switchFullscreen(winw, winh) + self._fullscreen = not self._fullscreen + local windowWidth, windowHeight = love.window.getDesktopDimensions() + + if self._fullscreen then --save windowed dimensions for later + self._WINWIDTH, self._WINHEIGHT = self._RWIDTH, self._RHEIGHT + elseif not self._WINWIDTH or not self._WINHEIGHT then + self._WINWIDTH, self._WINHEIGHT = windowWidth * .5, windowHeight * .5 + end + + self._RWIDTH = self._fullscreen and windowWidth or winw or self._WINWIDTH + self._RHEIGHT = self._fullscreen and windowHeight or winh or self._WINHEIGHT + + self:initValues() + + love.window.setFullscreen(self._fullscreen, "desktop") + if not self._fullscreen and (winw or winh) then + love.window.setMode(self._RWIDTH, self._RHEIGHT) --set window dimensions + end +end + +function push:resize(w, h) + local pixelScale = love.window.getDPIScale() + if self._highdpi then w, h = w / pixelScale, h / pixelScale end + self._RWIDTH = w + self._RHEIGHT = h + self:initValues() +end + +function push:getWidth() return self._WWIDTH end +function push:getHeight() return self._WHEIGHT end +function push:getDimensions() return self._WWIDTH, self._WHEIGHT end + +return push diff --git a/Game Dev Projects/Pong-Final/sounds/paddle_hit.wav b/Game Dev Projects/Pong-Final/sounds/paddle_hit.wav new file mode 100644 index 0000000000000000000000000000000000000000..68483ba23c2f1b039367afac3c7c51b3d508e88c GIT binary patch literal 5528 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 CQHR3- literal 0 HcmV?d00001 diff --git a/Game Dev Projects/Pong-Final/sounds/score.wav b/Game Dev Projects/Pong-Final/sounds/score.wav new file mode 100644 index 0000000000000000000000000000000000000000..420d868369c3e27af6f2a190b9a01085334346f2 GIT binary patch literal 57660 zcmZ78WmKD4*9KtRHE58ydkF4SsJpw{+s<_A?bL1R?(Q>FccW0OXoNtNC=emR-Q_z8 zFtlH;wfd_I7K9wx``*v=ammS{~jxL>RLgZqHq;GW>_;I7~a9jVo+)oH+YAier;pC`a$;E~Tm zAMgIXrTa?vmmVlRSbC`RaA|GJBHN$QyT5e~i*Mm_dE6pyF}H*(@H#bN!OEYDeicD2zS!Q|WWhu4{SB5Vmlo88FW#lrl%T~x%$QH zGNLkKGU75`tB}1vORm09cCqXdaJlSC+10W@%lpWC$h*ip$lJ(U$eT#-UUDU+k_yl& z=>W9RrQO7JP;dVn+n?bOEzwQU4bk<{wb9klRnfPdrpczuX2@pBX31vD=E_c4ekY_6 zQVHJ(DTFVC&xGx$@Sw1uP=FN_62uI88xZ0f;>+}90CZrEv!F@{h^oYZr0Qjhhwab& zY+=8+EE$Gx)g7>2_)k0xo(2fuW$*@k46ZmmO-s|zDrjXiHBChe#kFJFFs+ytOf#kl(}2m3 z-!WqQh^-?wkN9K6?;|#hm>m0C%=(!B#jK549kVKCMa(_Vf1Lku{@d({^AqQ{R-gKR zR^V*!W$$GN*m~Ija{VIC63$Z2a?T3QD$Z)o=K_a3r#zQD*F5(;k32}8ce~dZⓈ} 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 LGMVi465u}o#qaMS literal 0 HcmV?d00001