From cc83d13b38dc5384fe36ceb926dce3eef1b7f3f0 Mon Sep 17 00:00:00 2001 From: "theo@manjaro" Date: Fri, 4 Mar 2022 14:03:06 +0100 Subject: [PATCH] Added game's ending check --- assets/text/turn/blue.png | Bin 0 -> 7718 bytes assets/text/turn/pink.png | Bin 0 -> 7964 bytes game.lua | 1 + main.lua | 9 +++---- objects/circle.lua | 20 ++++++++++++--- objects/grid.lua | 52 +++++++++++++++++++++++++++++++++++++- scenes.lua | 12 +++++++++ ù | 29 --------------------- 8 files changed, 83 insertions(+), 40 deletions(-) create mode 100644 assets/text/turn/blue.png create mode 100644 assets/text/turn/pink.png create mode 100644 scenes.lua delete mode 100644 ù diff --git a/assets/text/turn/blue.png b/assets/text/turn/blue.png new file mode 100644 index 0000000000000000000000000000000000000000..7bdd6362e795dd783159247137f74facf592c260 GIT binary patch literal 7718 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 QM;01jYGh@2Ti-M0Ki*^`d;kCd literal 0 HcmV?d00001 diff --git a/game.lua b/game.lua index 62e3df1..94edad8 100644 --- a/game.lua +++ b/game.lua @@ -5,6 +5,7 @@ local insert = table.insert function Game:reinit() self.gameloop = {} self.objects = {} + self.scenes = require "scenes" self.objects.base = require "objects/base" self.objects.grid = require "objects/grid" self.objects.circle = require "objects/circle" diff --git a/main.lua b/main.lua index 5864f25..86578d1 100644 --- a/main.lua +++ b/main.lua @@ -10,7 +10,7 @@ if game.OS == "Android" or game.OS == "iOS" then game.OSTYPE = "Mobile" end lg = love.graphics -if game.OSTYPE=="PC" then push = require "lib/push" end +if game.OS~="Horizon" then push = require "lib/push" end function love.load() lg.setBackgroundColor(31/255,14/255,28/255) @@ -29,11 +29,8 @@ function love.load() push:setupScreen(game.WIDTH, game.HEIGHT, w, h, {fullscreen = true,resizable = res, pixelperfect = true}) push:setBorderColor(0.161,0.157, 0.192,1) end - local cellsize = 44 - local x = (game.WIDTH-cellsize*5)/2 - local y = (game.HEIGHT-cellsize*5)/2 - local grid = game.objects.grid:new(game,x,y,cellsize) - game:summon(grid) + + game.scenes:main(game) end function love.draw(screen) diff --git a/objects/circle.lua b/objects/circle.lua index 5e01c92..4112b8f 100644 --- a/objects/circle.lua +++ b/objects/circle.lua @@ -12,7 +12,18 @@ function gen:new(game,x,y,color,grid) Circle:register(color) Circle.selected = false - function Circle:step(dt) end + function Circle:step(dt) + if self.color=="neutron" and self:isMyTurn()then + if not self.selected then + self.moves = self:findAvailableMoves() + self.selected = true + end + end + end + + function Circle:isMyTurn() + return self.color=="pink" and self.grid.turn==1 or self.color=="blue" and self.grid.turn==3 or self.color=="neutron" and self.grid.turn%2==0 + end function Circle:draw() local spriteindex = 1 @@ -27,7 +38,7 @@ function gen:new(game,x,y,color,grid) end function Circle:MouseCallback(x,y,presses) - if self.rect:collidepoint(x,y) then + if self.rect:collidepoint(x,y) and self:isMyTurn() then local c = self.game:findName("Circle") local i for i=1,#c do @@ -47,6 +58,7 @@ function gen:new(game,x,y,color,grid) if rect:collidepoint(x,y) then self.rect:move_ip(self.moves[i][1],self.moves[i][2]) self.selected = false + self.grid:addturn() break end end @@ -77,8 +89,8 @@ function gen:new(game,x,y,color,grid) for movx=-1,1 do for movy=-1,1 do if not (movx==0 and movy==0) then - offx = movx*self.cellsize - offy = movy*self.cellsize + offx = 0 + offy = 0 while ValidMove(offx+movx*self.cellsize,offy+movy*self.cellsize) do offx = offx + movx*self.cellsize offy = offy + movy*self.cellsize diff --git a/objects/grid.lua b/objects/grid.lua index 5c4afc8..71dfca3 100644 --- a/objects/grid.lua +++ b/objects/grid.lua @@ -5,8 +5,11 @@ function gridgen:new(game,x,y,cellsize) local Grid = game.objects.base:new(game,x,y,cellsize*5,cellsize*5) Grid.cellsize = cellsize Grid.sprites = {game:newImage("grid/tile.png"),game:newImage("grid/pink.png"),game:newImage("grid/blue.png")} + Grid.pinkturn = game:newImage("text/turn/pink.png") + Grid.blueturn = game:newImage("text/turn/blue.png") Grid:register("Grid") Grid.depth = -1 + Grid.turn= 2 -- Spawn circles local i @@ -20,8 +23,47 @@ function gridgen:new(game,x,y,cellsize) local neutron = game.objects.circle:new(game,x+2*cellsize,y+2*cellsize,"neutron",Grid) game:summon(neutron) - function Grid:step(dt) end + function Grid:step(dt) + -- Check if the neutron is on one side or the other + local obj = self.game:findName("neutron") + local i + local winner = "None" + for i=1,#obj do + if obj[i].rect.y==self.rect.y then winner = "pink" end + if obj[i].rect.y+obj[i].rect.h==self.rect.y+self.rect.h then winner = "blue" end + end + if winner~="None" then + self:endgame(winner) + end + end + function Grid:addturn() + self.turn = self.turn + 1 + self.turn = self.turn%4 + -- Check if a move can be made + local color = "blue" + if self.turn%2==1 then + if self.turn==1 then color = "pink" end + else + color = "neutron" + end + local count = 0 + local i + local obj = self.game:findName(color) + for i=1,#obj do + count = count + #obj[i]:findAvailableMoves() + end + if count==0 then + local win = "blue" + if self.turn < 2 then win = "pink" end + self:endgame(win) + end + end + + function Grid:endgame(winner) + print(winner.." won !") + self.game.scenes:main(self.game) + end function Grid:draw() local y @@ -34,6 +76,14 @@ function gridgen:new(game,x,y,cellsize) lg.draw(self.sprites[spriteindex],self.rect[1]-self.game.camerax-self.spriteoffx+(x-1)*self.cellsize,self.rect[2]-self.game.cameray-self.spriteoffy+(y-1)*self.cellsize) end end + + if self.turn<2 then + -- Draw "pink's turn" + lg.draw(self.pinkturn,(self.game.WIDTH-self.pinkturn:getWidth())/2,0) + else + -- Draw "Blue's turn" + lg.draw(self.blueturn,(self.game.WIDTH-self.blueturn:getWidth())/2,self.game.HEIGHT-self.blueturn:getHeight()) + end end return Grid diff --git a/scenes.lua b/scenes.lua new file mode 100644 index 0000000..eaaa169 --- /dev/null +++ b/scenes.lua @@ -0,0 +1,12 @@ +local scenes = {} + +function scenes:main(game) + game.gameloop = {} + local cellsize = 44 + local x = (game.WIDTH-cellsize*5)/2 + local y = (game.HEIGHT-cellsize*5)/2 + local grid = game.objects.grid:new(game,x,y,cellsize) + game:summon(grid) +end + +return scenes diff --git a/ù b/ù deleted file mode 100644 index 5db633c..0000000 --- a/ù +++ /dev/null @@ -1,29 +0,0 @@ -local gen= {} - -function gen:new(game,x,y,color,grid) - - local Circle = game.objects.base:new(game,x,y,grid.cellsize,grid.cellsize) - Circle.cellsize = grid.cellsize - Circle.grid = grid - Circle.shadowsprite = game:newImage("circles/shadow.png") - Circle.sprites = {game:newImage("circles/regular/"..color..".png"),game:newImage("circles/selected/"..color..".png")} - Circle:register("Circle") - Circle:register(color) - Circle.selected = false - - function Circle:step(dt) end - - function Circle:draw() - local spriteindex = 1 - if self.selected then spriteindex = 2 end - lg.draw(self.sprites[spriteindex],self.rect[1]-self.game.camerax-self.spriteoffx,self.rect[2]-self.game.cameray-self.spriteoffy) - end - - function Circle:MouseCallback(x,y,presses) - - end - - return Circle -end - -return gen