class SlidingPuzzle: def __init__(self): self.game = Game() self.tm = TiledMap(self.game) self.gap = Vector(4, 4) self.tm.set_map(PUZZLEMAP) self.tm.draw() self.events = None self.game.frame.print_text("Build horizontal rows", (0, 220)) pygame.display.update() self.game.event_loop(figure_moves=self.move) def move(self, direction): start = self.gap - direction if self.tm.at(start) == '#': return move = MapMove(self.tm, start, direction, 2) self.game.wait_for_move(move, self.tm.draw, 0.01) self.gap = start self.check_complete() def get_same(self, row): counter = Counter(row) return counter.most_common(1)[0][1] def check_complete(self): s = self.tm.get_map() rows = s.split('\n') same = [self.get_same(row) for row in rows[1:5]] if sum(same) == 15: self.game.frame.print_text("Congratulations", (0, 220)) pygame.display.update() time.sleep(3) self.game.exit()
class Boxes: def __init__(self): self.screen = Screen(Vector(600, 400), 'data/background.png') self.frame = Frame(self.screen, Rect(64, 64, 320, 320)) tile_factory = TileFactory('data/tiles.conf') self.tm = TiledMap(self.frame, tile_factory) self.player = Sprite(self.frame, tile_factory.get('b.tail'), Vector(4, 1), speed=2) self.tm.set_map(BOXMAP) self.draw() self.events = None def draw(self): self.tm.draw() self.player.draw() pygame.display.update() def move(self, direction): nearpos = self.player.pos + direction farpos = nearpos + direction near = self.tm.at(nearpos) far = self.tm.at(farpos) if near == '#': return if near in 'xX' and far in '#xX': return else: # move possible moves = MoveGroup() self.player.add_move(direction) moves.add(self.player) if near in 'xX': # crate moved floor = near=='x' and '.' or '*' insert = far=='*' and 'X' or 'x' moves.add(MapMove(self.tm, nearpos, direction, 1, floor_tile=floor, insert_tile=insert)) wait_for_move(moves, self.screen, self.draw, 0.01) self.tm.cache_map() self.draw() self.check_complete() def check_complete(self): s = self.tm.get_map() if s.count('X') == 4: print("\nCongratulations!\n") time.sleep(2) self.events.exit_signalled() def run(self): self.events = EventGenerator() self.events.add_listener(FigureMoveListener(self.move)) self.events.add_listener(ExitListener(self.events.exit_signalled)) with draw_timer(self, self.events): self.events.event_loop()
class Boxes: def __init__(self): self.game = Game() self.tm = TiledMap(self.game) self.player = Sprite(self.game, 'b.tail', (4, 1), speed=4) self.tm.set_map(BOXMAP) def draw(self): self.tm.draw() self.player.draw() def move(self, direction): nearpos = self.player.pos + direction farpos = nearpos + direction near = self.tm.at(nearpos) far = self.tm.at(farpos) if near == '#': return if near in 'xX' and far in '#xX': return else: # move possible self.player.add_move(direction) moves = [self.player] if near in 'xX': # crate moved floor = '.' if near == 'x' else '*' insert = 'X' if far == '*' else 'x' moves.append(MapMove(self.tm, nearpos, direction, 4, floor_tile=floor, insert_tile=insert)) self.game.wait_for_move(moves, self.draw, 0.02) self.draw() self.check_complete() def check_complete(self): s = self.tm.get_map() if s.count('X') == 4: print("\nCongratulations!\n") time.sleep(2) self.game.exit() def run(self): self.game.event_loop(figure_moves=self.move, draw_func=self.draw)
class SlidingPuzzle: def __init__(self): self.screen = Screen(Vector(350, 350), 'data/background.png') frame = Frame(self.screen, Rect(64, 64, 320, 320)) tile_factory = TileFactory('data/tiles.conf') self.tm = TiledMap(frame, tile_factory) self.gap = Vector(4, 4) self.tm.set_map(PUZZLEMAP) self.tm.draw() self.events = None pygame.display.update() def move(self, direction): start = self.gap - direction if self.tm.at(start) == '#': return move = MapMove(self.tm, start, direction, 2) wait_for_move(move, self.screen, self.tm.draw, 0.01) self.gap = start self.check_complete() def get_same(self, row): counter = Counter(row) return counter.most_common(1)[0][1] def check_complete(self): s = self.tm.get_map() rows = s.split('\n') same = [self.get_same(row) for row in rows[1:5]] if sum(same) == 15: print("\nCongratulations!\n") self.events.exit_signalled() def run(self): self.events = EventGenerator() self.events.add_listener(FigureMoveListener(self.move)) self.events.event_loop()