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
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