系統開發-05介面調整

更新 發佈閱讀 10 分鐘

先來修改莊家部分,發完牌後,莊家第一章牌應該是蓋起來的,所以我們來調整一下UpdateUI()即可

protected void UpdateUI()
{

//......以上省略....

dealer = (Player)Session["Dealer"];

//顯示莊家手牌
for (int i = 0; i < dealer.cards.Count; i++)
{
//**新增**
if (i == 0) //顯示的第一張牌改為蓋幾來的圖片
{
lab_dealer.Text += $"<img src='./images/BACK.png'>";
}
else
{
lab_dealer.Text += $"<img src='./images/{dealer.cards[i].Rank}-{dealer.cards[i].Suit}.png'>";
}
}
}

執行結果:

raw-image


但以上有個問題,就是牌局結束後,莊家的蓋牌並不會顯示,所以再來修改一下

新增遊戲狀態(status),分為遊戲中(status=0)和遊戲結束(status=1)兩個狀態,除了遊戲初始化設定(status=0)以外將所有的會結束牌局的地方(玩家爆牌與停牌)加入遊戲結束(status=1)

protected void ResetGame() {        //初始化遊戲參數與動作(初始發牌)
//將資料存到Session
Session["Deck"] = new Deck();
Session["Dealer"] = new Player();
Session["Player"] = new Player();

//**新增**
status = 0;
Session["Status"] = status;

//初始發牌
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 UpdateUI()
{
deck = (Deck)Session["Deck"];
lab_deck.Text = deck.ShowCards();

//Label顯示前先清空內容
lab_player.Text = "";
lab_dealer.Text = "";

player = (Player)Session["Player"];

//顯示玩家手牌
for (int i = 0; i < player.cards.Count; i++)
{
lab_player.Text += $"<img src='./images/{player.cards[i].Rank}-{player.cards[i].Suit}.png'>";
}

dealer = (Player)Session["Dealer"];
//**新增 **
status = (int)Session["Status"]; //取得status

//顯示莊家手牌
for (int i = 0; i < dealer.cards.Count; i++)
{
//**新增**
if (i == 0 && status == 0) //加入status判斷,遊戲結束(status=1)不顯示蓋牌
{
lab_dealer.Text += $"<img src='./images/BACK.png'>";
}
else
{
lab_dealer.Text += $"<img src='./images/{dealer.cards[i].Rank}-{dealer.cards[i].Suit}.png'>";
}
}
}

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

if (player.IsBusted())
{
lab_msg.Text = $"{player.CalculatePoints()}點,你爆掉了! 莊家贏!";

//**新增**
status = 1;
Session["Status"] = status;

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

UpdateUI();
}

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()}點! 雙方平手!";
}

//**新增**
status = 1;
Session["Status"] = status;

btn_hit.Enabled = false;
btn_stand.Enabled = false;
btn_newgame.Enabled = true;

UpdateUI();
}

執行結果:

raw-image
raw-image

以上已調整好遊戲的介面,算是一個完整的遊戲了。

後續再新增一下遊戲的回和數,與玩家輸贏次數。

留言
avatar-img
Phyxsius
0會員
19內容數
FIRE
你可能也想看
Thumbnail
在 vocus 與你一起探索內容、發掘靈感的路上,我們又將啟動新的冒險——vocus App 正式推出! 現在起,你可以在 iOS App Store 下載全新上架的 vocus App。 無論是在通勤路上、日常空檔,或一天結束後的放鬆時刻,都能自在沈浸在內容宇宙中。
Thumbnail
在 vocus 與你一起探索內容、發掘靈感的路上,我們又將啟動新的冒險——vocus App 正式推出! 現在起,你可以在 iOS App Store 下載全新上架的 vocus App。 無論是在通勤路上、日常空檔,或一天結束後的放鬆時刻,都能自在沈浸在內容宇宙中。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News