Exemple #1
0
        public void LoadLevel(int levelNumber)
        {
            GameState = GameState.Loading; //设置当前游戏的状态
            if (Level != null)             //如果当前Level存在,通过关卡切换而来
            {
                /* 先取消对关卡完成事件的绑定. */
                Level.LevelCompleted -= new EventHandler(Level_LevelCompleted);
            }
            Level = new Level(this, levelNumber); //新建一个Level
            Level.LevelCompleted += new EventHandler(Level_LevelCompleted);
            string levelMap;                      //用于保存关卡自字符的变量

            if (sokobanService != null)
            {   //使用sokobanService来得到关卡地图字符串
                levelMap = sokobanService.GetMap(levelNumber);
                using (StringReader reader = new StringReader(levelMap))
                {   //调用Load方法加载关卡内容
                    Level.Load(reader);
                }
            }
            else
            {   //如果sokobanService没有传入,则从文件中加载关卡文件
                string fileName = string.Format(@"{0}Level{1:000}.skbn",
                                                levelDirectory, levelNumber);
                using (StreamReader reader = File.OpenText(fileName))
                {  //加载关卡内容
                    Level.Load(reader);
                }
            }
            OnPropertyChanged("Level"); //触发关卡属性变更通知
            StartLevel();               //开始指定关卡的游戏
        }