[英]how to get C# code to read XML file in a basic game
我正在創建基於RPG的基本文本,並嘗試使用xml來保存游戲。 這是從xml調用玩家數據的代碼:
public class SuperAdventure() {
private Player _player;
private Monster _currentMonster;
private const string PLAYER_DATA_FILE_NAME = "PlayerData.xml";
public SuperAdventure()
{
InitializeComponent();
if (File.Exists(PLAYER_DATA_FILE_NAME))
{
_player = Player.CreatePlayerFromXmlString(File.ReadAllText(PLAYER_DATA_FILE_NAME));
}
else
{
_player = Player.CreateDefaultPlayer();
}
MoveTo(_player.CurrentLocation);
UpdatePlayerStats();
}
}
我也知道可以正確創建xml。 當我關閉游戲時,可以手動找到xml。 保存所有統計信息,但是當重新打開游戲時,玩家將重置為默認統計信息和項目。 我不確定函數調用的順序是否重要,或者xml的創建是否會影響xml的游戲使用。
這是CreatePlayerFromXmlString()函數:
public static Player CreatePlayerFromXmlString(string xmlPlayerData)
{
try
{
XmlDocument playerData = new XmlDocument();
playerData.LoadXml(xmlPlayerData);
int currentHitPoints = Convert.ToInt32(playerData.SelectSingleNode("/Player/Stats/CurrentHItPoints").InnerText);
int maximumHitPoints = Convert.ToInt32(playerData.SelectSingleNode("/Player/Stats/MaximumHitPoints").InnerText);
int gold = Convert.ToInt32(playerData.SelectSingleNode("/Player/Stats/Gold").InnerText);
int experiencePoints = Convert.ToInt32(playerData.SelectSingleNode("/Player/Stats/ExperiencePoints").InnerText);
Player player = new Player(currentHitPoints, maximumHitPoints, gold, experiencePoints);
int currentLocationID = Convert.ToInt32(playerData.SelectSingleNode("/Player/Stats/CurrentLocation").InnerText);
player.CurrentLocation = World.LocationByID(currentLocationID);
foreach (XmlNode node in playerData.SelectNodes("/Player/InventoryItems/InventoryItem"))
{
int id = Convert.ToInt32(node.Attributes["ID"].Value);
int quantity = Convert.ToInt32(node.Attributes["Quantity"].Value);
for (int i = 0; i < quantity; i++)
{
player.AddItemToInventory(World.ItemByID(id));
}
}
foreach (XmlNode node in playerData.SelectNodes("/Player/PlayerQuests/PlayerQuest"))
{
int id = Convert.ToInt32(node.Attributes["ID"].Value);
bool isCompleted = Convert.ToBoolean(node.Attributes["IsCompleted"].Value);
PlayerQuest playerQuest = new PlayerQuest(World.QuestByID(id));
playerQuest.IsCompleted = isCompleted;
player.Quests.Add(playerQuest);
}
return player;
}
catch
{
//If there was an error with the XML data, return a default player object
return Player.CreateDefaultPlayer();
}
}
問題是當游戲經過try代碼塊時出現錯誤。 這導致它移動到catch塊並創建一個默認播放器。 搜索currentHitPoints的代碼行中的字符串是拼寫錯誤的,Visual Studio不會將其視為錯誤,因為它是傳遞給XML函數的字符串。
int currentHitPoints = Convert.ToInt32(playerData.SelectSingleNode("/Player/Stats/CurrentHItPoints").InnerText);
"/Player/Stats/CurrentHItPoints"
應為"/Player/Stats/CurrentHitPoints"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.