補充教學-SSR十連抽

更新 發佈閱讀 9 分鐘

這一篇用前面的範例來修改做一個SSR十連抽範例,看看有沒有抽到SSR。

發源於《遊戲王》,N就是normal(正常)R就是Rare(罕見),SR就是Super Rare(非常稀有),SSR表示Superior Super Rare(超級稀有),UR則是Ultra Rare(極度稀有)。

主要是Card的定義改成這次需要的內容(卡牌類型、編號、顏色),在這裡就不做卡牌名字與效果,有需要可以自己定義寫寫看。

假設SSR抽中機率5%,SR抽中機率30%,R抽中機率65%,宣告一個100大小的Card陣列,裡面放入5張SSR,30張SR、剩下的都是R,經過亂數洗牌後,取出前十張,即可知道此次的連十次抽牌結果。


SSR.aspx

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

<!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>
</div>
</form>
</body>
</html>

SSR.aspx.cs

public partial class SSR : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//卡牌分為三類:SSR、SR、R
//抽到機率為 SSR (5%)、SR (30%)、R(65%)
Card[] cards = new Card[100]; //100張,因抽到機率為百分比

for (int i = 0; i < cards.Length; i++) //四種花色
{
if(i < 5) //SSR 5張
{
cards[i] = new Card("SSR", i, "#ff0000");
}
else if(i>=5 && i<35) //SSR 30張
{
cards[i] = new Card("SR", i, "#0000ff");
}
else //剩下的都是R
{
cards[i] = new Card("R", i, "#009900");
}
}

//洗牌前
for (int i = 0; i < cards.Length; i++)
{
if(i % 10 == 0)
{
Label1.Text += "<br>";
}
Label1.Text += $"{cards[i].ToString()},";
}

//洗牌
Shuffle(cards);

//洗牌前
for (int i = 0; i < cards.Length; i++)
{
if (i % 10 == 0)
{
Label2.Text += "<br>";
}
Label2.Text += $"{cards[i].ToString()},";
}

//十連抽結果
for(int i=0; i<10; i++)
{
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-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 Rare { get; set; }
public int No { get; set; }
public string Color { get; set; }

// Card建構函數
public Card(string suit, int rank, string c)
{
this.Rare = suit; //類型,SSR / SR / R
this.No = rank; //編號
this.Color = c; //顏色
}

// 覆寫ToString()方法來顯示撲克牌訊息
public override string ToString()
{
return $"<font color={Color}>{Rare} ({No})</font>";
}
}

執行結果:

raw-image



留言
avatar-img
Phyxsius
0會員
19內容數
FIRE
你可能也想看
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News