Kartenspiel

  • Hallo,
    ich möchte ein Karten Spiel programmieren, und bin das erste mal mit Random im umgang, aber ich finde meinen Fehler nicht.
    Jede Zahl soll in ein Array und anschließend geguckt werden ob die Zahl schon gezogen wurde oder nicht.

    [autoit]

    #include <GUIConstants.au3>
    #include <Array.au3>

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

    Dim $Array [2]
    $Array[0]= 33
    $Array[1]= 33
    $Form1 = GUICreate("Form1", 458, 276, 193, 125)
    $Edit1 = GUICtrlCreateEdit("", 0, 0, 457, 169)
    $Button1 = GUICtrlCreateButton("Karten Geben", 104, 184, 235, 81, 0)
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    $Random=Random (1,32,1)
    For $iX=1 To UBound ($Array)
    If $Random = $Array[$iX] Then
    MsgBox (0,"Fehler","Diese Karte wurde bereits gegeben.")
    Else
    GUICtrlSetData ($Edit1,GUICtrlRead ($Edit1) & $Random&" ")
    _ArrayAdd ($Array,$Random)
    EndIf
    Next
    EndSwitch
    WEnd

    [/autoit]

    Einmal editiert, zuletzt von Hamukau (25. Januar 2011 um 15:20)

  • Ich würde es so machen, dann muss nicht jedesmal das Array komplett durchsucht werden ;).

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <Array.au3>

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

    Global $aRemaining[33]
    $aRemaining[0] = 32
    For $i = 1 To $aRemaining[0]
    $aRemaining[$i] = $i
    Next

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

    $Form1 = GUICreate("Form1", 458, 276, 193, 125)
    $Edit1 = GUICtrlCreateEdit("", 0, 0, 457, 169)
    $Button1 = GUICtrlCreateButton("Karten Geben", 104, 184, 235, 81, 0)
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    If $aRemaining[0] > 0 Then
    $iRandom = Random(1, $aRemaining[0], 1)
    If Not $iRandom Then $iRandom = 1
    GUICtrlSetData($Edit1, GUICtrlRead($Edit1) & StringFormat("%02d", $aRemaining[$iRandom]) & " ")
    _ArrayDelete($aRemaining, $iRandom)
    $aRemaining[0] -= 1
    Else
    MsgBox(64, "Info", "Alle Karten verteilt")
    _Reset()
    GUICtrlSetData($Edit1, "")
    EndIf
    EndSwitch
    WEnd

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

    Func _Reset()
    ReDim $aRemaining[33]
    $aRemaining[0] = 32
    For $i = 1 To $aRemaining[0]
    $aRemaining[$i] = $i
    Next
    EndFunc ;==>_Reset

    [/autoit]