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
Exemplo n.º 2
0
    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)
Exemplo n.º 4
0
    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)