系統開發-03玩家爆牌判斷

更新於 2024/11/09閱讀時間約 6 分鐘
raw-image


這一篇來加上玩家的分數計算與超過21點(爆牌)的判斷。

先在Card類別加上每張牌的數值

public class Card
{
public string Suit { get; set; } // 花色
public string SuitName { get; set; } // 花色名稱,為了顯示排堆時方便辨識
public int Rank { get; set; } // 點數
public int Seq { get; set; } // 順序

//**新增**
public int Value // 對應的數值
{
get
{
if (Rank == 1) //A計算分數時先當作11點
{
return 11;
}
else if (Rank > 10)
{ //JQK計算分數都是10點
return 10;
}
else
{
return Rank;
}
}
}
public Card(string suit, string SuitName, int rank) {
this.Suit = suit;
this.SuitName = SuitName;
this.Rank = rank;
} //建立類別

// 顯示卡片的文字表示
public override string ToString()
{
return $"{Rank} of {SuitName}";
}
}

再來在Player類別加上爆牌判斷

public class Player
{
public List<Card> cards { get; private set; }

public Player()
{
cards = new List<Card>();
Init();
}

public void Init()
{
cards.Clear();
}

public void AddCard(Card card)
{
cards.Add(card);
}

//**新增**
//計算手牌分數
public int CalculatePoints()
{
int points = 0;
int aceCount = 0; //A拿到次數

foreach (var card in cards)
{
points += card.Value;
if (card.Rank == 1) aceCount++;
}

// 調整A的值,以避免爆牌
while (points > 21 && aceCount > 0)
{
points -= 10;
aceCount--;
}

return points;
}

//**新增**
//判斷是否爆牌
public bool IsBusted()
{
return CalculatePoints() > 21;
}
}

最後要牌(Hit)按鈕按下後判斷玩家是否爆牌,若是爆牌,要牌(Hit)與停牌(Stand)按鈕無法使用。

protected void btn_hit_Click(object sender, EventArgs e)
{
DrawForPlayer();

//**新增***
//爆牌判斷
if (player.IsBusted())
{
lab_msg.Text = $"{player.CalculatePoints()}點,你爆掉了! 莊家贏!";

//牌局結束,不能再按發牌和停牌
btn_hit.Enabled = false;
btn_stand.Enabled = false;
btn_newgame.Enabled = true;
}

UpdateUI();
}

執行結果:

raw-image


下一篇來設計停牌(Stand)按鈕事件(電腦要牌與莊家玩家的分數比較)。

    avatar-img
    0會員
    19內容數
    FIRE
    留言0
    查看全部
    avatar-img
    發表第一個留言支持創作者!
    你可能也想看
    Google News 追蹤
    Thumbnail
    *合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
    Thumbnail
    徵的就是你 🫵 超ㄅㄧㄤˋ 獎品搭配超瞎趴的四大主題,等你踹共啦!還有機會獲得經典的「偉士牌樂高」喔!馬上來參加本次的活動吧!
    Thumbnail
    *合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
    Thumbnail
    徵的就是你 🫵 超ㄅㄧㄤˋ 獎品搭配超瞎趴的四大主題,等你踹共啦!還有機會獲得經典的「偉士牌樂高」喔!馬上來參加本次的活動吧!