2010-11-07 48 views
2

我想爲用戶提供一些問題的選擇,但我希望它們是隨機的,有相同問題的問答遊戲並不完全有趣。從文本文件生成隨機問題 - C#

我的想法是存儲大量收集的問題,並有appropiate在文本文件中的答案:

What colour is an Strawberry|Red 
How many corners are there on a Triangle|Three 

這意味着,我可以簡單地隨機選擇一條線,讀取線的問題和答案並將它們存儲在遊戲中使用的集合中。

我拿出來與做法,我認爲將是有益的,我期待一些輸入它是如何可以改善一些僞代碼:

Random rand = new Random(); 
int line; 
string question,answer; 

for(int i = 0; i < 20; i++) 
{ 
    line = rand.Next(); 
    //Read question at given line number to string 
    //Read answer at given line number to string 
    //Copy question and answer to collection 
} 

在執行的想法我」的角度我不確定如何指定行號來讀取,以及如何分割整行並分別讀取兩個部分。除非有更好的方法,否則我的想法是在文本文件中手動輸入行號,然後輸入「|」所以每條線看起來像這樣:

1|What colour is an Strawberry|Red 
2|How many corners are there on a Triangle|Three 

感謝您的任何幫助!

+0

我建議從不使用純文本文件作爲結構化數據,這個數據結構起初可能有多簡單。從長遠來看,XML文件應該爲您提供更好的服務。 – TeaDrivenDev 2010-11-07 21:42:28

+0

'3 |這個字符是什麼'|'用於?|管道命令。' – 2010-11-07 21:45:31

+0

@GCATNM或像CompactSQL這樣的過程數據庫。這爲您提供了一種簡單的方法,即只提取要顯示給用戶的那些行。 – 2010-11-07 21:47:15

回答

2

爲什麼不使用ReadLine將整個文件讀入數組或列表中,然後引用數組邊界內的隨機索引來提取問題/答案字符串,而不是在需要時從文本文件中讀取一個問題。

至於解析它,只需使用Split拆分|描述符(並確保沒有問題有|由於某種原因的問題)。這也可以讓你在問題中存儲一些錯誤的答案(只要說第一個總是正確的,那麼當你輸出它時,你可以隨機化訂單)。

+0

好主意!也意味着如果我在一行中添加新項目,我可以擴展它。 – 2010-11-07 21:53:13

2

你不想顯示任何問題兩次,對不對?

Random random = new Random(); 
var q = File.ReadAllLines("questions.txt") 
    .OrderBy(x=>random.Next()) 
    .Take(20) 
    .Select(x=>x.Split('|')) 
    .Select(x=>new QuestionAndAnswer(){Question=x[0],Answer=x[1]}); 
+0

這很好,假設文件不是很大,可能是這種情況。 – 2010-11-07 21:39:08

+0

你介意解釋上面的代碼是如何工作的嗎?我有一種感覺,我明白這一點,但我只想確定。 – 2010-11-07 21:44:25

+0

這段代碼很可愛,但對於每一秒用於產生它的嚴重腦力勞動,每次嘗試閱讀時都需要至少一秒的時間來理解它。也許更多。 – Dialecticus 2010-11-07 22:27:11