C#實(shí)現(xiàn)洗牌游戲?qū)嵗?/h1>
更新時(shí)間:2014年08月20日 10:52:24 投稿:shichen2014
這篇文章主要介紹了C#實(shí)現(xiàn)洗牌游戲?qū)嵗?對(duì)于數(shù)據(jù)結(jié)構(gòu)與算法的學(xué)習(xí)有不錯(cuò)的借鑒參考作用,需要的朋友可以參考下
棋牌類游戲是目前比較火的游戲之一。今天本文就以實(shí)例形式實(shí)現(xiàn)洗牌游戲。本文實(shí)例所采用的算法是:遍歷每個(gè)位置上的牌,然后與隨機(jī)位置上的牌交換。
運(yùn)行結(jié)果如下圖所示:

對(duì)于牌來(lái)講,2個(gè)關(guān)鍵的因素是面值和類型(如紅桃、梅花等)。
代碼如下:
public class Card
{
private string mianzhi;
private string leixin;
public Card(string m, string l)
{
mianzhi = m;
leixin = l;
}
public override string ToString()
{
return leixin + " " + mianzhi;
}
}
客戶端程序有3個(gè)方法,一個(gè)是初始化牌的數(shù)組,一個(gè)是遍歷所有牌并顯示,還有一個(gè)是使用算法洗牌。
具體實(shí)現(xiàn)代碼如下:
class Program
{
private static Card[] allCards = new Card[52];
private static string[] ms = { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K" };
private static string[] ls = { "紅桃", "方塊", "梅花", "黑桃" };
static void Main(string[] args)
{
Init();
ShowAllCards();
Console.WriteLine("\r\n");
Shuffle();
ShowAllCards();
Console.ReadKey();
}
private static void Shuffle()
{
Random r = new Random();
Card tempCard;
//依次遍歷所有牌與隨機(jī)位置上的牌交換位置
for (int i = 0; i < allCards.Length; i++)
{
int ran = r.Next(52);
tempCard = allCards[i];
allCards[i] = allCards[ran];
allCards[ran] = tempCard;
}
}
private static void Init()
{
for (int i = 0; i < allCards.Length; i++)
{
allCards[i] = new Card(ms[i % 13],ls[i%4]);
}
}
private static void ShowAllCards()
{
foreach (var item in allCards)
{
Console.Write(item.ToString() + " ");
}
}
}
希望本文所述實(shí)例對(duì)大家的算法學(xué)習(xí)能有所幫助。
相關(guān)文章
-
C# 使用匿名函數(shù)解決EventHandler參數(shù)傳遞的難題
C#動(dòng)態(tài)生成PictureBox并綁定右鍵菜單,實(shí)現(xiàn)刪除圖片 2009-05-05
-
C#反射之基礎(chǔ)應(yīng)用實(shí)例總結(jié)
這篇文章主要介紹了C#反射之基礎(chǔ)應(yīng)用實(shí)例總結(jié),包括了反射的基本原理與用法實(shí)例,需要的朋友可以參考下 2014-10-10
-
C#實(shí)現(xiàn)撲克游戲(21點(diǎn))的示例代碼
21點(diǎn)又名黑杰克,該游戲由2到6個(gè)人玩,使用除大小王之外的52張牌,游戲者的目標(biāo)是使手中的牌的點(diǎn)數(shù)之和不超過21點(diǎn)且盡量大。本文將用C#實(shí)現(xiàn)這一經(jīng)典游戲,需要的可以參考一下 2022-08-08
-
C# 開發(fā)圓角控件(窗體)的具體實(shí)現(xiàn)
這篇文章主要介紹了C# 開發(fā)圓角控件的具體實(shí)現(xiàn),需要的朋友可以參考下 2014-02-02
-
C#中枚舉類型和radiobox關(guān)聯(lián)操作的方法
這篇文章主要介紹了C#中枚舉類型和radiobox關(guān)聯(lián)操作的方法,實(shí)例分析了C#中枚舉類型及與控件關(guān)聯(lián)操作的相關(guān)技巧,需要的朋友可以參考下 2015-04-04
-
C#模擬鏈表數(shù)據(jù)結(jié)構(gòu)的實(shí)例解析
這篇文章主要介紹了C#模擬鏈表數(shù)據(jù)結(jié)構(gòu)的實(shí)例解析,包括隊(duì)雙向鏈表的模擬方法,例子中隊(duì)鏈表的操作也有很好的說(shuō)明,需要的朋友可以參考下 2016-04-04
最新評(píng)論
棋牌類游戲是目前比較火的游戲之一。今天本文就以實(shí)例形式實(shí)現(xiàn)洗牌游戲。本文實(shí)例所采用的算法是:遍歷每個(gè)位置上的牌,然后與隨機(jī)位置上的牌交換。
運(yùn)行結(jié)果如下圖所示:

對(duì)于牌來(lái)講,2個(gè)關(guān)鍵的因素是面值和類型(如紅桃、梅花等)。
代碼如下:
public class Card
{
private string mianzhi;
private string leixin;
public Card(string m, string l)
{
mianzhi = m;
leixin = l;
}
public override string ToString()
{
return leixin + " " + mianzhi;
}
}
客戶端程序有3個(gè)方法,一個(gè)是初始化牌的數(shù)組,一個(gè)是遍歷所有牌并顯示,還有一個(gè)是使用算法洗牌。
具體實(shí)現(xiàn)代碼如下:
class Program
{
private static Card[] allCards = new Card[52];
private static string[] ms = { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K" };
private static string[] ls = { "紅桃", "方塊", "梅花", "黑桃" };
static void Main(string[] args)
{
Init();
ShowAllCards();
Console.WriteLine("\r\n");
Shuffle();
ShowAllCards();
Console.ReadKey();
}
private static void Shuffle()
{
Random r = new Random();
Card tempCard;
//依次遍歷所有牌與隨機(jī)位置上的牌交換位置
for (int i = 0; i < allCards.Length; i++)
{
int ran = r.Next(52);
tempCard = allCards[i];
allCards[i] = allCards[ran];
allCards[ran] = tempCard;
}
}
private static void Init()
{
for (int i = 0; i < allCards.Length; i++)
{
allCards[i] = new Card(ms[i % 13],ls[i%4]);
}
}
private static void ShowAllCards()
{
foreach (var item in allCards)
{
Console.Write(item.ToString() + " ");
}
}
}
希望本文所述實(shí)例對(duì)大家的算法學(xué)習(xí)能有所幫助。
相關(guān)文章
C# 使用匿名函數(shù)解決EventHandler參數(shù)傳遞的難題
C#動(dòng)態(tài)生成PictureBox并綁定右鍵菜單,實(shí)現(xiàn)刪除圖片2009-05-05
C#反射之基礎(chǔ)應(yīng)用實(shí)例總結(jié)
這篇文章主要介紹了C#反射之基礎(chǔ)應(yīng)用實(shí)例總結(jié),包括了反射的基本原理與用法實(shí)例,需要的朋友可以參考下2014-10-10
C#實(shí)現(xiàn)撲克游戲(21點(diǎn))的示例代碼
21點(diǎn)又名黑杰克,該游戲由2到6個(gè)人玩,使用除大小王之外的52張牌,游戲者的目標(biāo)是使手中的牌的點(diǎn)數(shù)之和不超過21點(diǎn)且盡量大。本文將用C#實(shí)現(xiàn)這一經(jīng)典游戲,需要的可以參考一下2022-08-08
C# 開發(fā)圓角控件(窗體)的具體實(shí)現(xiàn)
這篇文章主要介紹了C# 開發(fā)圓角控件的具體實(shí)現(xiàn),需要的朋友可以參考下2014-02-02
C#中枚舉類型和radiobox關(guān)聯(lián)操作的方法
這篇文章主要介紹了C#中枚舉類型和radiobox關(guān)聯(lián)操作的方法,實(shí)例分析了C#中枚舉類型及與控件關(guān)聯(lián)操作的相關(guān)技巧,需要的朋友可以參考下2015-04-04
C#模擬鏈表數(shù)據(jù)結(jié)構(gòu)的實(shí)例解析
這篇文章主要介紹了C#模擬鏈表數(shù)據(jù)結(jié)構(gòu)的實(shí)例解析,包括隊(duì)雙向鏈表的模擬方法,例子中隊(duì)鏈表的操作也有很好的說(shuō)明,需要的朋友可以參考下2016-04-04

