2016-04-20 91 views
0

所以我需要爲蛇遊戲添加一個高分表,並且當我在Google上玩時我無法理解一件事。那麼你們可以按照經驗法則向我解釋怎麼做?如何在遊戲中添加高分

這是代碼,我不能在這裏輸入,也許它太長了。 Pastebin

+0

您應該添加一個最簡單的示例,包括您已經嘗試過的以及失敗的示例。不只是你的整個代碼和一個模糊的問題描述。 – Schore

+0

我同意Schore的觀點,有100種方法可以做到這一點,因此瞭解你想要走的方向將會有所幫助。數據庫/文本文件...... – workabyte

+0

嘗試搜索處理「如何在執行之間持久化數據」或類似問題的問題。您將找到大量資源。在這種情況下,您可能希望找到涉及序列化到文件的方法。 –

回答

1

在遊戲結束時(當玩家評分可見時),創建一些方法來保存結構化文件中的分數,如XML(使用System.IO)。 XML文件可以直接加載到DataSet,DataSet中創建的DataTable是保持高分數據的重要來源。您可以將它作爲「/飛行」進行排序。

編輯: 根據@workabyte希望我會提供一些代碼示例(但不是完整的代碼 - 只是提示,以顯示「如何」)。

1)保持分數可以是非常簡單的XML結構:

<scores> 
    <score> 
     <playerName>Some Name</playerName> 
     <points>100</points> 
    </score> 
</scores> 

2)讀取XML文件到DataSet對象:

DataSet scoresDataSet = new DataSet(); 
string xmlPath = @"c:\MyGameFolder\MyXML.xml"; 
scoresDataSet.ReadXML(xmlPath); 

所以你的數據集結構將被創建,並與數據實現來自XML文件。它應該包含一個名爲「score」的DataTable對象,並帶有「playerName」和「points」列。

3)獲取數據表的數據集:

DataTable scoresDataTable = scoresDataSet.Tables["score"]; 

4)結合數據表到DataGridView控件(我相信你已經把合適的形式對這種控制):

yourGridViewName.DataSource = scoresDataTable; 

5)變化的列標題DataGridView:

yourGridViewName.Columns["playerName"].HeaderText = "Player"; 
yourGridViewName.Columns["points"].HeaderText = "Score"; 

6)添加新的分數(某些按鈕的示例代碼爲例如):

scoresDataTable.Rows.Add(); 
scoresDataTable.Rows[scoresDataTable.Rows.Count - 1]["playerName"] = "Player2"; 
scoresDataTable.Rows[scoresDataTable.Rows.Count - 1]["score"] = "200"; 

正如你可以看到你的DataGridView自動刷新。你必須記住,5)中的步驟只是爲了更好的GridView視圖,並且你仍然擁有不同列名的DataSource而不是HeaderText屬性。

7)保存DataSet轉換XML:

scoresDataSet.WriteXML(@"c:\MyGameFolder\MyXML.xml"); 

8)排序的DataGridView下降頂部(分數越高):

yourGridViewName.Sort(yourGridViewName.Columns["points"], ListSortDirection.Descending); 

這就是全部。感謝您的閱讀,我希望它有幫助。

+0

很好的答案,但如果你可以添加一些實際的例子,他會如何做到這一點會好很多 – workabyte

0

爲了簡單,爲什麼不直接使用文本(CSV/JSON)文件。

就像說在其他的答案,你需要在最後捕捉到的信息,如果你不感興趣的名稱僅分數會比較簡單,但無論哪種方式,你可以接近相同的方式。

如果你要保持一個列表中可以說前10名,那麼你會想 - 讀取文件 - 添加新的得分 - 爲了按分數 - 寫前10

File.ReadAllLines(filepath)可以用來消耗文件。那麼你會想將數據解析爲數字。

如果保存喜歡

name,score

的文件,你可以這樣做

var scores = File.ReadAllLines(file).Select(line => new HighScore{ name=line.Split(',').First(), score=line.Split(',').Last()).ToList()

scores.Add(new HightScore(value,value))

然後你可以使用File.WriteAllLines

File.WriteAllLine(scores.Take(10));