예제 #1
0
 def test_mouse_click__should_move_tile(self):
     board = Board("""
          1  2  3  4
          5  6  7  8
          9 10 11  .
         13 14 12 15
     """)
     view = BoardView(board)
     controller = BoardController(board, view)
     mouse_position = view.get_screen_coords_of_tile(row=3, col=3)
     
     controller.mouse_click(mouse_position)
     
     expected = Board("""
          1  2  3  4
          5  6  7  8
          9 10 11 15
         13 14 12  .
     """)
     self.assertEqual(str(expected), str(board))
예제 #2
0
 def run(self):
     clock = pygame.time.Clock()
     pygame.init()
     screen = pygame.display.set_mode(WINSIZE)
     backbuffer = pygame.Surface(screen.get_size(), pygame.SRCALPHA, 32)
     pygame.display.set_caption('Fifteen')
     
     board = self._board
     board.shuffle()
     board_view = BoardView(board, x=80, y=80)
     board_controller = BoardController(board, board_view)
     game_over_msg = GameOverMessage()
     play_again_btn = Button(title='Play Again', x=80, y=340)
     play_again_btn.attach(self)
 
     while True:
         for event in pygame.event.get():
             if event.type == QUIT:
                 pygame.quit()
                 sys.exit()
             elif event.type == MOUSEMOTION:
                 if not board.is_solved():
                     board_controller.mouse_motion(event.pos)
                 else:
                     play_again_btn.mouse_motion(event.pos)
             elif event.type == MOUSEBUTTONDOWN:
                 if not board.is_solved():
                     board_controller.mouse_click(event.pos)
                 else:
                     play_again_btn.mouse_click(event.pos)
         
         backbuffer.fill((0, 0, 0))
         board_view.draw(backbuffer)
         if (board.is_solved()):
             game_over_msg.draw(backbuffer)
             play_again_btn.draw(backbuffer)
         
         screen.blit(backbuffer, (0, 0))
         pygame.display.flip()
         clock.tick(30)