我想開發一款紙牌遊戲,用戶點擊一個按鈕並自動顯示5張牌。無論如何,現在我正在做一個控制檯應用程序,其中顯示來自兩個Ace的5個字符並顯示5個隨機卡片套裝。但我無法弄清楚如何防止重複一個具有相同值+花色的卡片。誰能幫幫我嗎。這裏是我的代碼如何讓我的紙牌遊戲不會隨機抽取同一張牌兩次?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Array values = Enum.GetValues(typeof(CardValue));
Array symbols = Enum.GetValues(typeof(CardSuit));
Random random = new Random();
Random randomsymbol = new Random();
ArrayList mySymbols = new ArrayList();
ArrayList myAl = new ArrayList();
for (int i = 0; i < 5; i++)
{
CardValue randomBar = (CardValue)values.GetValue(random.Next(values.Length));
myAl.Add(randomBar);}
for (int j = 0; j < 5; j++)
{
CardSuit randomsign = (CardSuit)symbols.GetValue(randomsymbol.Next(symbols.Length));
mySymbols.Add(randomsign);
}
Console.WriteLine("Values:");
PrintValues(myAl);
Console.WriteLine();
PrintSigns(mySymbols);
Console.In.ReadLine();
}
enum CardValue { Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten, Jack, Queen, King, Ace };
enum CardSuit { Hearts, Clubs, Diamonds, Spades };
public static void PrintValues(IEnumerable mylist)
{
foreach (Object obj in mylist)
Console.Write(" {0}", obj);
}
public static void PrintSigns(IEnumerable mySigns)
{
foreach (Object obj1 in mySigns)
Console.Write(" {0}", obj1);
}
}
}
是否值必須是在一個單獨的枚舉的西裝? – MyKuLLSKI 2012-02-02 21:19:00
你到目前爲止嘗試過什麼?顯然你必須跟蹤你以某種方式生成了哪張牌;上面的代碼顯示沒有嘗試這樣做。 – 2012-02-02 21:19:36
此外,關於Random的一個觀察:當它被實例化時(我相信),由該類的一個實例產生的僞隨機數的模式被確定。快速連續創建兩個實例意味着連續調用random.Next()和randomSymbol.Next()會產生非常相似的值;如果選擇的價值和訴訟應該是無關聯的,只需聲明一個「Random」實例並在整個程序中使用它。 – 2012-02-02 21:20:44