2010-10-13 119 views
0

即時通訊使用5個骰子試圖獲得C#編程。兩名球員得到三次投籃。在得分之前,他必須依次得到6分,5分和4分。當他拋出這些特殊數字時,這些骰子就會被取消。剩下的兩個骰子的總數就是他的觀點。電腦必須打敗它。骰子必須按順序建造。也就是說,玩家必須在5之前或之前同時投擲6和5之前,或者與之同時投擲6。C#骰子滾動

如何讓它識別6,5的骰子,4是閱讀,我如何儘量減少骰子達到其條件後的數量?

+2

你有什麼代碼,使遠嗎? – RedFilter 2010-10-13 15:06:07

+0

你只需要產生足夠的隨機數然後掃描它們的6,5,4。有什麼困難?到目前爲止,你有什麼? – Rup 2010-10-13 15:06:36

+0

有些問題:這個作業嗎?你有多少經驗與C#(或其他編程語言)?你使用的是什麼版本的C#?如果你是C#的新手,那麼我建議你閱讀一些書籍或者在互聯網上搜索,這裏有很多可以學習的資源。如果你自己去解決問題,看看它會如何發展,你會學到更多。 – 2010-10-13 15:21:16

回答

1

聽起來像學習有限狀態機的練習。

其基本思想是你的「機器」在某種狀態下啓動,我們稱之爲「START」。

爲了獲得分數,你需要三次滾動骰子,所以你還必須跟蹤骰子擲出的次數。

在每次擲骰後,您會檢查骰子,並根據當前狀態和擲骰子的情況,將您的「機器」轉換爲新狀態。

您聲明您必須依次滾動一個6,5和4(這提示狀態將如何轉換)或在同一個滾動(告訴您狀態可以跳過)期間滾動。

那麼這些其他狀態是什麼?既然你必須擲出一個6然後是5,然後是4,那麼我們只需要調用狀態「SIX」,「FIVE」和「FOUR」。

在僞代碼:

int STATE_START = 6; 
int STATE_SIX = 5; 
int STATE_FIVE = 4; 
int STATE_FOUR = 3; 

int state = STATE_START; 
int rolls = 0; 
int[] dice 
int score = 0; 

do (while state != STATE_FOUR && rolls++ < 4) { 
    dice = rollDice(); 

    do (while state != STATE_FOUR) { 
     if (dice.Contains(state)) { 
      state--; 
     } 
     else { 
      break; 
     } 
    } 
} 

if (state == STATE_FOUR) { 
    score = getScore(dice); 
} 
+0

TQ Chris ..現在我明白了.. :) – Sydney 2010-10-13 15:35:15