Karten an spieler verteilen - zufällig und ohne wiederholung

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von Visual_Prog.

    Karten an spieler verteilen - zufällig und ohne wiederholung

    Moin,

    ich möchte gerne 8 karten an je 4 spieler verteilen - zufällig und ohne wiederholung. So bekommt jeder spieler also 2 karten.

    Ich möchte den Weg versuchen über Sorteddictionary bzw. über keyvaluepair (of integer, string).

    In der Klasse person habe ich folgende Eigenschaft deklariert.

    VB.NET-Quellcode

    1. Public _eigeneKarten As KeyValuePair(Of Integer, String)
    2. Public Property EigeneKarten As KeyValuePair(Of Integer, String)
    3. Get
    4. Return _eigeneKarten
    5. End Get
    6. Set(value As KeyValuePair(Of Integer, String))
    7. _eigeneKarten = value
    8. End Set
    9. End Property

    In der Mainform wurde ein sorteddictionary mit werten befüllt (dabei liegen die integer mithilfe des sorteddictionary chronologisch vor, aber die string, also die karten, sind in einer zufälligen reihnefolge eingeordnet. Wie ich die zufällig geordnet habe, liegt hier der Übersicht halber nicht vor.)

    VB.NET-Quellcode

    1. Dim dic As New SortedDictionary(Of Integer, String)
    2. dic.Add(_kartenlisteübernummern(0), karte1._name)
    3. dic.Add(_kartenlisteübernummern(1), karte2._name)
    4. dic.Add(_kartenlisteübernummern(2), karte3._name)
    5. dic.Add(_kartenlisteübernummern(3), karte4._name)
    6. dic.Add(_kartenlisteübernummern(4), karte5._name)
    7. dic.Add(_kartenlisteübernummern(5), karte6._name)
    8. dic.Add(_kartenlisteübernummern(6), karte7._name)
    9. dic.Add(_kartenlisteübernummern(7), karte8._name)


    Nun soll "walter" seine zwei karten durch assoziation zugeordnet bekommen, gerne in einer listbox angezeigt. weiß nur nicht wie ich das nun umsetzen kann.

    _walter.EigeneKarten = ?

    ..>die eigenschaft EIgeneKarte wurde ja als keyvaluepair deklariert.
    man müsste nur irgendwie an den index des sorteddictionary drankommen und diesen der eigenschaft zuordnen. Wäre sowas in der art möglich?

    danke lg
    keine Ahnung, was du mit dem Sorted-Dingens willst.

    Es gibt einen Algorithmus fürs Mischen von Auflistungen - hier meine Implementierung:

    VB.NET-Quellcode

    1. Private _Rnd As New Random
    2. ''' <summary> Fisher-Yates-Mixing up the itms. On seed&lt;0 the random seed is used </summary>
    3. <Extension(), DebuggerStepThrough()> _
    4. Public Sub Shuffle(itms As IList, Optional seed As Integer = -1)
    5. If seed >= 0 Then _Rnd = New Random(seed)
    6. For i = itms.Count - 1 To 1 Step -1
    7. itms.Swap(i, _Rnd.Next(i + 1))
    8. Next
    9. End Sub
    10. <Extension(), DebuggerStepThrough()> _
    11. Public Sub Swap(items As IList, I1 As Integer, I2 As Integer)
    12. Dim Tmp = items(I1)
    13. items(I1) = items(I2)
    14. items(I2) = Tmp
    15. End Sub
    Eine List(Of Dingens) könnte man damit durchschütteln - ein SortedDingens natürlich nicht - ist ja sorted.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()

    @Visual_Prog Oder dieser hier:

    VB.NET-Quellcode

    1. Dim OriginalList = {0,1,2,3,4,5,6,7}
    2. Dim rnd = New Random()
    3. Dim RandomizedList = OriginalList.OrderBy(Function(x) rnd.Next()).ToList
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!