今天在freeCodeCamp上做題時,有一道題目講的是21點的算法,從網上搜索了一下21點的規則如下:
21點(blackjack)算法[轉] -- Beat the dealer
來源: 顧斌夢追い蟲的日志
21點的優選算法,據說把輸牌的概率降低到了0.5%,研究一下。 首先學的是二十一點的規則。
我們可以看出,二十一點的結果很大程度上依賴於玩家的選擇。象輪盤賭、百家樂那種游戲,玩家壓上錢后,就只 好祈禱上帝,期盼好運降臨,然后咣當一聲,一拍兩散,是死是活,當場就見分曉。
二十一點、牌九等游戲則不同,在發下牌后,玩家可以在一定程度上控制自己的 最終結果,因此如果應對得當,可以使自己的損失減到最小。這就是所謂“基本策略(Basic Strategy)”。 二十一點規則 1,游戲由玩家和庄家(即賭場的發牌員)對玩,看誰的牌面點數更靠近21點。但如果超過了21點,則稱為“爆掉”,算輸。其中花牌(J,Q,K)都算10點,A可以算1點,也可以算11點,看哪種情況更有利。玩家之間不做比較。 2,游戲開始時,所有玩家和庄家各拿兩張牌,一般來說,是玩家兩張牌牌面朝上,庄家一張牌面朝上,一張牌面朝下。 3,兩張牌的點數,肯定介於2到21點之間。21點只可能是一張10(包括J,Q,K,下同)和一張A,這叫“天成(BlackJack,以下簡稱BJ)”,除非庄家也拿到了BJ,不然贏一倍半的賭注。
好吧,我們還是可以用判斷語句來完成這個函數,我選擇了用case語句來實現,具體代碼如下:
function cc(card) { switch(card){ case 2: case 3: case 4: case 5: case 6: count++; break; case 10: case "J": case "Q": case "K": case "A": count--; break; } if(count>0){ return count+" Bet"; }else if(count<=0){ return count+" Hold"; } }
我們用case語句,當牌面為2,4,5,6時,count依次遞增,
牌面為10,"J","Q","K","A"時count遞減