         }
       })
   }
-
-  // Protocol
+}
+
+extension NumberTileGameViewController: GameModelProtocol {
   func scoreChanged(score: Int) {
-    if scoreView == nil {
-      return
-    }
-    let s = scoreView!
-    s.scoreChanged(newScore: score)
+    scoreView.scoreChanged(newScore: score)
   }
 
   func moveOneTile(from: (Int, Int), to: (Int, Int), value: Int) {
-    assert(board != nil)
-    let b = board!
-    b.moveOneTile(from, to: to, value: value)
+    board.moveOneTile(from, to: to, value: value)
   }
 
   func moveTwoTiles(from: ((Int, Int), (Int, Int)), to: (Int, Int), value: Int) {
-    assert(board != nil)
-    let b = board!
-    b.moveTwoTiles(from, to: to, value: value)
+    board.moveTwoTiles(from, to: to, value: value)
   }
 
   func insertTile(location: (Int, Int), value: Int) {
-    assert(board != nil)
-    let b = board!
-    b.insertTile(location, value: value)
+    board.insertTile(location, value: value)
   }
 }


  let model: GameModel
  
  var board: GameboardView?
  var scoreView: ScoreViewProtocol?

  // Width of the gameboard
  let boardWidth: CGFloat = 230.0

  }

  func reset() {
    board.reset()
    model.reset()
    model.insertTileAtRandomLocation(2)
    model.insertTileAtRandomLocation(2)
