Game.sharedInstance manages the game logic and data as a singleton. It represents the game board as a 2D array and provides methods to generate tiles, slide the board in different directions, and check if the game is over. TileLabel views are used to display the tiles on the board. They observe the Game's "turn" property to update when it changes. User swipes are handled to call Game's slideBoard method and update the views if a move was possible. The game ends when no valid moves remain.