系統開發-撲克牌由小到大排序

更新 發佈閱讀 13 分鐘

撲克牌已經洗牌且發牌,若要繼續下一回合牌局,我們可以使用new Card[52]整副牌重新建立,記得index要歸零。

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); //初始化
cards[index].Seq = index; //加上撲克牌的順序
index++;
}
}

但這裡我們使用另一種作法,將已經亂掉的牌重新由小到大排序後,即可重複利用

Default.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.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 />
復原排序到洗牌前:<br />
<asp:Label ID="Label3" runat="server" Text=""></asp:Label>
<br /><br />
可按F5或重新載入更新畫面,每次洗牌後結果都會不一樣
</div>
</form>
</body>
</html>

Default.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); //初始化
cards[index].Seq = index; //加上撲克牌的順序
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()}"; //自訂顯示方式
}
}

//復原順序
BubbleSort(cards);

//復原後
//洗牌後
for (int i = 0; i < cards.Length; i++)
{
if (i % 13 == 0) //13張牌排成一行
{
Label3.Text += $"<br>{cards[i].ToString()}"; //換行
}
else
{
Label3.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-52

//例如:
// 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] = cards[j];
cards[j] = tmp;
}

//將撲克牌順序由小到大排序
void BubbleSort(Card[] cards)
{
for (int i = 0; i < cards.Length; i++)
{
for (int j = 0; j < cards.Length-1; j++)
{
if (cards[j].Seq > cards[j+1].Seq) //反過來就是由大到小排序
{
Swap(cards, j, j+1);
}
}
}
}
}

