2014年4月4日 星期五

[Code Review] Team 02 - Hw05




執行檔在此
Frm_ShowHand.cs(表單) StudCard.cs(手牌) CardDeck.cs(牌堆) ScoreTable.cs(記分板) PokerCard.cs(撲克牌)

4 則留言:

  1. PokerCard類別裡的欄位Suit跟Rank應該用private比較好 第九組

    回覆刪除
    回覆
    1. 這裡不能設private,不然Suit跟Rank根本不能更改,除非用屬性的存取運算子,
      但測試結果是會略為降低效能,而且為了符合進度而沒有使用。

      刪除
  2. [第六組]
    一般的梭哈就只用牌型、點數、花色來比較大小,所以當初看到你們把牌轉換成分數的做法覺得怪怪的.

    演算法:直接判斷法,我覺得蠻酷的! 不過裡面的X和Y都要平方,其中Y還得分別對五張牌點數做平方後才相加. 這種處理其實花的時間會比判斷兩張牌之間的差是否為1來的久. 不過這個方法的好處就在不用排序,或許在處理張數很多的情況下,這個方法反而會比"排序後再檢查兩張之間的差是否為1"還快.

    回覆刪除
  3. 梭哈在比大小時,除了判斷牌型外,剩下的其實就是找到5張手牌中的「關鍵牌」,所以可以理解的是在同牌型的情況下其實就是在比這張「關鍵牌」的大小,而牌分其實就是這張「關鍵牌」的分數,因此會與點數與花色相關。一副牌52張攤開來看,可以從小排到大而且不會有一樣大小的牌,因此我們可以給予不同牌不同的分數,從而進行大小的判定,這是牌分概念的來源。

    如果有詳細看這個程式的話,其實可以發現這些亂七八糟的演算法就是一直在迴避排序的演算法,主要原因當然還是排序很花時間。直接判斷法中的順子判斷規則是有其數學理論為基礎的,這條5Y-X^2=50是由變異數的概念推導而來,想當然爾會有比較多的數值運算,而具有較少的邏輯判斷。這方法基本上應該會比判斷差1來得慢,但畢竟不需經過排序,實際的效率可能還是要實做看看才能得知。

    回覆刪除