2014-07-16 10 views
5

son kart olarak "Maça Kral" alıyorum. Kart sınıfım ve kartlardan oluşan bir güverte dizi nesnesim var. Aslında oyunda kullanılacak bir deckInPlay listesini (kartların) doldurmak için güverte dizisini kullandım. Oyun içinde dizi yerine bir liste kullanmayı seçtim çünkü bir liste dinamik olarak boyutu değiştirebilir. Şimdiye kadar kendi problemlerimi çözebiliyordum, ama şimdi bir shuffleDeck yöntemi yarattığım için, gerçekten beni şaşırtan bir konu var. Gördüğünüz gibi, ben iki listeyi kullanıyorumC#: Kendi karıştırıcımı yazdı; C# öğrenmek amacıyla blackjack programı üzerinde çalışıyorum güverte

public void shuffleDeck(int timesToShuffle) 
    { 
     for (int i = 0; i <= timesToShuffle; i++) 
     { 
      for (int j = 0; j < 52; j++) 
      { 
       int randomNumber = rnd.Next(0, deckInPlay.Count - 1); 
       Card randomCard = deckInPlay[randomNumber]; 
       shuffler.Add(randomCard); 
       deckInPlay.RemoveAt(randomNumber); 
      } 

      for (int j = 0; j < 52; j++) 
      { 
       int randomNumber = rnd.Next(0, shuffler.Count - 1); 
       Card randomCard = shuffler[randomNumber]; 
       deckInPlay.Add(randomCard); 
       shuffler.RemoveAt(randomNumber); 
      } 
     } 
    } 

:

en shuffleDeck yöntemi için benim kod ile başlayalım (bayi sınıf yapıcısı RND gibi Rastgele örneği) 'dir deckInPlay listesi Oyunda kullanmak istediğim asıl güverte ve esas olarak kartların karıştırılmasına yardımcı olmak için kullanılan shuffler listesi. Ben, deckInPlay listeden rastgele kartlarını alıp shuffler listesine teker teker eklemek için kod amaçlanan deckInPlay listeden kartları kaldırarak tüm süre. Daha sonra işlemi tersine çevirmek istedim: Shuffler listesinden rastgele kartlar alıp onları deckInPlay listesine ekleyerek, her kartın işlemde karıştırıcı listesinden çıkarılmasını sağladım. İlk bakışta

, shuffler Tamam çalışıyor görünüyor. olursa olsun parametredir ne 1'den daha yüksek bir parametreye sahip shuffleDeck arayarak Ama bir şey aynı kalır zaman daha da iyi çalışır: Maça Kral daima karışık işleminden sonra listedeki son karttır. Spades Kralı sadece ilk güverte dizisi ve deckInPlay listesindeki varsayılan son kart olur. Burada yanlış gittiği

anlamıyorum. Bana bir ipucu verebilirsen çok memnun olurum. Okuduğunuz için teşekkürler!

cevap

7

Sonraki öğenin maksimum değeri özel, yani bu sayıya ulaşamayacağınız anlamına gelir ve daha sonra "Spades Kralı" nızın güvertenizde 52 olduğunu sanıyorum.

+0

teşekkür ederiz! Çok sevindim, çok basitti, ama fark etmediğim için bir dolma gibi hissediyorum. Sorunumu tamamen düzeltdim. Listenin menzilinin dışına çıkmaktan çok korktum, Next'in maksimum değerinin münhasır kuralını unutmuştum. Tekrar teşekkürler! –

+0

Sorun değil, yardımcı olmaktan mutluluk duyuyoruz. –

5

Kullanım

int randomNumber = rnd.Next(0, shuffler.Count); 

rnd.Next Kont 0'dan bir sayı alır - 1 sizin örnekte, ancak üst aralıkta olduğunu hariç.

+0

Cevabınız için teşekkür ederiz. Siz ve Bay Hansen hem doğru hem de çok yardımcı oldunuz! İkiniz de problemimin çözümünü bulmakta ve burada rekor sürede gönderiyorsunuz! Çok teşekkür ederim! –

+0

@ user3675284: Rica ederim –