Example #1
0
class Fragments(object):
    blank_id = 15
    clear_nums = [i for i in xrange(16)]

    def __init__(self):
        self.sheet = SpriteSheet('image.png')
        self.images = [self.sheet.img_at(((i % 4) * 120, (i / 4) * 80, 120, 80)) for i in xrange(16)]
        self.nums = [i for i in xrange(16)]
        self.blank = True

    def update(self, filtered_events, pressed_keys):
        for event in filtered_events:
            if event.type == MOUSEBUTTONDOWN and event.button == 1:
                click_x = (event.pos[0] - SCREEN_OFFSET) / 120
                click_y = (event.pos[1] - SCREEN_OFFSET) / 80
                for dx, dy in [(-1, 0), (1, 0), (0, -1), (0, 1)]:
                    x = click_x + dx
                    y = click_y + dy
                    if 0 <= x <= 3 and 0 <= y <= 3:
                        if self.nums[x + (y * 4)] == self.blank_id:
                            self.swap(click_x + (click_y * 4), x + (y * 4))
                            return True
        return False

    def draw(self, screen):
        for i in xrange(16):
            index = self.nums[i]
            if self.blank and (index == self.blank_id):
                pygame.draw.rect(screen, (0, 0, 0), ((i % 4) * 120 + SCREEN_OFFSET, (i / 4) * 80 + SCREEN_OFFSET, 120, 80))
            else:
                screen.blit(self.images[index], ((i % 4) * 120 + SCREEN_OFFSET, (i / 4) * 80 + SCREEN_OFFSET))

    def shuffle(self):
        self.nums = [i for i in xrange(16)]
        for i in xrange(16):
            self.swap(i, random.randint(0,15))

    def swap(self, i, j):
        self.nums[i], self.nums[j] = self.nums[j], self.nums[i]

    def gameclear(self):
        if self.clear_nums == self.nums:
            return True
        return False

    def set_blank(self, blank):
        self.blank = blank
Example #2
0
 def __init__(self):
     self.sheet = SpriteSheet('image.png')
     self.images = [self.sheet.img_at(((i % 4) * 120, (i / 4) * 80, 120, 80)) for i in xrange(16)]
     self.nums = [i for i in xrange(16)]
     self.blank = True