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(); //开始指定关卡的游戏 }