我正在創建一個基本的基於文本的RPG,並且嘗試使用xml來保存遊戲。這是從xml調用播放器數據的代碼:如何獲取C#代碼來讀取基本遊戲中的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();
}
}
我很困惑,你的問題的稱號使得它聽起來像你不必爲你的遊戲的需求,工作的XML解決方案,但你的代碼似乎並非如此。你如何創建/與你的XML文件進行交互? –
該解決方案將xml文件保存到Visual Studio中的文件夾中。當遊戲運行時,它應該去檢查一個xml文件來創建一個現有的播放器,除非沒有xml文件。在這種情況下,它會創建一個新的默認玩家。 – LukeDev
此目錄與項目的根文件夾相關的位置在哪裏?根文件夾將是包含.sln文件的文件夾。 –