10 verschiedene Kugel aus einem Topf ziehen ohne zurücklegen

  • Heyho,

    ich bin dabei für meine Liga 10 verschiedene Teams nach einer beliebingen Reihenfolge durchsortieren zu lassen. Dh. man zieht aus einem Topf mit 10 verschiedenen Kugel nach einander eine Kugel raus und so in der Art soll mein Programm funktionieren.
    Ich habe zwar etwas ansatzweise, nur bei mir kann es vorkommen dass ich eine Kugel 2x die selbe Farbe hat. Schaut selbst mal hier:

    Spoiler anzeigen
    [autoit]

    MsgBox(0, "Haxball Liga Auslosung", "Nun wird die Reihenfolge der Teams ausgelost." )

    [/autoit] [autoit][/autoit] [autoit]

    $11 = "Team A"
    $12 = "Team B"
    $13 = "Team C"
    $14 = "Team D"
    $15 = "Team E"
    $16 = "Team F"
    $17 = "Team G"
    $18 = "Team H"
    $19 = "Team I"
    $20 = "Team J"

    [/autoit] [autoit][/autoit] [autoit]

    $1 = "10"
    $2 = "1"
    while 1
    $9 = Random(1,$1,1)

    [/autoit] [autoit][/autoit] [autoit]

    If $9 = "1" then
    MsgBox(0, "Team " & $2, $11)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If $9 = "2" then
    MsgBox(0, "Team " & $2, $12)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If $9 = "3" then
    MsgBox(0, "Team " & $2, $13)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If $9 = "4" then
    MsgBox(0, "Team " & $2, $14)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If $9 = "5" then
    MsgBox(0, "Team " & $2, $15)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If $9 = "6" then
    MsgBox(0, "Team " & $2, $16)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If $9 = "7" then
    MsgBox(0, "Team " & $2, $17)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If $9 = "8" then
    MsgBox(0, "Team " & $2, $18)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If $9 = "9" then
    MsgBox(0, "Team " & $2, $19)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If $9 = "10" then
    MsgBox(0, "Team " & $2, $20)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    $1 = $1 - "1"
    $2 = $2 + "1"
    If $1 = "0" Then
    exit
    Endif
    WEnd

    [/autoit]
    • Offizieller Beitrag

    Guckst du:

    [autoit]

    Global $aTeams[10] = ['Team A', 'Team B', 'Team C', 'Team D', 'Team E', 'Team F', 'Team G', 'Team H', 'Team I', 'Team J']

    [/autoit][autoit][/autoit][autoit]

    $aRandomIndex = _GetRandomOrder()
    For $i = 0 To UBound($aRandomIndex) -1
    ConsoleWrite($aTeams[$aRandomIndex[$i]] & @CRLF)
    Next

    [/autoit][autoit][/autoit][autoit]

    Func _GetRandomOrder() ; == erstellt ein Array mit Index 0 bis 9 in zufälliger Reihenfolge
    Local $sOrder = '', $tmpRandom, $iCount = 0
    Do
    $tmpRandom = Random(0,9,1)
    If Not StringInStr($sOrder, $tmpRandom) Then
    $iCount += 1
    $sOrder &= $tmpRandom & ' '
    EndIf
    Until $iCount = 10
    Return StringSplit(StringTrimRight($sOrder,1), ' ', 2)
    EndFunc

    [/autoit]
    • Offizieller Beitrag

    Na klar. Brauchst doch nur die Konsolenausgabe in einer GUI ausgeben. Das zufällige Zusammenstellen muß doch nicht erst im Moment der GUI-Ausgabe erfolgen, das erledigst du vorher. Und dann zeigst du nur einen nach dem anderen in der zufälligen Folge in der GUI an.

  • Frage ist nur wie, ich weiß zwar wie ich eine GUI erstelle und dort funktionen einbinde, aber ich weiß nicht wie ich sowas im nachhinein mache ^^
    Wie soll ich das in eine GUI einbinden?

    • Offizieller Beitrag

    Ich habs dir mal auf die Schnelle gebastelt. Aber wenn du selbst mit Grundlagen-GUI Probleme hast, sehe ich schwarz für ein Spiel.

    Spoiler anzeigen
    [autoit]

    Global $aTeams[10] = ['Team A', 'Team B', 'Team C', 'Team D', 'Team E', 'Team F', 'Team G', 'Team H', 'Team I', 'Team J']
    Global $aRandomIndex = _GetRandomOrder()

    [/autoit] [autoit][/autoit] [autoit]

    Global $GUI, $aInTeam[10], $btNext, $iCounter = 0

    [/autoit] [autoit][/autoit] [autoit]

    $GUI = GUICreate('Auslosung der Paarungen', 470, 200)
    $aInTeam[0] = GUICtrlCreateInput('', 10, 20, 150, 20)
    $aInTeam[1] = GUICtrlCreateInput('', 190, 20, 150, 20)
    $aInTeam[2] = GUICtrlCreateInput('', 10, 50, 150, 20)
    $aInTeam[3] = GUICtrlCreateInput('', 190, 50, 150, 20)
    $aInTeam[4] = GUICtrlCreateInput('', 10, 80, 150, 20)
    $aInTeam[5] = GUICtrlCreateInput('', 190, 80, 150, 20)
    $aInTeam[6] = GUICtrlCreateInput('', 10, 110, 150, 20)
    $aInTeam[7] = GUICtrlCreateInput('', 190, 110, 150, 20)
    $aInTeam[8] = GUICtrlCreateInput('', 10, 140, 150, 20)
    $aInTeam[9] = GUICtrlCreateInput('', 190, 140, 150, 20)
    For $i = 0 To 4
    GUICtrlCreateLabel('vs.', 160, ($i*30)+23, 30, 17, $ES_CENTER)
    Next
    $btNext = GUICtrlCreateButton('Nächstes Team', 360, 20, 100, 21)

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    While True
    Switch GUIGetMsg()
    Case -3
    Exit
    Case $btNext
    If $iCounter < 10 Then
    GUICtrlSetData($aInTeam[$iCounter], $aTeams[$aRandomIndex[$iCounter]])
    $iCounter += 1
    EndIf
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _GetRandomOrder() ; == erstellt ein Array mit Index 0 bis 9 in zufälliger Reihenfolge
    Local $sOrder = '', $tmpRandom, $iCount = 0
    Do
    $tmpRandom = Random(0,9,1)
    If Not StringInStr($sOrder, $tmpRandom) Then
    $iCount += 1
    $sOrder &= $tmpRandom & ' '
    EndIf
    Until $iCount = 10
    Return StringSplit(StringTrimRight($sOrder,1), ' ', 2)
    EndFunc

    [/autoit]

  • funktioniert nicht, zeigt mir ein error auf Line 18 an.

  • €: Okay habs, musste nur die Variable am Ende durch $GUI ersetzen. Danke! :)