• SRY SRY SRY!!!! Hatte diese und letzte Woche verdammt viel Stress wegen Fahrschule! Samstag kommt die Auswertung online!

    Asche auf mein Haupt, ich bin untröstlich ;)

    Walle

    Ohne Worte ^^ Aber ich bin lieber still ich hab ja nichtmal geschafft das Spiel zuende zu bringen -_-

    MfG

    akira2012

    ***---____---Wer RechtSCHRAIBfehler findet der darf Sie behalLTEN!---___---***

  • Hm naja morgen ist wieder Samstag vielleicht klappts ja bis dahin - aber ich glaub ich programmier an meinem Spiel auch mal weiter - vielleicht bin ich ja fertig bevor Walle die Auswertung der beiden Spiele fertig hat xD

    MfG

    akira2012

    ***---____---Wer RechtSCHRAIBfehler findet der darf Sie behalLTEN!---___---***

  • Naja ich denke vorher passiert hier auch nichts mehr :P *SCHERZ* Naja falls wirklich nichts passiert poste ich meines auch noch - hehe

    _________________________________________

    MfG

    akira2012

    ***---____---Wer RechtSCHRAIBfehler findet der darf Sie behalLTEN!---___---***

  • natürlich sollt ihr eure spiele fertig machen!
    vielleicht schaffen es blubkuh und gun-food auch noch ;)

    ich hab übrigens mein spiel etwas verändert, sodaß man nun bei einem treffer an der reihe bleibt.

    änderungen:

    Spoiler anzeigen


    bei zeile 20
    vorher:

    [autoit]

    _KI()
    GUICtrlSetOnEvent($NewBut, "_New")
    $Turn = 1

    [/autoit]


    nachher

    [autoit]

    If _KI() <> True Then $Turn = 1
    GUICtrlSetOnEvent($NewBut, "_New")

    [/autoit]


    bei zeile 87
    vorher

    [autoit]

    _Shot($Temp[0], $Temp[1], 1)
    GUICtrlSetData($Info, 'Du bist an der Reihe...')

    [/autoit]


    nachher

    [autoit]

    If _Shot($Temp[0], $Temp[1], 1)= True Then
    Return True
    Else
    GUICtrlSetData($Info, 'Du bist an der Reihe...')
    Return False
    EndIf

    [/autoit]


    bei zeile 326 kommt noch ein "Return True" rein

    bei zeile 483 "$Turn = 1" statt "$Turn = 0"


    geänderte version:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <StaticConstants.au3>
    #include <EditConstants.au3>

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

    Opt("GUIOnEventMode", 1)
    Opt("TrayIconDebug", 1)

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

    Global Const $Water = 0x0000AA, $Ship = 0x00FF00, $Hit = 0xDD11133, $Tried = 0x000066, $Mark = 0x0000AB
    Global $F_Num = 10, $F_FLD[4][$F_Num + 1][$F_Num + 1], $Ras, $Ras1, $Ra3, $Play = False, $Action, $Turn = 0, $Info, $StartBut, $DiagBox
    Global $Main, $SizeLab, $S_Gra[6], $S_Count[6], $F_Alt[6][2], $Diagonal = False, $NewBut

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

    _CreateGui()
    _New()

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

    While 1
    If $Play Then
    If $Turn = 0 Then
    GUICtrlSetOnEvent($NewBut, "")
    If _KI() <> True Then $Turn = 1
    GUICtrlSetOnEvent($NewBut, "_New")
    Else
    Do
    $Action = GUIGetCursorInfo($Main)
    If $Action[3] And ($Action[4] > $F_FLD[0][0][0]) And ($Action[4] < $F_FLD[0][0][1]) Then _SetFlag($Action[4])
    Sleep(5)
    Until $Action[2] = 1 Or Not $Play
    If $Action[2] = 1 And $Play Then
    While $Action[2] = 1
    $Action = GUIGetCursorInfo($Main)
    Sleep(5)
    WEnd
    If ($Action[4] > $F_FLD[0][0][0]) And ($Action[4] < $F_FLD[0][0][1]) Then _Move($Action[4])
    EndIf
    EndIf
    If $Play Then
    If _Winner() = 2 Then
    GUISetBkColor(0x666666, $Main)
    GUICtrlSetData($Info, 'Computer hat gewonnen!!!')
    $Play = False
    _Refresh()
    _Beep(4)
    GUISetBkColor(0x100500, $Main)
    ElseIf _Winner() = 1 Then
    GUISetBkColor(0x666666, $Main)
    GUICtrlSetData($Info, 'Gratuliere, Du hast gewonnen!!!')
    $Play = False
    _Refresh()
    _Beep(3)
    GUISetBkColor(0x100500, $Main)
    EndIf
    EndIf
    EndIf
    Sleep(10)
    WEnd

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

    #region KI
    Func _KI()
    Local $Temp[2] = [0, 0], $Temp1, $Timer = TimerInit()
    GUICtrlSetData($Info, 'Computer ertüfftelt einen genialen Spielzug...')
    _EndMark()
    For $i = 1 To $F_Num
    For $j = 1 To $F_Num
    If _Mark($i, $j, $i + 1, $j) Then
    $Temp = _Find($i, $j, $i + 1, $j)
    If $Temp[0] <> 0 Then ExitLoop
    EndIf
    If _Mark($i, $j, $i, $j + 1) Then
    $Temp = _Find($i, $j, $i, $j + 1)
    If $Temp[0] <> 0 Then ExitLoop
    EndIf
    If _Check($i, $j) = $Hit Then
    $Temp = _Dir($i, $j)
    If $Temp[0] <> 0 Then ExitLoop
    EndIf
    Next
    If $Temp[0] <> 0 Then ExitLoop
    Next
    If $Temp[0] = 0 Then $Temp = _Raster()
    If $Temp[0] = 0 Then
    $Temp = _GetFree()
    EndIf
    If $Temp[0] = 0 Then $Temp = _Random()
    While TimerDiff($Timer) < 500
    Sleep(10)
    WEnd
    If _Shot($Temp[0], $Temp[1], 1)= True Then
    Return True
    Else
    GUICtrlSetData($Info, 'Du bist an der Reihe...')
    Return False
    EndIf
    EndFunc ;==>_KI

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

    Func _Raster()
    Local $Ret[2] = [0, 0], $X, $Y, $Temp
    For $i = 1 To 500
    Do
    $X = Random(1, $F_Num, 1)
    $Y = Random(1, $F_Num, 1)
    Until _Mod($X, $Y)
    $Temp = _Check($X, $Y)
    If ($Temp <> 0) And ($Temp <> $Hit) And ($Temp <> $Mark) And ($Temp <> $Tried) Then
    $Ret[0] = $X
    $Ret[1] = $Y
    ExitLoop
    EndIf
    Next
    Return $Ret
    EndFunc ;==>_Raster

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

    Func _Mod($X, $Y)
    If ($S_Count[3] = 0) And ($S_Count[4] = 0) And ($S_Count[5] = 0) Then
    If Mod($X + $Y, 2) = 0 Then Return True
    ElseIf (($S_Count[4] > 0) And ($S_Count[5] > 0)) Or ($S_Count[5] > 0) Then
    If (Mod($X * 2 + $Y, 2.5) = $Ras1) And (Mod($X + $Y, 1) = 0) Then Return True
    ElseIf ($S_Count[3] > 0) And ($S_Count[4] = 0) And ($S_Count[5] = 0) Then
    If (Mod($X+$Y,3)=$Ra3) Then Return True
    Else
    If (Mod($Y, 4) = 0) And (Mod($X + $Y + $Ras, 4) = 0) Then Return True
    If (Mod($Y, 4) = 1) And (Mod($X + $Y + $Ras, 4) = 0) Then Return True
    If (Mod($Y, 4) = 2) And (Mod($X + $Y + $Ras, 4) = 3) Then Return True
    If (Mod($Y, 4) = 3) And (Mod($X + $Y + $Ras, 4) = 1) Then Return True
    EndIf
    Return False
    EndFunc ;==>_Mod

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

    Func _Random()
    Local $Ret[2] = [0, 0], $X, $Y, $Temp
    Do
    $X = Random(1, $F_Num, 1)
    $Y = Random(1, $F_Num, 1)
    $Temp = _Check($X, $Y)
    Until ($Temp <> 0) And ($Temp <> $Hit) And ($Temp <> $Tried)
    $Ret[0] = $X
    $Ret[1] = $Y
    Return $Ret
    EndFunc ;==>_Random

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

    Func _GetBySize($Size)
    Local $S = 0, $S1 = 0
    For $i = 1 To $F_Num
    For $j = 1 To $F_Num
    $S1 = 0
    For $k = 0 To $Size - 1
    If _Check($i + $k, $j) = $Hit Then
    $S1 += 1
    Else
    ExitLoop
    EndIf
    Next
    If ($S1 = $Size) And (_Check($i - 1, $j) <> $Hit) And (_Check($i + $Size, $j) <> $Hit) Then $S += 1
    $S1 = 0
    For $k = 0 To $Size - 1
    If _Check($i, $j + $k) = $Hit Then
    $S1 += 1
    Else
    ExitLoop
    EndIf
    Next
    If ($S1 = $Size) And (_Check($i, $j - 1) <> $Hit) And (_Check($i, $j + $Size) <> $Hit) Then $S += 1
    Next
    Next
    If $S < $S_Count[$Size] Then Return True
    Return False
    EndFunc ;==>_GetBySize

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

    Func _GetFree()
    Local $Size, $Ret[2] = [0, 0], $S = 0, $S1, $Temp, $X, $Y, $Cord[$F_Num ^ 2][3], $CorMax = 0
    Select
    Case _GetBySize(5)
    $Size = 5
    Case _GetBySize(4)
    $Size = 4
    Case _GetBySize(3)
    $Size = 3
    Case _GetBySize(2)
    $Size = 2
    Case Else
    $Ret[0] = 0
    Return $Ret
    EndSelect
    For $i = 1 To $F_Num
    For $j = 1 To $F_Num
    $S1 = 0
    For $k = 1 To $F_Num - $i
    $Temp = _Check($i + $k, $j)
    If ($Temp <> 0) And ($Temp <> $Hit) And ($Temp <> $Mark) And ($Temp <> $Tried) Then
    $S1 += 1
    Else
    ExitLoop
    EndIf
    Next
    If ($S1 = $S) And ($S > 1) Then
    $CorMax += 1
    $Cord[$CorMax][0] = $i + Round($S / 2)
    $Cord[$CorMax][1] = $j
    $Cord[$CorMax][2] = $S
    EndIf
    If $S1 > $S Then
    $S = $S1
    $CorMax = 1
    $Cord[1][0] = $i + Round($S / 2)
    $Cord[1][1] = $j
    $Cord[$CorMax][2] = $S
    EndIf
    $Temp = _Check($Cord[$CorMax][0], $Cord[$CorMax][1])
    If ($S < $Size) Or ($Temp = 0) Or ($Temp = $Hit) Or ($Temp = $Mark) Or ($Temp = $Tried) Then $CorMax -= 1
    If $CorMax < 0 Then $CorMax = 0
    $S1 = 0
    For $k = 1 To $F_Num - $j
    $Temp = _Check($i, $j + $k)
    If ($Temp <> 0) And ($Temp <> $Hit) And ($Temp <> $Mark) And ($Temp <> $Tried) Then
    $S1 += 1
    Else
    ExitLoop
    EndIf
    Next
    If ($S1 = $S) And ($S > 1) Then
    $CorMax += 1
    $Cord[$CorMax][0] = $i
    $Cord[$CorMax][1] = $j + Round($S / 2)
    $Cord[$CorMax][2] = $S
    EndIf
    If $S1 > $S Then
    $S = $S1
    $CorMax = 1
    $Cord[1][0] = $i
    $Cord[1][1] = $j + Round($S / 2)
    $Cord[$CorMax][2] = $S
    EndIf
    $Temp = _Check($Cord[$CorMax][0], $Cord[$CorMax][1])
    If ($S < $Size) Or ($Temp = 0) Or ($Temp = $Hit) Or ($Temp = $Mark) Or ($Temp = $Tried) Then $CorMax -= 1
    If $CorMax < 0 Then $CorMax = 0
    Next
    Next
    If $CorMax < 1 Then Return $Ret
    For $i = 1 To 10
    $Temp1 = Random(1, $CorMax, 1)
    $Temp = _Check($Cord[$Temp1][0], $Cord[$Temp1][1])
    If ($S >= $Size) And ($Temp <> 0) And ($Temp <> $Hit) And ($Temp <> $Mark) And ($Temp <> $Tried) Then
    $Ret[0] = $Cord[$Temp1][0]
    $Ret[1] = $Cord[$Temp1][1]
    ExitLoop
    EndIf
    Next
    Return $Ret
    EndFunc ;==>_GetFree

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

    Func _Dir($X, $Y)
    Local $Ret[2] = [0, 0], $CO = 0, $CU = 0, $CL = 0, $CR = 0, $Temp, $O = True, $U = True, $L = True, $R = True, $D = 4
    While $O Or $U Or $L Or $R
    If $O Then
    $Temp = _Check($X - 1 - $CO, $Y)
    If ($Temp = 0) Or ($Temp = $Hit) Or ($Temp = $Mark) Or ($Temp = $Tried) Then
    $O = False
    Else
    $CO += 1
    EndIf
    EndIf
    If $U Then
    $Temp = _Check($X + 1 + $CU, $Y)
    If ($Temp = 0) Or ($Temp = $Hit) Or ($Temp = $Mark) Or ($Temp = $Tried) Then
    $U = False
    Else
    $CU += 1
    EndIf
    EndIf
    If $L Then
    $Temp = _Check($X, $Y - 1 - $CL)
    If ($Temp = 0) Or ($Temp = $Hit) Or ($Temp = $Mark) Or ($Temp = $Tried) Then
    $L = False
    Else
    $CL += 1
    EndIf
    EndIf
    If $R Then
    $Temp = _Check($X, $Y + 1 + $CR)
    If ($Temp = 0) Or ($Temp = $Hit) Or ($Temp = $Mark) Or ($Temp = $Tried) Then
    $R = False
    Else
    $CR += 1
    EndIf
    EndIf
    WEnd
    If $CO = 0 And $CU = 0 And $CL = 0 And $CR = 0 Then Return $Ret
    If ($CO + $CU) > ($CL + $CR) Then
    $D = 1
    If $CO > $CU Then $D = 0
    If $CO = $CU Then $D = Random(0, 1, 1)
    ElseIf ($CO + $CU) < ($CL + $CR) Then
    $D = 3
    If $CL > $CR Then $D = 2
    If $CL = $CR Then $D = Random(2, 3, 1)
    Else
    For $k = 1 To 50
    $D = Random(0, 3, 1)
    If ($D = 0 And $CO > 0) Or ($D = 1 And $CU > 0) Or ($D = 2 And $CL > 0) Or ($D = 3 And $CR > 0) Then ExitLoop
    Next
    EndIf
    Switch $D
    Case 0
    $Ret[0] = $X - 1
    $Ret[1] = $Y
    Case 1
    $Ret[0] = $X + 1
    $Ret[1] = $Y
    Case 2
    $Ret[0] = $X
    $Ret[1] = $Y - 1
    Case 3
    $Ret[0] = $X
    $Ret[1] = $Y + 1
    EndSwitch
    Return $Ret
    EndFunc ;==>_Dir

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

    Func _Shot($X, $Y, $W)
    If Not $Play Then Return
    GUICtrlSetBkColor($F_FLD[$W][$X][$Y], 0xFFFFFF)
    Sleep(80)
    If $F_FLD[$W + 2][$X][$Y] = $Ship Then
    $F_FLD[$W + 2][$X][$Y] = $Hit
    GUICtrlSetBkColor($F_FLD[$W][$X][$Y], $F_FLD[$W + 2][$X][$Y])
    _Beep(1)
    Return True
    EndIf
    If $F_FLD[$W + 2][$X][$Y] = $Water Then
    $F_FLD[$W + 2][$X][$Y] = $Tried
    GUICtrlSetBkColor($F_FLD[$W][$X][$Y], $F_FLD[$W + 2][$X][$Y])
    _Beep(2)
    EndIf
    If $F_FLD[$W + 2][$X][$Y] = $Mark Then
    $F_FLD[$W + 2][$X][$Y] = $Tried
    GUICtrlSetBkColor($F_FLD[$W][$X][$Y], $F_FLD[$W + 2][$X][$Y])
    _Beep(2)
    EndIf
    EndFunc ;==>_Shot

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

    Func _Find($X, $Y, $X1, $Y1)
    Local $Temp, $Ret[2] = [0, 0]
    If $X = $X1 Then
    $Temp = _Check($X, $Y - 1)
    If ($Temp <> 0) And ($Temp <> $Hit) And ($Temp <> $Mark) And ($Temp <> $Tried) Then
    $Ret[0] = $X
    $Ret[1] = $Y - 1
    Return $Ret
    EndIf
    $Temp = _Check($X, $Y + 2)
    If ($Temp <> 0) And ($Temp <> $Hit) And ($Temp <> $Mark) And ($Temp <> $Tried) Then
    $Ret[0] = $X
    $Ret[1] = $Y + 2
    Return $Ret
    EndIf
    ElseIf $Y = $Y1 Then
    $Temp = _Check($X - 1, $Y)
    If ($Temp <> 0) And ($Temp <> $Hit) And ($Temp <> $Mark) And ($Temp <> $Tried) Then
    $Ret[0] = $X - 1
    $Ret[1] = $Y
    Return $Ret
    EndIf
    $Temp = _Check($X + 2, $Y)
    If ($Temp <> 0) And ($Temp <> $Hit) And ($Temp <> $Mark) And ($Temp <> $Tried) Then
    $Ret[0] = $X + 2
    $Ret[1] = $Y
    Return $Ret
    EndIf
    EndIf
    Return $Ret
    EndFunc ;==>_Find

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

    Func _Check($X, $Y)
    If ($X < 1) Or ($X > $F_Num) Or ($Y < 1) Or ($Y > $F_Num) Then Return 0
    Return $F_FLD[3][$X][$Y]
    EndFunc ;==>_Check

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

    Func _Mark($X, $Y, $X1, $Y1)
    If ($X < 1) Or ($X > $F_Num) Or ($X1 < 1) Or ($X1 > $F_Num) Or ($Y < 1) Or ($Y > $F_Num) Or ($Y1 < 1) Or ($Y1 > $F_Num) Then Return False
    If ($F_FLD[3][$X][$Y] = $Hit) And ($F_FLD[3][$X1][$Y1] = $Hit) Then
    If $X = $X1 Then
    _SetMark($X - 1, $Y)
    _SetMark($X - 1, $Y1)
    _SetMark($X + 1, $Y)
    _SetMark($X + 1, $Y1)
    ElseIf $Y = $Y1 Then
    _SetMark($X, $Y - 1)
    _SetMark($X1, $Y - 1)
    _SetMark($X, $Y + 1)
    _SetMark($X1, $Y + 1)
    EndIf
    Return True
    EndIf
    EndFunc ;==>_Mark

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

    Func _EndMark()
    _MarkEnd(5, 0)
    If _GetBySize(5) = False Then _MarkEnd(4, 0)
    If (_GetBySize(5) = False) And (_GetBySize(4) = False) Then _MarkEnd(3, 0)
    If (_GetBySize(5) = False) And (_GetBySize(4) = False) And (_GetBySize(3) = False) Then _MarkEnd(2, 0)
    _MarkEnd(4, 1)
    _MarkEnd(3, 1)
    _MarkEnd(2, 1)
    EndFunc ;==>_EndMark

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

    Func _MarkEnd($Size, $EX)
    Local $S = 0, $S1 = 0, $Temp
    For $i = 1 To $F_Num
    For $j = 1 To $F_Num
    $S = 0
    $S1 = 0
    For $k = -1 To $Size
    $Temp = _Check($i + $k, $j)
    If ($k > -1) And ($k < $Size) And ($Temp = $Hit) Then $S += 1
    If ($EX = True) And (($k = -1) Or ($k = $Size)) And (($Temp = 0) Or ($Temp = $Mark) Or ($Temp = $Tried)) Then $S1 += 1
    Next
    If (($Size = $S) And ($EX = False)) Or (($S1 = 2) And ($Size = $S) And ($EX = True)) Then
    If $Diagonal Then _SetMark($i - 1, $j - 1)
    _SetMark($i - 1, $j)
    If $Diagonal Then _SetMark($i - 1, $j + 1)
    If $Diagonal Then _SetMark($i + $Size, $j - 1)
    _SetMark($i + $Size, $j)
    If $Diagonal Then _SetMark($i + $Size, $j + 1)
    EndIf
    $S = 0
    $S1 = 0
    For $k = -1 To $Size
    $Temp = _Check($i, $j + $k)
    If ($k > -1) And ($k < $Size) And ($Temp = $Hit) Then $S += 1
    If ($EX = True) And (($k = -1) Or ($k = $Size)) And (($Temp = 0) Or ($Temp = $Mark) Or ($Temp = $Tried)) Then $S1 += 1
    Next
    If (($Size = $S) And ($EX = False)) Or (($S1 = 2) And ($Size = $S) And ($EX = True)) Then
    If $Diagonal Then _SetMark($i - 1, $j - 1)
    _SetMark($i, $j - 1)
    If $Diagonal Then _SetMark($i + 1, $j - 1)
    If $Diagonal Then _SetMark($i - 1, $j + $Size)
    _SetMark($i, $j + $Size)
    If $Diagonal Then _SetMark($i + 1, $j + $Size)
    EndIf
    Next
    Next
    EndFunc ;==>_MarkEnd

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

    Func _SetMark($X, $Y)
    If ($X < 1) Or ($X > $F_Num) Or ($Y < 1) Or ($Y > $F_Num) Then Return
    If $F_FLD[3][$X][$Y] = $Water Then $F_FLD[3][$X][$Y] = $Mark
    EndFunc ;==>_SetMark

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

    Func _Winner()
    Local $Com = True, $Usr = True
    For $i = 1 To $F_Num
    For $j = 1 To $F_Num
    If $F_FLD[2][$i][$j] = $Ship Then $Com = False
    If $F_FLD[3][$i][$j] = $Ship Then $Usr = False
    Next
    Next
    If $Usr Then
    Return 2
    ElseIf $Com Then
    Return 1
    Else
    Return 0
    EndIf
    EndFunc ;==>_Winner
    #endregion KI

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

    Func _Move($Field)
    Local $X = 0, $Y = 0
    For $i = 1 To $F_Num
    For $j = 1 To $F_Num
    If $Field = $F_FLD[0][$i][$j] Then
    $X = $i
    $Y = $j
    ExitLoop
    EndIf
    Next
    If $X <> 0 Then ExitLoop
    Next
    If ($F_FLD[2][$X][$Y] = $Hit) Or ($F_FLD[2][$X][$Y] = $Tried) Or (GUICtrlRead($F_FLD[0][$X][$Y])="X") Then Return
    If $F_FLD[2][$X][$Y] = $Ship Then
    $F_FLD[2][$X][$Y] = $Hit
    GUICtrlSetBkColor($F_FLD[0][$X][$Y], $F_FLD[2][$X][$Y])
    _Beep(1)
    $Turn = 1
    EndIf
    If $F_FLD[2][$X][$Y] = $Water Then
    $F_FLD[2][$X][$Y] = $Tried
    GUICtrlSetBkColor($F_FLD[0][$X][$Y], $F_FLD[2][$X][$Y])
    _Beep(2)
    $Turn = 0
    EndIf

    EndFunc ;==>_Move

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

    Func _Refresh()
    For $i = 1 To $F_Num
    For $j = 1 To $F_Num
    If ($F_FLD[2][$i][$j] = $Ship) Or ($F_FLD[2][$i][$j] = $Hit) Or ($F_FLD[2][$i][$j] = $Water) Then GUICtrlSetBkColor($F_FLD[0][$i][$j], $F_FLD[2][$i][$j])
    If ($F_FLD[3][$i][$j] = $Ship) Or ($F_FLD[3][$i][$j] = $Hit) Or ($F_FLD[2][$i][$j] = $Water) Then GUICtrlSetBkColor($F_FLD[1][$i][$j], $F_FLD[3][$i][$j])
    Next
    Next
    EndFunc ;==>_Refresh

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

    Func _ShipPut()
    Local $CtrlID, $Size = 2, $Dir = True
    For $i = 2 To 5
    If @GUI_CtrlId = $S_Gra[$i] Then
    $Size = $i
    ExitLoop
    EndIf
    Next
    If @GUI_WinHandle <> $Main Then Return
    $CtrlID = GUIGetCursorInfo($Main)
    While $CtrlID[2]
    $CtrlID = GUIGetCursorInfo($Main)
    If $CtrlID[3] Then
    While $CtrlID[3]
    $CtrlID = GUIGetCursorInfo($Main)
    WEnd
    $Dir = Not $Dir
    _ShipPos($CtrlID[4], $Size, $Dir, 0, 1)
    EndIf
    If ($CtrlID[4] > $F_FLD[1][0][0]) And ($CtrlID[4] < $F_FLD[1][0][1]) Then
    If $F_Alt[1][0] <> $CtrlID[4] Then _ShipPos($CtrlID[4], $Size, $Dir, 0, 1)
    EndIf
    Sleep(20)
    WEnd
    If _ShipPos($CtrlID[4], $Size, $Dir, 1, 1) Then
    $S_Count[$Size] += 1
    GUICtrlSetState($StartBut, $GUI_ENABLE)
    EndIf
    EndFunc ;==>_ShipPut

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

    Func _ShipPos($CtrlID, $Size, $Dir, $Save, $W)
    Local $X = 0, $Y = 0, $Suc = True, $XS, $XE, $YS, $YE
    For $i = 1 To $F_Num
    For $j = 1 To $F_Num
    If $CtrlID = $F_FLD[$W][$i][$j] Then
    $X = $i
    $Y = $j
    ExitLoop
    EndIf
    Next
    If $X <> 0 Then ExitLoop
    Next
    If $X = 0 Then
    For $i = 0 To $Size
    If $W = 1 Then GUICtrlSetBkColor($F_Alt[$i][0], $F_Alt[$i][1])
    Next
    Return False
    EndIf
    If $Dir = 0 Then
    If $X > $F_Num - $Size + 1 Then $Suc = False
    Else
    If $Y > $F_Num - $Size + 1 Then $Suc = False
    EndIf
    For $S = 1 To $Size
    $XS = $X - 1
    $XE = $X + 1
    $YS = $Y - 1
    $YE = $Y + 1
    If $XS < 1 Then $XS = 1
    If $XE > $F_Num Then $XE = $F_Num
    If $YS < 1 Then $YS = 1
    If $YE > $F_Num Then $YE = $F_Num
    For $i = $XS To $XE
    For $j = $YS To $YE
    If (Not $Diagonal) And ($S = 1 Or $S = $Size) And (($i = $X - 1 And $j = $Y - 1) Or ($i = $X - 1 And $j = $Y + 1) Or ($i = $X + 1 And $j = $Y - 1) Or ($i = $X + 1 And $j = $Y + 1)) Then ContinueLoop
    If $F_FLD[$W + 2][$i][$j] = $Ship Then $Suc = False
    Next
    Next
    If $Dir = 0 Then
    $X += 1
    Else
    $Y += 1
    EndIf
    Next
    If $W <> 2 Then
    For $i = 0 To $Size
    If $W = 1 Then GUICtrlSetBkColor($F_Alt[$i][0], $F_Alt[$i][1])
    Next
    If $Dir = 0 Then
    $X -= 1
    Else
    $Y -= 1
    EndIf
    For $i = $Size To 1 Step -1
    If $Suc Then
    If ($X > 0) And ($Y > 0) And ($X <= $F_Num) And ($Y <= $F_Num) Then
    If $W = 1 Then GUICtrlSetBkColor($F_FLD[$W][$X][$Y], $Ship)
    If $Save = 1 Then $F_FLD[$W + 2][$X][$Y] = $Ship
    EndIf
    Else
    If ($X > 0) And ($Y > 0) And ($X <= $F_Num) And ($Y <= $F_Num) And ($Save = 0) And ($W = 1) Then GUICtrlSetBkColor($F_FLD[$W][$X][$Y], 0xAA0000)
    EndIf
    If ($X > 0) And ($Y > 0) And ($X <= $F_Num) And ($Y <= $F_Num) Then
    $F_Alt[$i][0] = $F_FLD[$W][$X][$Y]
    $F_Alt[$i][1] = $F_FLD[$W + 2][$X][$Y]
    EndIf
    If $Dir = 0 Then
    $X -= 1
    Else
    $Y -= 1
    EndIf
    Next
    EndIf
    Return $Suc
    EndFunc ;==>_ShipPos

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

    Func _SetFlag($CtrlID)
    While $Action[3] = 1
    $Action = GUIGetCursorInfo($Main)
    Sleep(5)
    WEnd
    If GUICtrlRead($CtrlID)="X" Then
    GUICtrlSetData($CtrlID,"")
    Else
    GUICtrlSetData($CtrlID,"X")
    EndIf
    EndFunc

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

    Func _Start()
    Local $Proc
    Local $Suc = True
    For $i = 2 To 5
    GUICtrlSetState($S_Gra[$i], $GUI_DISABLE)
    GUICtrlSetBkColor($S_Gra[$i], $Tried)
    Next
    For $m = 1 To 100
    Switch Mod($m, 4)
    Case 0
    $Proc="–"
    Case 1
    $Proc="\"
    Case 2
    $Proc="|"
    Case 3
    $Proc="/"
    EndSwitch
    GUICtrlSetData($Info, "Computer positioniert seine Schiffe... " & $Proc)
    $Suc = True
    For $i = 1 to $F_Num
    For $j = 1 to $F_Num
    $F_FLD[2][$i][$j]=$Water
    Next
    Next
    For $j = 5 To 2 Step -1
    For $i = 1 To $S_Count[$j]
    If _CPUT($j,$m) = False Then $Suc = False
    If $Suc = False Then ExitLoop
    Next
    If $Suc = False Then ExitLoop
    Next
    If $Suc = True Then ExitLoop
    Next
    If $Suc = False Then
    For $i = 1 To $F_Num
    For $j = 1 To $F_Num
    $F_FLD[2][$i][$j] = $F_FLD[3][$F_Num + 1 - $i][$F_Num + 1 - $j]
    Next
    Next
    EndIf
    $Play = True
    For $i = 1 To 20
    $Turn = Random(0, 1, 1)
    If Mod($i, 2) = 0 Then
    GUICtrlSetData($Info, "Computer")
    Else
    GUICtrlSetData($Info, "Spieler")
    EndIf
    Sleep(80)
    Next
    If $Turn = 1 Then
    GUICtrlSetData($Info, "Du darfst anfangen...")
    Else
    GUICtrlSetData($Info, "Der Computer hat den ersten Versuch...")
    Sleep(3000)
    EndIf
    GUICtrlSetState($StartBut, $GUI_DISABLE)
    EndFunc ;==>_Start

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

    Func _CPUT($L,$M)
    Local $Pos, $Dir, $a, $b
    If 70-($L*10) <= Round($M, -1) Then
    For $Pos = $F_FLD[0][0][0] + 1 To $F_FLD[0][0][1] - 1
    $Dir=Random(0,1,1)
    If _ShipPos($Pos, $L, $Dir, 0, 0) = True Then
    _ShipPos($Pos, $L, $Dir, 1, 0)
    Return True
    ExitLoop
    EndIf
    Next
    Else
    For $i = 1 To 50
    $Pos = Random($F_FLD[0][0][0] + 1, $F_FLD[0][0][1] - 1, 1)
    $Dir = Random(0, 1, 1)
    If _ShipPos($Pos, $L, $Dir, 0, 0) = True Then
    _ShipPos($Pos, $L, $Dir, 1, 0)
    Return True
    ExitLoop
    EndIf
    Next
    EndIf
    Return False
    EndFunc ;==>_CPUT

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

    Func _CreateGui()
    $Main = GUICreate("Schiffe versenken © 2008 by Eukalyptus", 600, 350, 550, 150)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
    GUISetBkColor(0x100500)
    GUICtrlCreateLabel("Computer", 20, 20)
    GUICtrlSetColor(-1, 0x00FF00)
    GUICtrlCreateLabel("Spieler", 250, 20)
    GUICtrlSetColor(-1, 0x00FF00)
    GUICtrlCreateLabel("Schiffe", 500, 20)
    GUICtrlSetColor(-1, 0x00FF00)
    $S_Gra[2] = GUICtrlCreateGraphic(530, 45, 45, 15)
    GUICtrlSetOnEvent(-1, "_ShipPut")
    GUICtrlSetBkColor(-1, $Ship)
    $S_Gra[3] = GUICtrlCreateGraphic(510, 75, 65, 15)
    GUICtrlSetOnEvent(-1, "_ShipPut")
    GUICtrlSetBkColor(-1, $Ship)
    $S_Gra[4] = GUICtrlCreateGraphic(490, 105, 85, 15)
    GUICtrlSetOnEvent(-1, "_ShipPut")
    GUICtrlSetBkColor(-1, $Ship)
    $S_Gra[5] = GUICtrlCreateGraphic(470, 135, 105, 15)
    GUICtrlSetOnEvent(-1, "_ShipPut")
    GUICtrlSetBkColor(-1, $Ship)
    GUICtrlCreateLabel("Feldgröße", 470, 170)
    GUICtrlSetColor(-1, 0x00FF00)
    $SizeLab = GUICtrlCreateInput("10", 540, 165, 35, 20, $ES_READONLY)
    GUICtrlCreateUpdown(-1)
    GUICtrlSetLimit(-1, 20, 5)
    $DiagBox = GUICtrlCreateCheckbox("Diagonal berühren", 470, 190)
    GUICtrlSetColor(-1, 0x00FF00)
    $NewBut = GUICtrlCreateButton("Neu", 470, 220, 50, 20)
    GUICtrlSetOnEvent(-1, "_New")
    $StartBut = GUICtrlCreateButton("Start", 530, 220, 50, 20)
    GUICtrlSetOnEvent(-1, "_Start")
    $Info = GUICtrlCreateLabel("", 20, 260, 550, 75)
    GUICtrlSetColor(-1, 0x00FF00)
    GUICtrlSetFont(-1, 12)
    GUISetState(@SW_SHOW)
    EndFunc ;==>_CreateGui

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

    Func _New()
    $Play = False
    For $i = 1 To $F_Num
    For $j = 1 To $F_Num
    GUICtrlDelete($F_FLD[0][$i][$j])
    GUICtrlDelete($F_FLD[1][$i][$j])
    Next
    Next
    $F_Num = GUICtrlRead($SizeLab)
    ReDim $F_FLD[4][$F_Num + 1][$F_Num + 1]
    _CreateFields(20, 40, $F_Num, Round(200 / $F_Num), 0)
    _CreateFields(250, 40, $F_Num, Round(200 / $F_Num), 1)
    For $i = 0 To 5
    $S_Count[$i] = 0
    $F_Alt[$i][0] = 0
    $F_Alt[$i][1] = 0
    GUICtrlSetState($S_Gra[$i], $GUI_ENABLE)
    GUICtrlSetBkColor($S_Gra[$i], $Ship)
    Next
    $Ras = Random(0, 3, 1)
    $Ra3 = Random(0, 2, 1)
    Switch Random(0, 3, 1)
    Case 0
    $Ras1 = 0.5
    Case 1
    $Ras1 = 1
    Case 2
    $Ras1 = 1.5
    Case Else
    $Ras1 = 2
    EndSwitch
    GUICtrlSetState($StartBut, $GUI_DISABLE)
    If GUICtrlRead($DiagBox) = $GUI_CHECKED Then
    $Diagonal = False
    Else
    $Diagonal = True
    EndIf
    GUICtrlSetData($Info, "Ziehe beliebig viele Schiffe mit gedrückter linker Maustaste auf dein Spielfeld - ein Rechtsklick ändert die Ausrichtung (Horizontal/Vertikal)" & @CRLF & "Wenn du alle Schiffe positioniert hast, drücke START um das Spiel zu beginnen...")
    EndFunc ;==>_New

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

    Func _CreateFields($X, $Y, $F, $S, $W)
    $F_FLD[$W][0][0] = GUICtrlCreateDummy()
    For $i = 1 To $F
    For $j = 1 To $F
    $F_FLD[$W][$i][$j] = GUICtrlCreateLabel("", $X + ($j - 1) * $S, $Y + ($i - 1) * $S, $S - 1, $S - 1, $SS_CENTER)
    $F_FLD[$W + 2][$i][$j] = $Water
    GUICtrlSetBkColor(-1, $F_FLD[$W + 2][$i][$j])
    GUICtrlSetColor(-1,$Hit)
    GUICtrlSetFont(-1,Round(100/$F_Num)+2)
    Next
    Next
    $F_FLD[$W][0][1] = GUICtrlCreateDummy()
    EndFunc ;==>_CreateFields

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

    Func _Beep($B)
    Local Const $Tone[13] = [523.251, 554.365, 587.330, 622.254, 659.255, 698.456, 739.989, 783.991, 830.609, 880.000, 932.328, 987.767, 1046.50]
    Switch $B
    Case 1
    Beep($Tone[12], 20)
    Sleep(50)
    Beep($Tone[12], 30)
    Case 2
    Beep($Tone[0], 20)
    Case 3
    For $i = 0 To 12
    Beep($Tone[$i], 10)
    Next
    For $i = 11 To 1 Step -1
    Beep($Tone[$i], 10)
    Next
    For $i = 0 To 12
    Beep($Tone[$i], 20)
    Next
    Case 4
    For $i = 12 To 0 Step -1
    Beep($Tone[$i], 20)
    Next
    For $i = 6 To 0 Step -1
    Beep($Tone[$i], 80)
    Next
    EndSwitch
    EndFunc ;==>_Beep

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

    Func _Exit()
    Exit
    EndFunc ;==>_Exit

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


    Eistee:
    das ist eigentlich absicht. wenn der spieler sein feld mit schiffen extrem vollstopft, dann würde der computer ewig mit seiner positionierung der schiffe brauchen.
    falls der computer es nach gewissen zyklen nicht geschafft hat, dann wird einfach das feld des spielers kopiert ;)
    sozusagen eine nötige sicherheitsmaßnahme, da ich es dem spieler überlasse die anzahl seiner schiffe selbst festzulegen.

    lgE

  • :( Ich trau mich kaum noch zu schreiben :(

    Wir haben diese Woche unsere Endjahresarbeiten. Dazu parallel seit ein paar Wochen Geschichtsprojekt. Zusätzlich Fahrschule. Das ist echt alles sehr stressig.

    Ich hab morgen um halb 10 bereits Schulschluss und ich verspreche hier jetzt hoch und heilig, dass ich danach die Auswertung mache (es sei denn jemand will jetzt doch nich bisschen Zeit um seins zu beenden)

    der sich schämende Walle :(

    Flensburg ist wie Payback - wenn man 18 Punkte hat bekommt man ein Fahrrad.

  • laß dir ruhig zeit ;)

    ich hab noch vor die funktion zu integrieren, daß ein komplett abgeschossenes schiff angezeigt wird.

    ich schlage vor, dass wir den abgabetermin auf unbestimmte zeit verlegen und warten, bis die übrigen teilnehmer fertig sind.
    dies widerspricht zwar den regeln, aber ich glaube, dass wir den wichtigsten punkt, "spaß am programmieren" doch berücksichtigen sollen!
    und eigentlich will ich ja nicht gewinnen, sondern die anderen scripte sehen - je mehr desto besser!

    lgE

  • Hm, könnten wir auch machen. Nur da brauch ich noch paar Meinungen von den anderen dazu ;) Vlt haben die ja garkeine Lust mehr. Da MicroIt Mai schon ausgefallen ist würde ich jetzt trotzdem gerne neue Aufgabe für Juni machen....


    Also äußert euch pls nochmal dazu. Noch warten auf die anderen oder nicht? Mir isses egal, ich hätte heute Zeit für die Auswertung!

    Walle

    Flensburg ist wie Payback - wenn man 18 Punkte hat bekommt man ein Fahrrad.

  • Ich will auch mal noch mein Glück versuchen. Das Design und das Menü hab ich heut mal fertig gemacht. Schonmal von vornerein. Meins ist grafisch ausgefeilter... Damit kann ich am besten punkten :P

  • Ich hab noch einige Probleme. Ist noch ein wenig zu schwer für mich. Ich mach das aber auf jeden Fall noch fertig wird nur ne ganze Weile dauern. Das grobe vom Design her hab ich aber schon... also so in der Art wirds wohl aussehen:

    ...

    Einmal editiert, zuletzt von Wambo (19. August 2008 um 15:06)

  • Hallo Wambo,
    für das technische schau mal in den Post von eukalyptus, da ist das ganze als Script. --> hier

    Aber für das Design gibt's schon jetzt eine 1 mit * :thumbup:

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • Öhm.. Wäre es nicht recht "dämlich" wenn er das Script von Eucalyptus kopiert? Das führt den Wettbewerb ad absurdum würde ich sagen......

    MfG

    akira2012

    ***---____---Wer RechtSCHRAIBfehler findet der darf Sie behalLTEN!---___---***

  • akira2012
    aufgrund der Vorgeschichte, dass Wambo sich für den Wettbewerb interessiert aber auf halber Strecke den Mut verloren hat,
    habe ich Ihm lediglich empfohlen sich mal ein funktionierendes Script anzusehen, um zu lernen. ;)

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • Ich würde mich auch sehr über eine Juli - Aufgabe freuen.
    Will mal testen ob ich dazu in der Lage bin ein Skript auf "Bestellung" fertig zu bringen, und damit dann auch noch zu begeistern ^^

    P.S.: Aber wenn es eine Juli Aufgabe geben sollte, dann hätte ich eine kleine Bitte: Könntest du dir vielleicht kein Spiel sondern irgendetwas anderes überlegen? (z.B.: irgendetwas mit Dateien oder ähnliches, das auch jemandem das Leben erleichtern könnte ^^)
    Ich hoffe du verstehst was ich meine.

    Einmal editiert, zuletzt von morfi93 (4. Juli 2008 um 20:13)

  • Also Juli Aufgabe gibt es, hab ich gestern mit pee geklärt.

    Ich wollte diesmal auch kein Spiel wieder machen. Das hatte ich ja auch eigentlich schon im April, vor aber da wollte ja keiner etwas mit Daten und so machen^^


    Aufgabe poste ich dieses Wochenende. (Wird was kleineres)


    Walle

    Flensburg ist wie Payback - wenn man 18 Punkte hat bekommt man ein Fahrrad.

  • Kein Spiel, super :) freue mich schon drauf, dieses mal mache ich auch mal wieder mit.

    Mfg
    Jens (McPoldy)

    Twitter: jkroeger

    Denn die Dinge, die wir erst lernen müssen, bevor wir sie tun, lernen wir beim Tun.(Aristoteles)