def lockUnit(self): for x, y in self.state.cur_unit.members: self.cells[y][x] = 1 # collapse here new_cells = [row for row in self.cells if not cmn.allF(row, lambda x: x == 1)] size = len(self.state.cur_unit.members) ls = self.h - len(new_cells) if ls > 0: new_cells = [[0] * self.w for _ in range(ls)] + new_cells self.cells = new_cells ls_old = self.state.ls_old ''' move_score = points + line_bonus where points = size + 100 * (1 + ls) * ls / 2 line_bonus = if ls_old > 1 then floor ((ls_old - 1) * points / 10) else 0 ''' points = size + 100 * (1 + ls) * ls // 2 if ls_old > 1: points += (ls_old - 1) * points // 10 self.state.cur_unit = None self.state.ls_old = ls self.state.score += points
def lockUnit(self): for x, y in self.state.cur_unit.members: self.cells[y][x] = 1 # collapse here new_cells = [ row for row in self.cells if not cmn.allF(row, lambda x: x == 1) ] size = len(self.state.cur_unit.members) ls = self.h - len(new_cells) if ls > 0: new_cells = [[0] * self.w for _ in range(ls)] + new_cells self.cells = new_cells ls_old = self.state.ls_old ''' move_score = points + line_bonus where points = size + 100 * (1 + ls) * ls / 2 line_bonus = if ls_old > 1 then floor ((ls_old - 1) * points / 10) else 0 ''' points = size + 100 * (1 + ls) * ls // 2 if ls_old > 1: points += (ls_old - 1) * points // 10 self.state.cur_unit = None self.state.ls_old = ls self.state.score += points
def canMove(self, move): pivot = self.state.cur_unit.pivot def f(p): if move <= 3: res = self.move_pnt(p, move, 1) else: p_end = pivot p1 = self.move_pnt(pivot, 5, pivot[1] - p[1]) p_end = self.move_pnt(p_end, 4 if move == 4 else 0, pivot[1] - p[1]) p_end = self.move_pnt(p_end, 5 if move == 4 else 1, p1[0] - p[0]) res = p_end x, y = res if not (0 <= x < self.w) or not (0 <= y < self.h): return False if self.cells[y][x]: return False return True return cmn.allF(self.state.cur_unit.members, f)