用C#+XML技术开发游戏Sokoban Pro

http://tech.ddvip.com   2006年08月02日    社区交流

本文详细介绍用C#+XML技术开发游戏Sokoban Pro

  你用一个XML文件来实现保存游戏。它保存最后玩完的级别集合和最后的玩的级别,这样你可以从你上次玩游戏时离开的地方继续玩下去。另外,它还保存你已经完成的级别及相应的得分(移动和推的数目)。如果你重玩一级并且你的执行更好一些的话,那么你的分数将被更新。

  基本上,该游戏由下列几个类组成:

  ·LevelSet-包含所有的有关一个级别集合(作者信息,级别数目,等等……)的信息。它也把级别集合XML中的级别装载到内存中。

  ·Level-代表在一个级别集合中的一个级别。这里发生的最重要的事情是它追踪所有的你的移动。在玩家移动或推一个盒子时,它更新在一个级别中的项。它更新相应的图形并实现撤消功能,并且最后在屏幕上绘制出级别。

  ·PlayerData-追踪所有的玩家信息。基本上,它反映出你的SaveGame。

  ·Board(Form)-主表单处理所有的玩家输入并且初始化所有的对象。

  ·Players(Form)-让你创建一新的玩家或选择一个现有的玩家。

  ·Levels(Form)-让你选择一个你想要玩的级别集合。

  该应用程序使用读取和写XML文件。例如,下列方法-SaveLevel()-在玩家完成一级后它存储玩家数据。

  public void SaveLevel(Level level)
{
 XmlDocument doc = new XmlDocument();
 doc.Load(filename);
 XmlNode lastFinishedLvl = doc.SelectSingleNode("//lastFinishedLevel");
 lastFinishedLvl.InnerText = level.LevelNr.ToString();
 XmlNode setName = doc.SelectSingleNode("/savegame/levelSets/" +"levelSet[@title = \"" + level.LevelSetName + "\"]");
 XmlNode nodeLevel = setName.SelectSingleNode("level[@levelNr = " + level.LevelNr + "]");
 if (nodeLevel == null){
  XmlElement nodeNewLevel = doc.CreateElement("level");
  XmlAttribute xa = doc.CreateAttribute("levelNr");
  xa.Value = level.LevelNr.ToString();
  nodeNewLevel.Attributes.Append(xa);
  XmlElement moves = doc.CreateElement("moves");
  moves.InnerText = level.Moves.ToString();
  XmlElement pushes = doc.CreateElement("pushes");
  pushes.InnerText = level.Pushes.ToString();
  nodeNewLevel.AppendChild(moves);
  nodeNewLevel.AppendChild(pushes);
  setName.AppendChild(nodeNewLevel);
 }
 else{
  XmlElement moves = nodeLevel["moves"];
  XmlElement pushes = nodeLevel["pushes"];
  int nrOfMoves = int.Parse(moves.InnerText);
  int nrOfPushes = int.Parse(pushes.InnerText);
  if (level.Pushes < nrOfPushes){
   pushes.InnerText = level.Pushes.ToString();
   moves.InnerText = level.Moves.ToString();
  }
  else if (level.Pushes == nrOfPushes && level.Moves < nrOfMoves)
  moves.InnerText = level.Moves.ToString();
 }
 doc.Save(filename);
}

来源:天极开发    作者:朱先忠    责编:豆豆技术应用

正在加载评论...