private void CreateBoard()
        {
            Tile middleTile = Board.GetMiddleTile();
            int  middleRow  = middleTile.Row;
            int  middleCol  = middleTile.Col;

            foreach (Tile tile in Board.Tiles)
            {
                TileBehaviour tileInstance = Instantiate(_tilePrefab, TilesParent);

                tileInstance.transform.localPosition = new Vector3(0, tile.Row - middleRow, tile.Col - middleCol);
                tileInstance.UpdateMaterial(tile);

                _tiles.Add(tileInstance);
            }
        }
        private IEnumerator Start()
        {
            _tiles = new List <TileBehaviour>();

            yield return(null);

            if (Time == null)
            {
                Time = new UnityTime();
            }
            if (InputSource == null)
            {
                InputSource = new UnityInputSource(Keys);
            }
            if (Random == null)
            {
                Random = new UnityRandom();
            }

            Board   = new Board(BoardSize);
            Manager = new GameManager(Board, new Snake(), new PlayerInput(InputSource), new FoodSpawner(Random));

            HighScore = Score;

            Camera.orthographicSize = (((float)BoardSize) / 2) + 1;

            _tilePrefab = Resources.Load <TileBehaviour>("Tile");

            CreateBoard();

            GameResultText.gameObject.SetActive(false);
            RestartButton.onClick.AddListener(OnRestartClick);
            RestartButton.gameObject.SetActive(false);

            yield return(null);

            Loaded = true;
        }