diff options
Diffstat (limited to 'game/polyomino.lua')
-rw-r--r-- | game/polyomino.lua | 20 |
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 |