class Card
{
public string Suit { get; set; }
public int Rank { get; set; }
public int Seq { 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


此遊戲開發到此階段,基本已經架構完成(包含流程、物件建立與使用),之後只剩下加上遊戲的玩法(邏輯判斷)與操作介面即可以完成。

也就是說學會前幾篇文章,即可開發類似的遊戲,你可能會想說有這麼簡單嗎? 是的,就是這麼簡單,舉幾個簡單應用的例子

  • 亂數玩家姓名(random)
  • 技能擊中機率
  • 打完怪後掉落物品(亂數獎勵)
  • 單抽SSR英雄(設定比例+洗牌+陣列第一個元素)
  • 十連抽SSR英雄(設定比例+洗牌+陣列前十個元素)
  • 抽禮物刷新
  • 商店物品刷新+排序
  • 關卡怪物刷新+排序

以上類似的基本應用加上不同的使用者介面與邏輯玩法,即可設計出一款遊戲。


留言
avatar-img
Phyxsius
0會員
19內容數
FIRE
你可能也想看
Thumbnail
創作不只是個人戰,在 vocus ,也可以是一場集體冒險、組隊升級。最具代表性的創作者社群「vocus 野格團」,現在有了更強大的新夥伴加入!除了大家熟悉的「官方主題沙龍」,這次我們徵召了 8 位領域各異的「個人主題專家」,將再度嘗試創作的各種可能,和格友們激發出更多未知的火花。
Thumbnail
創作不只是個人戰,在 vocus ,也可以是一場集體冒險、組隊升級。最具代表性的創作者社群「vocus 野格團」,現在有了更強大的新夥伴加入!除了大家熟悉的「官方主題沙龍」,這次我們徵召了 8 位領域各異的「個人主題專家」,將再度嘗試創作的各種可能,和格友們激發出更多未知的火花。
Thumbnail
看完上篇 4 位新成員的靈魂拷問,是不是意猶未盡?別急,野格團新血的驚喜正接著登場!今天下篇接力的另外 4 位「個人主題專家」,戰力同樣驚人──領域從旅行美食、運動、商業投資到自我成長;這些人如何維持長跑般的創作動力?在爆紅的文章背後,又藏著哪些不為人知的洞察?5 大靈魂拷問繼續出擊
Thumbnail
看完上篇 4 位新成員的靈魂拷問,是不是意猶未盡?別急,野格團新血的驚喜正接著登場!今天下篇接力的另外 4 位「個人主題專家」,戰力同樣驚人──領域從旅行美食、運動、商業投資到自我成長;這些人如何維持長跑般的創作動力?在爆紅的文章背後,又藏著哪些不為人知的洞察?5 大靈魂拷問繼續出擊
Thumbnail
德州撲克位置全解析:掌握桌上優勢,提升勝率!♠️🔥 在德州撲克中,「位置(Position)」是一個極為重要的概念,甚至比起手牌本身還要重要!掌握不同位置的特性與策略,可以幫助你在長期遊戲中獲得更高的勝率。 本篇文章將深入解析 各個位置的名稱、優勢與劣勢、適合的打法,讓你在牌桌上如魚得
Thumbnail
德州撲克位置全解析:掌握桌上優勢,提升勝率!♠️🔥 在德州撲克中,「位置(Position)」是一個極為重要的概念,甚至比起手牌本身還要重要!掌握不同位置的特性與策略,可以幫助你在長期遊戲中獲得更高的勝率。 本篇文章將深入解析 各個位置的名稱、優勢與劣勢、適合的打法,讓你在牌桌上如魚得
Thumbnail
C同學說想玩撲克牌遊戲。於是,昨夜大家都洗完澡後,到我們帳篷集合開打。 剛開始她拿出一幅陌生的紙牌桌遊,兩個年輕人把兩個老人家電的慘兮兮。她們在學校就玩過的,反應也比我們夫妻快多了,為了挽回自信心,我建議玩一般撲克牌裡,“大老二遊戲”。
Thumbnail
C同學說想玩撲克牌遊戲。於是,昨夜大家都洗完澡後,到我們帳篷集合開打。 剛開始她拿出一幅陌生的紙牌桌遊,兩個年輕人把兩個老人家電的慘兮兮。她們在學校就玩過的,反應也比我們夫妻快多了,為了挽回自信心,我建議玩一般撲克牌裡,“大老二遊戲”。
Thumbnail
百家樂算牌公式   如果莊閒只發兩張牌比點,開莊閒機率顯然是50:50,連算都不用算。但百家樂中莊閒勝出機率不同的關鍵,就在他的補牌規則。 閒只在 0-5 補牌,莊只在 0-6 補牌,而且莊6點只能在閒加到 6或7 時補牌。 在百家樂中對勝出結果影響較大的是4的周圍號,以簡單的加減計算牌值,
Thumbnail
百家樂算牌公式   如果莊閒只發兩張牌比點,開莊閒機率顯然是50:50,連算都不用算。但百家樂中莊閒勝出機率不同的關鍵,就在他的補牌規則。 閒只在 0-5 補牌,莊只在 0-6 補牌,而且莊6點只能在閒加到 6或7 時補牌。 在百家樂中對勝出結果影響較大的是4的周圍號,以簡單的加減計算牌值,
Thumbnail
麻將胡牌規則 麻將胡牌指的是贏下該局麻將遊戲,只要手上的16張牌+1張別人打出的牌可以組成「5個坎+1個對子」即算胡牌,由打出可以胡牌的玩家支付遊戲點數給胡牌的玩家;手上的16張牌+上1張自己摸進來的牌組成「5個坎+1個對子」即算自摸,自摸的玩家向其餘三位玩家收取遊戲點數。
Thumbnail
麻將胡牌規則 麻將胡牌指的是贏下該局麻將遊戲,只要手上的16張牌+1張別人打出的牌可以組成「5個坎+1個對子」即算胡牌,由打出可以胡牌的玩家支付遊戲點數給胡牌的玩家;手上的16張牌+上1張自己摸進來的牌組成「5個坎+1個對子」即算自摸,自摸的玩家向其餘三位玩家收取遊戲點數。
Thumbnail
台灣賓果賓果加碼大放送! 台灣賓果賓果是一種每五分鐘開獎一次的電腦彩券遊戲。選號範圍為01~80,玩家可以任意選擇玩1~10個號碼的玩法(稱為「1星」、「2星」、「3星」....、「10星」),每次開獎時,電腦系統將隨機開出20個獎號,玩家可以依選擇的玩法和選號進行對獎。
Thumbnail
台灣賓果賓果加碼大放送! 台灣賓果賓果是一種每五分鐘開獎一次的電腦彩券遊戲。選號範圍為01~80,玩家可以任意選擇玩1~10個號碼的玩法(稱為「1星」、「2星」、「3星」....、「10星」),每次開獎時,電腦系統將隨機開出20個獎號,玩家可以依選擇的玩法和選號進行對獎。
Thumbnail
設計發想: 此遊戲源自經典撲克牌遊戲「戰爭」,欲將原規則優化改進而生,同樣可由一副撲克牌遊玩。 遊玩人數: 2~4人。 遊戲設置: 每人將撲克牌的各1花色作為各自牌組。並將兩張鬼牌放置場上。 遊戲目標: 率先將牌組的牌全數送進墓地的玩家得勝。 遊戲流程: 1.每人從牌組秘密打出1張
Thumbnail
設計發想: 此遊戲源自經典撲克牌遊戲「戰爭」,欲將原規則優化改進而生,同樣可由一副撲克牌遊玩。 遊玩人數: 2~4人。 遊戲設置: 每人將撲克牌的各1花色作為各自牌組。並將兩張鬼牌放置場上。 遊戲目標: 率先將牌組的牌全數送進墓地的玩家得勝。 遊戲流程: 1.每人從牌組秘密打出1張
Thumbnail
* 漸卦:循序漸進 (分享)抽牌網站 : https://www.eee-learning.com/eeeApp/app.html 此牌卡的牌意解說 : https://www.eee-learning.com/eeeApp/53.html
Thumbnail
* 漸卦:循序漸進 (分享)抽牌網站 : https://www.eee-learning.com/eeeApp/app.html 此牌卡的牌意解說 : https://www.eee-learning.com/eeeApp/53.html
Thumbnail
撲克牌遊戲有許多種類。 撲克牌遊戲種類多樣,讓你挑選。 喜歡撲克牌遊戲線上玩嗎? 娛樂城提供多款撲克牌遊戲,快來試玩吧!
Thumbnail
撲克牌遊戲有許多種類。 撲克牌遊戲種類多樣,讓你挑選。 喜歡撲克牌遊戲線上玩嗎? 娛樂城提供多款撲克牌遊戲,快來試玩吧!
Thumbnail
桌遊的魅力真的很特別,即使是現在大家都習慣滑手機的時代,有時候在聚會時特地玩一款桌遊或紙牌遊戲,還是能帶給大家很多的歡笑。 特別記錄自己在過年時玩到的一款撲克接龍,它有一些數學的概念很適合作為教具使用,當然本身也簡單好上手,遊玩的人數也算多,推薦給大家!
Thumbnail
桌遊的魅力真的很特別,即使是現在大家都習慣滑手機的時代,有時候在聚會時特地玩一款桌遊或紙牌遊戲,還是能帶給大家很多的歡笑。 特別記錄自己在過年時玩到的一款撲克接龍,它有一些數學的概念很適合作為教具使用,當然本身也簡單好上手,遊玩的人數也算多,推薦給大家!
Thumbnail
翻閱了去年面試時候的題目,想想現在自己會用什麼方式重新完成這個題目,也正好最近在看python的typing模組及其他使用,使用物件導向的方式改寫了程式碼。
Thumbnail
翻閱了去年面試時候的題目,想想現在自己會用什麼方式重新完成這個題目,也正好最近在看python的typing模組及其他使用,使用物件導向的方式改寫了程式碼。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News