繼續開發玩家停牌(Stand),停牌後輪到莊家(電腦)要牌,並判斷莊家是否爆牌與玩家比較點數大小。
新增btn_stand_Click()中莊家要牌與爆牌和點數的比較判斷,且牌局結束(比較點數後)要牌和停牌按鈕無法按下
//玩家停牌,換莊家要牌DrawForDealer(),直到計分比較輸贏
protected void btn_stand_Click(object sender, EventArgs e)
{
//**新增***
player = (Player)Session["Player"];
dealer = (Player)Session["Dealer"];
//小於18點持續要牌
while (dealer.CalculatePoints() < 18)
{
DrawForDealer();
}
//如果莊家沒有爆牌,比較莊家和玩家的點數
int playerScore = player.CalculatePoints();
int dealerScore = dealer.CalculatePoints();
if (dealer.IsBusted() || playerScore > dealerScore)
{
//玩家贏
if (dealer.IsBusted())
{
lab_msg.Text = $"莊家 {dealer.CalculatePoints()}點,玩家 {player.CalculatePoints()}點! 莊家爆掉了! 玩家贏!";
}
else
{
lab_msg.Text = $"莊家 {dealer.CalculatePoints()}點,玩家 {player.CalculatePoints()}點! 玩家贏!";
}
}
else if (playerScore < dealerScore)
{
//莊家贏
lab_msg.Text = $"莊家 {dealer.CalculatePoints()}點,玩家 {player.CalculatePoints()}點! 莊家贏!";
}
else
{
//平手
lab_msg.Text = $"莊家 {dealer.CalculatePoints()}點,玩家 {player.CalculatePoints()}點! 雙方平手!";
}
btn_hit.Enabled = false;
btn_stand.Enabled = false;
btn_newgame.Enabled = true;
UpdateUI();
}
再來調整按鈕的狀態,牌局開始無法按下新牌局按鈕,以下是調整ResetGame()後的內容
protected void ResetGame() { //初始化遊戲參數與動作(初始發牌)
//將資料存到Session
Session["Deck"] = new Deck();
Session["Dealer"] = new Player();
Session["Player"] = new Player();
//初始發牌
DrawForPlayer();
DrawForDealer();
DrawForPlayer();
DrawForDealer();
//清空label內容
lab_deck.Text = "";
lab_dealer.Text = "";
lab_player.Text = "";
//**新增***
lab_msg.Text = "";
btn_hit.Enabled = true;
btn_stand.Enabled = true;
btn_newgame.Enabled = false;
}
新牌局按鈕調整,按下後讓畫面更新,顯示新的牌局內容
protected void btn_newgame_Click(object sender, EventArgs e)
{
ResetGame();
UpdateUI();
}
按下停牌按鈕後執行結果
按下新牌局按鈕後的執行結果
21點遊戲基本功能已經完成,可以開始遊玩,但可以再加一些資訊讓玩的人更清楚現在的狀況,例如:牌堆要隱藏(避免作弊);莊家的牌要隱藏一張(避免作弊);現在是第幾局、已經贏過幾次...等等,下幾篇再來調整。