2010-10-11 14 views
0

Ce programme C# est supposé être un programme de blackjack mais je dois « SHUFFLE » la carte et afficher uniquement la « MAIN »C# Blackjack - Besoin d'aide

Le reste, je pense que je peux gérer ... quelqu'un peut-il Aidez moi?

+2

Sons comme quelqu'un triche sur sa tâche de programmation.Je suis sûr que vous allez grandir pour devenir un millionnaire de toute façon ... – danijels

+1

Si ce sont des devoirs, pouvons-nous retag en tant que tel? – jcolebrand

+0

'public static int' demande des problèmes. Soit public static readonly int ou public public int. Les constats sont statiques par défaut. –

Répondre

0

Je pense qu'il a déjà été couvert here.

+3

Vous auriez dû ajouter un commentaire plutôt qu'une réponse. – ChrisF

+0

@ChrisF: Je serais d'accord pour dire que cela ressemble plus à un commentaire, mais connaissez-vous des lignes directrices réelles quant à ce qui fait un commentaire plutôt qu'une réponse? J'ai essayé de le chercher sur Meta mais je n'ai rien trouvé de convenable. – Patrick

+0

@Patrick - peut-être nous avons besoin de quelques-uns à aller avec la question demandant des directives (qui est le lien m'échappe maintenant) – ChrisF

1

Une façon de mélanger est de créer un nouveau tableau et déplacer les cartes dans ce tableau dans un ordre aléatoire

List<Card> unshuffled = new List<Card>(pack); 
pack = new Card[NUM_CARDS]; 
Random r = new Random() 
for(int card = 0; card < NUM_CARDS; card++) 
{ 
    pack[card] = unshuffled[r.Next(0, unshuffled.Count -1)]; 
    unshuffled.remove(pack[card]); 
} 

Vous voudrez peut-être faire l'instance mondiale, Random que la création d'une nouvelle chaque fois aléatoire réduit l'entropie quelque peu. Cela peut ne pas être important si vous ne mélangez pas beaucoup.

+0

Merci beaucoup .. cela va aider: D cela fonctionne – Sydney

1

Je recommande commutant chaque élément à un autre hasard, Heres comment:

private void switchElements(Card[] pack, int nr_1, int nr_2) { 
    Card temp = pack[nr_1]; 
    pack[nr_1] = pack[nr_2]; 
    pack[nr_2] = temp; 
} 

public void shuffle(Card[] pack) { 
    for (int i = pack.length - 1; i > 0; i--) 
     switchElements(pack, i,random.Next(0,i)); 
} 
+1

Um, ne serait-ce pas garantir que la dernière carte en pack [] avant d'appeler shuffle ne peut pas être la dernière carte en pack [] après shuffle? –

+0

Ceci est aussi simple que: choisissez une carte aléatoire et placez-la sur le pont 2, jusqu'à ce que vous ayez fait cela pour toutes les cartes du deck 1. Seule différence: il n'y a pas de deck 2, les cartes sont stockées sur le deck 1 C'est également ainsi que fonctionne Java ** Collections.shuffle() **. – Margus

1

Vous pouvez « shuffle » un paquet avec quelque chose d'aussi simple que:

var shuffled = pack.OrderBy(c => random.NextDouble()); 
+0

Cela pourrait-il provoquer une boucle infinie? Cela dépend du type de tri que LINQ utilise ici. – Bryan

+0

Non, cela ne provoquera pas une boucle infinie - ce n'est certainement pas une solution optimale non plus, mais étant donné le niveau des devoirs assignés (bien que la source originale semble avoir été supprimée), il aurait été simple à implémenter Fisher-Yates –