Das von Eukalyptus ist lustig des dereht einfech das feld da ich mache um die hälfte
µit - April
-
-
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 -_-
-
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
-
jop in 3 wochen sind ferien dann werd ich mit meinem auch mal fertig
-
Naja ich denke vorher passiert hier auch nichts mehr *SCHERZ* Naja falls wirklich nichts passiert poste ich meines auch noch - hehe
_________________________________________
-
natürlich sollt ihr eure spiele fertig machen!
vielleicht schaffen es blubkuh und gun-food auch nochich hab übrigens mein spiel etwas verändert, sodaß man nun bei einem treffer an der reihe bleibt.
änderungen:
Spoiler anzeigen
[autoit]
bei zeile 20
vorher:_KI()
[/autoit]
GUICtrlSetOnEvent($NewBut, "_New")
$Turn = 1
[autoit]
nachherIf _KI() <> True Then $Turn = 1
[/autoit]
GUICtrlSetOnEvent($NewBut, "_New")bei zeile 87
[autoit]
vorher_Shot($Temp[0], $Temp[1], 1)
[/autoit]
GUICtrlSetData($Info, 'Du bist an der Reihe...')
[autoit]
nachherIf _Shot($Temp[0], $Temp[1], 1)= True Then
[/autoit]
Return True
Else
GUICtrlSetData($Info, 'Du bist an der Reihe...')
Return False
EndIfbei 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>
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
#include <StaticConstants.au3>
#include <EditConstants.au3>Opt("GUIOnEventMode", 1)
[/autoit] [autoit][/autoit] [autoit]
Opt("TrayIconDebug", 1)Global Const $Water = 0x0000AA, $Ship = 0x00FF00, $Hit = 0xDD11133, $Tried = 0x000066, $Mark = 0x0000AB
[/autoit] [autoit][/autoit] [autoit]
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_CreateGui()
[/autoit] [autoit][/autoit] [autoit]
_New()While 1
[/autoit] [autoit][/autoit] [autoit]
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#region KI
[/autoit] [autoit][/autoit] [autoit]
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 ;==>_KIFunc _Raster()
[/autoit] [autoit][/autoit] [autoit]
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 ;==>_RasterFunc _Mod($X, $Y)
[/autoit] [autoit][/autoit] [autoit]
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 ;==>_ModFunc _Random()
[/autoit] [autoit][/autoit] [autoit]
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 ;==>_RandomFunc _GetBySize($Size)
[/autoit] [autoit][/autoit] [autoit]
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 ;==>_GetBySizeFunc _GetFree()
[/autoit] [autoit][/autoit] [autoit]
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 ;==>_GetFreeFunc _Dir($X, $Y)
[/autoit] [autoit][/autoit] [autoit]
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 ;==>_DirFunc _Shot($X, $Y, $W)
[/autoit] [autoit][/autoit] [autoit]
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 ;==>_ShotFunc _Find($X, $Y, $X1, $Y1)
[/autoit] [autoit][/autoit] [autoit]
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 ;==>_FindFunc _Check($X, $Y)
[/autoit] [autoit][/autoit] [autoit]
If ($X < 1) Or ($X > $F_Num) Or ($Y < 1) Or ($Y > $F_Num) Then Return 0
Return $F_FLD[3][$X][$Y]
EndFunc ;==>_CheckFunc _Mark($X, $Y, $X1, $Y1)
[/autoit] [autoit][/autoit] [autoit]
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 ;==>_MarkFunc _EndMark()
[/autoit] [autoit][/autoit] [autoit]
_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 ;==>_EndMarkFunc _MarkEnd($Size, $EX)
[/autoit] [autoit][/autoit] [autoit]
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 ;==>_MarkEndFunc _SetMark($X, $Y)
[/autoit] [autoit][/autoit] [autoit]
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 ;==>_SetMarkFunc _Winner()
[/autoit] [autoit][/autoit] [autoit]
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 KIFunc _Move($Field)
[/autoit] [autoit][/autoit] [autoit]
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 ;==>_MoveFunc _Refresh()
[/autoit] [autoit][/autoit] [autoit]
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 ;==>_RefreshFunc _ShipPut()
[/autoit] [autoit][/autoit] [autoit]
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 ;==>_ShipPutFunc _ShipPos($CtrlID, $Size, $Dir, $Save, $W)
[/autoit] [autoit][/autoit] [autoit]
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 ;==>_ShipPosFunc _SetFlag($CtrlID)
[/autoit] [autoit][/autoit] [autoit]
While $Action[3] = 1
$Action = GUIGetCursorInfo($Main)
Sleep(5)
WEnd
If GUICtrlRead($CtrlID)="X" Then
GUICtrlSetData($CtrlID,"")
Else
GUICtrlSetData($CtrlID,"X")
EndIf
EndFuncFunc _Start()
[/autoit] [autoit][/autoit] [autoit]
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 ;==>_StartFunc _CPUT($L,$M)
[/autoit] [autoit][/autoit] [autoit]
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 ;==>_CPUTFunc _CreateGui()
[/autoit] [autoit][/autoit] [autoit]
$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 ;==>_CreateGuiFunc _New()
[/autoit] [autoit][/autoit] [autoit]
$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 ;==>_NewFunc _CreateFields($X, $Y, $F, $S, $W)
[/autoit] [autoit][/autoit] [autoit]
$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 ;==>_CreateFieldsFunc _Beep($B)
[/autoit] [autoit][/autoit] [autoit]
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 ;==>_BeepFunc _Exit()
[/autoit] [autoit][/autoit] [autoit][/autoit]
Exit
EndFunc ;==>_ExitEistee:
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
-
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
-
- Offizieller Beitrag
Wir können die April-Aufgabe ja sozusagen auf "OpenEnd" stellen. Von mir aus kann auch eine Bewertung ausbleiben. Ich würde nämlich auch gern die anderen Scripte sehen.
Parallel dazu könnten wir ja mit der Juni-Aufgabe anfangen.
-
ich würd oscars meinung übernehmen, allerdings sag ich direkt, ich werd bei juni aufgabe nicht mitmachen keine zeit *gg*
-
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
-
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:
-
Hallo Wambo,
für das technische schau mal in den Post von eukalyptus, da ist das ganze als Script. --> hierAber für das Design gibt's schon jetzt eine 1 mit *
-
Ö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......
-
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. -
- Offizieller Beitrag
Waluev: Da der Juni nun fast vorbei ist, wollte ich mal fragen, ob es denn eine Juli-Aufgabe geben wird? Oder fehlt Dir die Zeit?
-
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 begeisternP.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. -
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
-
Kein Spiel, super freue mich schon drauf, dieses mal mache ich auch mal wieder mit.
-