summaryrefslogtreecommitdiff
path: root/game/polyomino.lua
diff options
context:
space:
mode:
Diffstat (limited to 'game/polyomino.lua')
-rw-r--r--game/polyomino.lua20
1 files changed, 15 insertions, 5 deletions
diff --git a/game/polyomino.lua b/game/polyomino.lua
index eb726b3..ba6da92 100644
--- a/game/polyomino.lua
+++ b/game/polyomino.lua
@@ -70,7 +70,7 @@ function M:drop(field)
local new = setmetatable({poly = self}, piece)
new.field = field
new.line = field.lines - (self.bottom - 1)
- new.column = math.floor(field.columns / 2 - self.size / 2 + 0.5)
+ new.column = math.floor(field.columns / 2 - self.size / 2 + 1)
new.rotation = 1
if not new:can_occupy() then
return
@@ -96,6 +96,17 @@ function piece:can_occupy(line, column, rotation)
return true
end
+function piece:can_move(lines, columns, rotation)
+ local rotation = self.rotation + (rotation or 0)
+ if rotation > 4 then
+ rotation = 1
+ elseif rotation < 1 then
+ rotation = 4
+ end
+ local line, column = self.line + lines or 0, self.column + columns or 0
+ return self:can_occupy(line, column, rotation)
+end
+
function piece:place()
if self.placed then
return
@@ -126,10 +137,9 @@ function piece:rotate(ccw)
end
function piece:move(lines, columns)
- local line, column = self.line + lines, self.column + columns
- if self:can_occupy(line, column) then
- self.line = line
- self.column = column
+ if self:can_move(lines, columns) then
+ self.line = self.line + lines or 0
+ self.column = self.column + columns or 0
return true
end
return false