系統開發-撲克牌洗牌

閱讀時間約 10 分鐘

撲克牌初始化後,加入洗牌功能,並顯示洗牌前和洗牌後撲克牌的排列狀態


Shuffle.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Shuffle.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
洗牌前:<br />
<asp:Label ID="Label1" runat="server" Text=""></asp:Label>
<br />
<br />
洗牌後:<br />
<asp:Label ID="Label2" runat="server" Text=""></asp:Label>
<br /><br />
可按F5或重新載入更新畫面,每次洗牌後結果都會不一樣
</div>
</form>
</body>
</html>

Shuffle.aspx.cs

public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string[] suits = { "S", "H", "D", "C" }; //"S黑桃" , "H紅心" , "D方塊" , "C梅花"

Card[] cards = new Card[52]; //一副牌52張
int index = 0;

for (int i = 0; i < suits.Length; i++) //四種花色
{
for (int j = 1; j <= 13; j++) //一種花色13張牌1-13
{
cards[index] = new Card(suits[i], j); //初始化
index++;
}
}

//洗牌前
for (int i = 0; i < cards.Length; i++)
{
if (i % 13 == 0) //13張牌排成一行
{
Label1.Text += $"<br>{cards[i].ToString()}"; //換行
}
else
{
//Label1.Text += $",{cards[i].ToString()}"; //Card class預設顯示方式
Label1.Text += $",{cards[i].Suit}{cards[i].Rank}"; //自訂顯示方式
}
}

//洗牌
Shuffle(cards);

//洗牌後
for (int i = 0; i < cards.Length; i++)
{
if (i % 13 == 0) //13張牌排成一行
{
Label2.Text += $"<br>{cards[i].ToString()}"; //換行
}
else
{
//Label1.Text += $",{cards[i].ToString()}"; //Card class預設顯示方式
Label2.Text += $",{cards[i].ToString()}"; //自訂顯示方式
}
}
}

//洗牌
void Shuffle(Card[] cards)
{
Random rand = new Random();

for(int i=0; i<cards.Length; i++)
{
int j = rand.Next(cards.Length); //// 產生一個隨機索引 0-51

//例如:
// i=0, j=12,表示第一張牌 (cards[0] 黑桃1) 與第13張牌 (cards[12]黑桃13) 互換
// 互換後的結果為,第一張牌 (cards[0] 黑桃13,第13張牌 (cards[12]黑桃1)
// 一直換52次(每一個位置的牌都換一次)
Swap(cards, i, j);
}
}

//陣列中兩個元素交換,通過暫存變數的方式來實現交換
void Swap(Card[] cards, int i, int j)
{
Card tmp = cards[i]; //將 cards[i] 的值暫存到 temp
cards[i] = cards[j]; //將 cards[j] 的值賦給 cards[i]
cards[j] = tmp; //將剛才暫存的 tmp 值賦給 cards[j]
}
}

class Card
{
public string Suit { get; set; }
public int Rank { get; set; }

// Card建構函數
public Card(string suit, int rank)
{
this.Suit = suit; //花色
this.Rank = rank; //點數
}

// 覆寫ToString()方法來顯示撲克牌訊息
public override string ToString()
{
string suitName = "";

switch (Suit)
{
case "S":
suitName = "黑桃";
break;
case "H":
suitName = "紅心";
break;
case "D":
suitName = "方塊";
break;
case "C":
suitName = "梅花";
break;
}

return $"{suitName}{Rank}";
}
}

執行結果:

raw-image


    avatar-img
    0會員
    19內容數
    FIRE
    留言0
    查看全部
    avatar-img
    發表第一個留言支持創作者!
    你可能也想看
    Google News 追蹤
    Thumbnail
    這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
    Thumbnail
    11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
    Thumbnail
    Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
    Thumbnail
    這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
    Thumbnail
    11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
    Thumbnail
    Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液