系統開發-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
留言分享你的想法!
avatar-img
Phyxsius
0會員
19內容數
FIRE
你可能也想看
Thumbnail
蝦皮分潤計畫讓我在分享旅遊文章時,也能透過推薦好物累積被動收入,貼補旅行基金。這篇文章,除了介紹計畫的操作亮點與心得,也分享我最常應用的案例:「旅行必備小物 TOP5」,包含行李鎖、免洗內衣褲、分裝瓶、折疊衣架與真空壓縮袋,幫助出國打包更輕鬆。想同時記錄旅行、分享好物又創造額外收入的你,千萬別錯過!
Thumbnail
蝦皮分潤計畫讓我在分享旅遊文章時,也能透過推薦好物累積被動收入,貼補旅行基金。這篇文章,除了介紹計畫的操作亮點與心得,也分享我最常應用的案例:「旅行必備小物 TOP5」,包含行李鎖、免洗內衣褲、分裝瓶、折疊衣架與真空壓縮袋,幫助出國打包更輕鬆。想同時記錄旅行、分享好物又創造額外收入的你,千萬別錯過!
Thumbnail
想增加被動收入?加入蝦皮分潤計畫是輕鬆上手的好方法!本文提供完整教學,包含申請流程、賺取分潤技巧,以及實際使用心得分享,助你輕鬆獲得額外收入。
Thumbnail
想增加被動收入?加入蝦皮分潤計畫是輕鬆上手的好方法!本文提供完整教學,包含申請流程、賺取分潤技巧,以及實際使用心得分享,助你輕鬆獲得額外收入。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News