2016-04-03 29 views
0

Bir poker projesi üzerinde çalışıyorum. Herhangi bir kopya olmadan bir dosyadan rasgele kartlar oluşturmaya çalışıyorum. 5 kartlı tip oyun gibi bir şey, ben sadece bir çeşit 5 ya da aynı paket içinde iki kart bir çift elde etmek mümkün olmasını istemiyorum. İşte Rastgele resim oluşturucu kopya olmadan C#

ben dosyadan görüntüleri çağrı nereden rastgele görüntü yöntemi açıkçası benim kod

for (int i = 0; i < 5; i++) 
{ 
     CardDisplay[i] = getRandomImage(); 
} 

if (!IsPostBack) 
{ 
     Discard.Enabled = false; 

     PokerCard1.Enabled = false; 
     PokerCard2.Enabled = false; 
     PokerCard3.Enabled = false; 
     PokerCard4.Enabled = false; 
     PokerCard5.Enabled = false; 

     Hold1.Visible = false; 
     Hold2.Visible = false; 
     Hold3.Visible = false; 
     Hold4.Visible = false; 
     Hold5.Visible = false; 

     PokerCard1.ImageUrl = Path.Combine("/My_Portfolio/App_Themes/Portfolio/Images/Poker/", CardDisplay[0]); 
     PokerCard2.ImageUrl = Path.Combine("/My_Portfolio/App_Themes/Portfolio/Images/Poker/", CardDisplay[1]); 
     PokerCard3.ImageUrl = Path.Combine("/My_Portfolio/App_Themes/Portfolio/Images/Poker/", CardDisplay[2]); 
     PokerCard4.ImageUrl = Path.Combine("/My_Portfolio/App_Themes/Portfolio/Images/Poker/", CardDisplay[3]); 
     PokerCard5.ImageUrl = Path.Combine("/My_Portfolio/App_Themes/Portfolio/Images/Poker/", CardDisplay[4]); 
} 

public string getRandomImage() 
{ 
    string[] fileNames = Directory.GetFiles(MapPath("/My_Portfolio/App_Themes/Portfolio/Images/Poker/")); 
    string CardToShow = fileNames[rand.Next(fileNames.Length)]; 
    return Path.GetFileName(CardToShow); 
} 

bir bakmak. İşte

o

enter image description here
teşekkür neye benzediğini bir ekran görüntüsü olduğunu ve herhangi bir yardım büyük

+2

10 En basit yol, daha önce kazanılmış olan kartlarda iade değerinin bulunmadığını kontrol etmektir. Sağlam bir algoritma, tüm kartları bir diziye koyar, karıştırır ve ilk beş kartı alır. –

+4

Gerçek dünyada, karıştırdığınız bir kart destesi var ve daha sonra destenin tepesinden ilgileniyorsunuz. Muhtemelen bu modele bağlı kalmalısın. –

+0

Bence Preston'u dinlemeli ve süreci yeniden düşünme/"dışsallaştırma" yerine gerçek dünya sürecini taklit etmelisiniz. Daha sonra yardımcı olabilir. Örneğin. her kart bir nesne ise, "konum" özelliğine veya benzerine sahip olabilir (hangi oyuncu tutuyorsa, ya da atılan küme içinde ya da güvertede, vs.). Kartlar yeniden karıştırılırsa (pokerde bunun olup olmadığını bilmiyorum), atılan destedeki tüm öğeleri tekrar rastgele seçersiniz ve güverte, vb. Hiçbir kart kalmazdı, bilirsiniz. – Jonathan

cevap

0

tüm akımı tutan bir değişken oluşturmak olacaktır Bunu başarmak için basit bir yol mutluluk duyacağız "seçer" ve senin getRandomImage yönteminden böyle bir şey bir kart iade etmeden önce bu karşı kontrol edin: Ben senin filenam çıkarılan

private List<int> _elections = new List<int>(); 

private string[] _fileNames = Directory.GetFiles(MapPath("/My_Portfolio/App_Themes/Portfolio/Images/Poker/")); 

public string getRandomImage() 
{ 
    int currentPick; 
    while (true){ 
     currentPick = rand.Next(_fileNames.Length); 
     if (!_elections.Contains(currentPick)){ 
      _elections.Add(currentPick); 
      break; 
     } 
    } 
    string CardToShow = _fileNames[currentPick]; 
    return Path.GetFileName(CardToShow); 
} 

Bildirimi es değişkeni bu yüzden getRandomImage yöntemine her bastığınızda dosyalarınızı yeniden hesaplamıyorsunuz.

+0

Yardımlarınız için teşekkürler, takdir ettiğim gibi. Kodu, sahip olduklarınızdan daha fazlasına değiştirdim, ama yine de bazı kopyalarım var, belki hemen değil ama birazdan sonra. Belki herhangi bir yardım için başka bir seçenek var –