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

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

    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();
    }

    執行結果:


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

    分享至
    成為作者繼續創作的動力吧!
    © 2024 vocus All rights reserved.