2013-11-23 101 views
0

在我的遊戲中,它的目標是變得有點像吉他英雄,但是之前我做過遊戲,並且在解析XML時遇到了很多錯誤。它會讀這樣的事情:爲對象指定多個屬性

<song> 
    <note> 
    <time>1.35</time> 
    <key>A</key> 
    </note> 
</song> 

從那裏,我會分析每個「音符」屬性的XML文件中,並將其整理成一本字典裏面包含了所有的筆記:

public Dictionary<int, string> AssortedNotes = new Dictionary<int, string>(); 

然後從那裏,我會運行一個簡單的foreach語句,並根據值,排序成子字典門類,如:

public Dictionary<int, string> ANotes = new Dictionary<int, string>(); 
public Dictionary<int, string> SNotes = new Dictionary<int, string>(); 
public Dictionary<int, string> DNotes = new Dictionary<int, string>(); 

public Dictionary<int, string> JNotes = new Dictionary<int, string>(); 
public Dictionary<int, string> KNotes = new Dictionary<int, string>(); 
public Dictionary<int, string> LNotes = new Dictionary<int, string>(); 

不過,來這裏的「狡猾」一下,我插'時間'attribu te是關鍵,因爲如果我將'key'屬性設置爲關鍵字,肯定會得到錯誤。我的時間屬性純粹基於確保每次都有不同的時間。現在,隨着我製作的歌曲製作人,這就產生了一個問題,我不得不通過XML文件排序並刪除可能存在的任何重複內容,現在很痛苦。

我知道有更好的方法來做這樣的事情,但我不確定如何做。請有人能告訴我一個更好的做事方式,然後解釋如何和爲什麼這樣做?

非常感謝, Jarrod。

回答

1

我不完全明白的第一件事是爲什麼你把時間值存儲爲int?我相信TimeSpan會更好地服務你。

關於重複項,您不會真的經歷源文件並手動刪除它們。當你嘗試在C#中添加重複字典時,它會拋出一個ArgumentException,你可以忽略它。

現在用於存儲數據。我想像遊戲的流程將類似於吉他英雄。考慮到這一點,爲什麼不使用List?您是否需要能夠根據數據本身(Dictionary提供的功能)從集合中獲取數據?我不太明白你爲什麼把數據分成更多字典,如果你能解釋一下,也許我會告訴你,否則。

只需創建一個用於存儲值對的類(如果存在許多輸入數據或速度很重要,結構將絕對更好),並將其存儲在List中。如果您需要進行拆分,只需在列表中循環並將其拆分即可。從訂單中的集合中獲取數據更有意義。

如果輸入數據沒有排序,您可以使用一些可用的已排序集合,但這並不是必需的。

最後,指出你在正確的方向上還有點難,不知道你真正需要完成什麼。

+0

我不會讓字典拋出異常,您應該使用Contains方法來檢測重複項。 –

+0

謝謝你,你的回答非常有幫助。這麼晚纔回復很抱歉。 – Jarrod