Hawkwing Posted July 30, 2009 Share Posted July 30, 2009 (edited) Got most of it working, but the recursion level is exceeded if you click on a square not touching any mines because it tries checking all adjacent squares to see if they should be deleted too. Is there another way to do this? expandcollapse popupcreate($width, $height, $mines, $time) While 1 Sleep(1000) GUICtrlSetData($timeinput, GUICtrlRead($timeinput) + 1) WEnd Func create($width, $height, $mines, $time) $maingui = GUICreate("Mine Sweeper", 15 * $width - 8, 15 * $height + 32, -1, -1) $minesleftinput = GUICtrlCreateInput($minesleft, 1, 1, 66, 40, BitOR($ES_READONLY, $ES_CENTER)) GUICtrlSetFont(-1, 20, 400, 0, "MS Sans Serif") $timeinput = GUICtrlCreateInput($time, $width * 15 - 74, 1, 66, 40, BitOR($ES_READONLY, $ES_CENTER)) GUICtrlSetFont(-1, 20, 400, 0, "MS Sans Serif") createbuttons($width, $height) ;disperse mines For $i = 1 To $mines $buttonnumber[Random(1, $height, 1)][Random(1, $width, 1)] = "mine" Next ;generate numbers For $i = 1 To $width For $j = 1 To $height If $buttonnumber[$i][$j] = "mine" Then ContinueLoop ;if not lefttopmost then check lefttop If $i > 1 Then If $j > 1 Then If $buttonnumber[$i - 1][$j - 1] = "mine" Then $buttonnumber[$i][$j] += 1 EndIf EndIf EndIf ;if not leftmost then check left If $i > 1 Then If $buttonnumber[$i - 1][$j] = "mine" Then $buttonnumber[$i][$j] += 1 EndIf EndIf ;if not leftbottommost then check leftbottom If $i > 1 Then If $j < $height Then If $buttonnumber[$i - 1][$j + 1] = "mine" Then $buttonnumber[$i][$j] += 1 EndIf EndIf EndIf ;if not bottommost then check botton If $j < $height Then If $buttonnumber[$i][$j + 1] = "mine" Then $buttonnumber[$i][$j] += 1 EndIf EndIf ;if not bottomrightmost then check bottomright If $i < $width Then If $j < $height Then If $buttonnumber[$i + 1][$j + 1] = "mine" Then $buttonnumber[$i][$j] += 1 EndIf EndIf EndIf ;if not rightmost then check right If $i < $width Then If $buttonnumber[$i + 1][$j] = "mine" Then $buttonnumber[$i][$j] += 1 EndIf EndIf ;if not righttopmost then check righttop If $i < $width Then If $j > 1 Then If $buttonnumber[$i + 1][$j - 1] = "mine" Then $buttonnumber[$i][$j] += 1 EndIf EndIf EndIf ;if not topmost then check top If $j > 1 Then If $buttonnumber[$i][$j - 1] = "mine" Then $buttonnumber[$i][$j] += 1 EndIf EndIf Next Next GUISetOnEvent($GUI_EVENT_CLOSE, "close", $maingui) GUISetState() EndFunc Func createbuttons($width, $height) For $i = 1 To $width For $j = 1 To $height $button[$i][$j] = GUICtrlCreateButton("", $i * 14 - 13, $j * 14 + 27, 15, 15, $BS_BITMAP) GUICtrlSetOnEvent(-1, "buttonclick") Next Next EndFunc Func buttonclick() For $i = 1 To $width For $j = 1 To $height If @GUI_CtrlId = $button[$i][$j] Then If $buttonnumber[$i][$j] = "mine" Then GUICtrlSetImage($button[$i][$j], @ScriptDir & "\bitmaps\mine.bmp") ElseIf $buttonnumber[$i][$j] = 1 Then GUICtrlSetImage($button[$i][$j], @ScriptDir & "\bitmaps\1.bmp") ElseIf $buttonnumber[$i][$j] = 2 Then GUICtrlSetImage($button[$i][$j], @ScriptDir & "\bitmaps\2.bmp") ElseIf $buttonnumber[$i][$j] = 3 Then GUICtrlSetImage($button[$i][$j], @ScriptDir & "\bitmaps\3.bmp") ElseIf $buttonnumber[$i][$j] = 4 Then GUICtrlSetImage($button[$i][$j], @ScriptDir & "\bitmaps\4.bmp") ElseIf $buttonnumber[$i][$j] = 5 Then GUICtrlSetImage($button[$i][$j], @ScriptDir & "\bitmaps\5.bmp") ElseIf $buttonnumber[$i][$j] = 6 Then GUICtrlSetImage($button[$i][$j], @ScriptDir & "\bitmaps\6.bmp") ElseIf $buttonnumber[$i][$j] = 7 Then GUICtrlSetImage($button[$i][$j], @ScriptDir & "\bitmaps\7.bmp") ElseIf $buttonnumber[$i][$j] = 8 Then GUICtrlSetImage($button[$i][$j], @ScriptDir & "\bitmaps\8.bmp") ElseIf $buttonnumber[$i][$j] = "" Then GUICtrlDelete($button[$i][$j]) ;check left & lefttop If $i > 1 Then If $buttonnumber[$i - 1][$j] = "" Then buttoncheck($i-1, $j) If $j > 1 Then If $buttonnumber[$i - 1][$j - 1] = "" Then buttoncheck($i - 1, $j - 1) EndIf EndIf EndIf EndIf ;check top & topright If $j > 1 Then If $buttonnumber[$i][$j - 1] = "" Then buttoncheck($i, $j - 1) If $i < $width Then If $buttonnumber[$i + 1][$j + 1] Then buttoncheck($i + 1, $j + 1) EndIf EndIf EndIf EndIf ;check right & rightbottom If $i < $width Then If $buttonnumber[$i + 1][$j] = "" Then buttoncheck($i + 1, $j) If $j < $height Then If $buttonnumber[$i + 1][$j + 1] = "" Then buttoncheck($i + 1, $j + 1) EndIf EndIf EndIf EndIf ;check bottom & bottomleft If $j < $height Then If $buttonnumber[$i][$j + 1] = "" Then buttoncheck($i, $j + 1) If $i > 1 Then If $buttonnumber[$i - 1][$j + 1] = "" Then buttoncheck($i - 1, $j + 1) EndIf EndIf EndIf EndIf EndIf EndIf Next Next EndFunc Func buttoncheck($i, $j) If $buttonnumber[$i][$j] = "mine" Then GUICtrlSetImage($button[$i][$j], @ScriptDir & "\bitmaps\mine.bmp") ElseIf $buttonnumber[$i][$j] = 1 Then GUICtrlSetImage($button[$i][$j], @ScriptDir & "\bitmaps\1.bmp") ElseIf $buttonnumber[$i][$j] = 2 Then GUICtrlSetImage($button[$i][$j], @ScriptDir & "\bitmaps\2.bmp") ElseIf $buttonnumber[$i][$j] = 3 Then GUICtrlSetImage($button[$i][$j], @ScriptDir & "\bitmaps\3.bmp") ElseIf $buttonnumber[$i][$j] = 4 Then GUICtrlSetImage($button[$i][$j], @ScriptDir & "\bitmaps\4.bmp") ElseIf $buttonnumber[$i][$j] = 5 Then GUICtrlSetImage($button[$i][$j], @ScriptDir & "\bitmaps\5.bmp") ElseIf $buttonnumber[$i][$j] = 6 Then GUICtrlSetImage($button[$i][$j], @ScriptDir & "\bitmaps\6.bmp") ElseIf $buttonnumber[$i][$j] = 7 Then GUICtrlSetImage($button[$i][$j], @ScriptDir & "\bitmaps\7.bmp") ElseIf $buttonnumber[$i][$j] = 8 Then GUICtrlSetImage($button[$i][$j], @ScriptDir & "\bitmaps\8.bmp") ElseIf $buttonnumber[$i][$j] = "" Then GUICtrlDelete($button[$i][$j]) ;check left & lefttop If $i > 1 Then If $buttonnumber[$i - 1][$j] = "" Then buttoncheck($i-1, $j) If $j > 1 Then If $buttonnumber[$i - 1][$j - 1] = "" Then buttoncheck($i - 1, $j - 1) EndIf EndIf EndIf EndIf ;check top & topright If $j > 1 Then If $buttonnumber[$i][$j - 1] = "" Then buttoncheck($i, $j - 1) If $i < $width Then If $buttonnumber[$i + 1][$j + 1] Then buttoncheck($i + 1, $j + 1) EndIf EndIf EndIf EndIf ;check right & rightbottom If $i < $width Then If $buttonnumber[$i + 1][$j] = "" Then buttoncheck($i + 1, $j) If $j < $height Then If $buttonnumber[$i + 1][$j + 1] = "" Then buttoncheck($i + 1, $j + 1) EndIf EndIf EndIf EndIf ;check bottom & bottomleft If $j < $height Then If $buttonnumber[$i][$j + 1] = "" Then buttoncheck($i, $j + 1) If $i > 1 Then If $buttonnumber[$i - 1][$j + 1] = "" Then buttoncheck($i - 1, $j + 1) EndIf EndIf EndIf EndIf EndIf EndFunc Func close() Exit EndFunc I also need a way to mark the mines found. Edited July 30, 2009 by Hawkwing The Wheel of Time turns, and Ages come and pass, leaving memories that become legend. Legend fades to myth, and even myth is long forgotten when the Age that gave it birth comes again. Link to comment Share on other sites More sharing options...
exodius Posted July 31, 2009 Share Posted July 31, 2009 Maybe post a working example? The one you posted doesn't have all the necessary includes, doesn't have variables declared globally, and for that matter even then doesn't work so... Post something that at least runs without erroring? Link to comment Share on other sites More sharing options...
Hawkwing Posted July 31, 2009 Author Share Posted July 31, 2009 woops, thought I had copied the whole script. >_< expandcollapse popup#include<GuiConstants.au3> #include<GuiEdit.au3> #include<Misc.au3> #include<ButtonConstants.au3> #NoTrayIcon Opt("GuiOnEventMode", 1) Local $timeinput, $minesleftinput $width = 10 $height = 10 $mines = 10 $minesleft = 10 $time = 0 Dim $button[100][100] Dim $buttonnumber[100][100] create($width, $height, $mines, $time) While 1 Sleep(1000) GUICtrlSetData($timeinput, GUICtrlRead($timeinput) + 1) WEnd Func create($width, $height, $mines, $time) $maingui = GUICreate("Mine Sweeper", 15 * $width - 8, 15 * $height + 32, -1, -1) $minesleftinput = GUICtrlCreateInput($minesleft, 1, 1, 66, 40, BitOR($ES_READONLY, $ES_CENTER)) GUICtrlSetFont(-1, 20, 400, 0, "MS Sans Serif") $timeinput = GUICtrlCreateInput($time, $width * 15 - 74, 1, 66, 40, BitOR($ES_READONLY, $ES_CENTER)) GUICtrlSetFont(-1, 20, 400, 0, "MS Sans Serif") createbuttons($width, $height) ;disperse mines For $i = 1 To $mines $buttonnumber[Random(1, $height, 1)][Random(1, $width, 1)] = "mine" Next ;generate numbers For $i = 1 To $width For $j = 1 To $height If $buttonnumber[$i][$j] = "mine" Then ContinueLoop ;if not lefttopmost then check lefttop If $i > 1 Then If $j > 1 Then If $buttonnumber[$i - 1][$j - 1] = "mine" Then $buttonnumber[$i][$j] += 1 EndIf EndIf EndIf ;if not leftmost then check left If $i > 1 Then If $buttonnumber[$i - 1][$j] = "mine" Then $buttonnumber[$i][$j] += 1 EndIf EndIf ;if not leftbottommost then check leftbottom If $i > 1 Then If $j < $height Then If $buttonnumber[$i - 1][$j + 1] = "mine" Then $buttonnumber[$i][$j] += 1 EndIf EndIf EndIf ;if not bottommost then check botton If $j < $height Then If $buttonnumber[$i][$j + 1] = "mine" Then $buttonnumber[$i][$j] += 1 EndIf EndIf ;if not bottomrightmost then check bottomright If $i < $width Then If $j < $height Then If $buttonnumber[$i + 1][$j + 1] = "mine" Then $buttonnumber[$i][$j] += 1 EndIf EndIf EndIf ;if not rightmost then check right If $i < $width Then If $buttonnumber[$i + 1][$j] = "mine" Then $buttonnumber[$i][$j] += 1 EndIf EndIf ;if not righttopmost then check righttop If $i < $width Then If $j > 1 Then If $buttonnumber[$i + 1][$j - 1] = "mine" Then $buttonnumber[$i][$j] += 1 EndIf EndIf EndIf ;if not topmost then check top If $j > 1 Then If $buttonnumber[$i][$j - 1] = "mine" Then $buttonnumber[$i][$j] += 1 EndIf EndIf Next Next GUISetOnEvent($GUI_EVENT_CLOSE, "close", $maingui) GUISetState() EndFunc Func createbuttons($width, $height) For $i = 1 To $width For $j = 1 To $height $button[$i][$j] = GUICtrlCreateButton("", $i * 14 - 13, $j * 14 + 27, 15, 15, $BS_BITMAP) GUICtrlSetOnEvent(-1, "buttonclick") Next Next EndFunc Func buttonclick() For $i = 1 To $width For $j = 1 To $height If @GUI_CtrlId = $button[$i][$j] Then If $buttonnumber[$i][$j] = "mine" Then GUICtrlSetImage($button[$i][$j], @ScriptDir & "\bitmaps\mine.bmp") ElseIf $buttonnumber[$i][$j] = 1 Then GUICtrlSetImage($button[$i][$j], @ScriptDir & "\bitmaps\1.bmp") ElseIf $buttonnumber[$i][$j] = 2 Then GUICtrlSetImage($button[$i][$j], @ScriptDir & "\bitmaps\2.bmp") ElseIf $buttonnumber[$i][$j] = 3 Then GUICtrlSetImage($button[$i][$j], @ScriptDir & "\bitmaps\3.bmp") ElseIf $buttonnumber[$i][$j] = 4 Then GUICtrlSetImage($button[$i][$j], @ScriptDir & "\bitmaps\4.bmp") ElseIf $buttonnumber[$i][$j] = 5 Then GUICtrlSetImage($button[$i][$j], @ScriptDir & "\bitmaps\5.bmp") ElseIf $buttonnumber[$i][$j] = 6 Then GUICtrlSetImage($button[$i][$j], @ScriptDir & "\bitmaps\6.bmp") ElseIf $buttonnumber[$i][$j] = 7 Then GUICtrlSetImage($button[$i][$j], @ScriptDir & "\bitmaps\7.bmp") ElseIf $buttonnumber[$i][$j] = 8 Then GUICtrlSetImage($button[$i][$j], @ScriptDir & "\bitmaps\8.bmp") ElseIf $buttonnumber[$i][$j] = "" Then GUICtrlDelete($button[$i][$j]) ;check left & lefttop If $i > 1 Then If $buttonnumber[$i - 1][$j] = "" Then buttoncheck($i-1, $j) If $j > 1 Then If $buttonnumber[$i - 1][$j - 1] = "" Then buttoncheck($i - 1, $j - 1) EndIf EndIf EndIf EndIf ;check top & topright If $j > 1 Then If $buttonnumber[$i][$j - 1] = "" Then buttoncheck($i, $j - 1) If $i < $width Then If $buttonnumber[$i + 1][$j + 1] Then buttoncheck($i + 1, $j + 1) EndIf EndIf EndIf EndIf ;check right & rightbottom If $i < $width Then If $buttonnumber[$i + 1][$j] = "" Then buttoncheck($i + 1, $j) If $j < $height Then If $buttonnumber[$i + 1][$j + 1] = "" Then buttoncheck($i + 1, $j + 1) EndIf EndIf EndIf EndIf ;check bottom & bottomleft If $j < $height Then If $buttonnumber[$i][$j + 1] = "" Then buttoncheck($i, $j + 1) If $i > 1 Then If $buttonnumber[$i - 1][$j + 1] = "" Then buttoncheck($i - 1, $j + 1) EndIf EndIf EndIf EndIf EndIf EndIf Next Next EndFunc Func buttoncheck($i, $j) If $buttonnumber[$i][$j] = "mine" Then GUICtrlSetImage($button[$i][$j], @ScriptDir & "\bitmaps\mine.bmp") ElseIf $buttonnumber[$i][$j] = 1 Then GUICtrlSetImage($button[$i][$j], @ScriptDir & "\bitmaps\1.bmp") ElseIf $buttonnumber[$i][$j] = 2 Then GUICtrlSetImage($button[$i][$j], @ScriptDir & "\bitmaps\2.bmp") ElseIf $buttonnumber[$i][$j] = 3 Then GUICtrlSetImage($button[$i][$j], @ScriptDir & "\bitmaps\3.bmp") ElseIf $buttonnumber[$i][$j] = 4 Then GUICtrlSetImage($button[$i][$j], @ScriptDir & "\bitmaps\4.bmp") ElseIf $buttonnumber[$i][$j] = 5 Then GUICtrlSetImage($button[$i][$j], @ScriptDir & "\bitmaps\5.bmp") ElseIf $buttonnumber[$i][$j] = 6 Then GUICtrlSetImage($button[$i][$j], @ScriptDir & "\bitmaps\6.bmp") ElseIf $buttonnumber[$i][$j] = 7 Then GUICtrlSetImage($button[$i][$j], @ScriptDir & "\bitmaps\7.bmp") ElseIf $buttonnumber[$i][$j] = 8 Then GUICtrlSetImage($button[$i][$j], @ScriptDir & "\bitmaps\8.bmp") ElseIf $buttonnumber[$i][$j] = "" Then GUICtrlDelete($button[$i][$j]) ;check left & lefttop If $i > 1 Then If $buttonnumber[$i - 1][$j] = "" Then buttoncheck($i-1, $j) If $j > 1 Then If $buttonnumber[$i - 1][$j - 1] = "" Then buttoncheck($i - 1, $j - 1) EndIf EndIf EndIf EndIf ;check top & topright If $j > 1 Then If $buttonnumber[$i][$j - 1] = "" Then buttoncheck($i, $j - 1) If $i < $width Then If $buttonnumber[$i + 1][$j + 1] Then buttoncheck($i + 1, $j + 1) EndIf EndIf EndIf EndIf ;check right & rightbottom If $i < $width Then If $buttonnumber[$i + 1][$j] = "" Then buttoncheck($i + 1, $j) If $j < $height Then If $buttonnumber[$i + 1][$j + 1] = "" Then buttoncheck($i + 1, $j + 1) EndIf EndIf EndIf EndIf ;check bottom & bottomleft If $j < $height Then If $buttonnumber[$i][$j + 1] = "" Then buttoncheck($i, $j + 1) If $i > 1 Then If $buttonnumber[$i - 1][$j + 1] = "" Then buttoncheck($i - 1, $j + 1) EndIf EndIf EndIf EndIf EndIf EndFunc Func close() Exit EndFunc sorry The Wheel of Time turns, and Ages come and pass, leaving memories that become legend. Legend fades to myth, and even myth is long forgotten when the Age that gave it birth comes again. Link to comment Share on other sites More sharing options...
Tvern Posted July 31, 2009 Share Posted July 31, 2009 (edited) I've edited this post so many times I decided to just rewrite it. the recursion error was caused by buttoncheck() calling itself too many times without ever ending; * I renamed buttoncheck() to buttoncheck2() and adjusted it so that instead of calling itself, it will return the new values of $i and $j to be checked, or set @error. (part of the reason for the recursion error) * I wrote a new function called buttoncheck(), that will call buttoncheck2() with updated values until @error is set. (at this time the two functions did the exact same thing as your old function, but without the risk of a recursion error. It did however get stuck in the same infinite loop) * When buttoncheck2() removes a button without a mine, $buttonnumber[$i][$j] will be set to "0", to avoid buttoncheck2() from bouncing between the same 2 cells. (takes care of the infinite loop; the other part of the recursion error) * At line 37 I added a check to avoid placing the same mine twice. * I changed the syntax of buttoncheck2() a bit, but that was just to help myself. expandcollapse popup#include<GuiConstants.au3> #include<GuiEdit.au3> #include<Misc.au3> #include<ButtonConstants.au3> #NoTrayIcon Opt("GuiOnEventMode", 1) Local $timeinput, $minesleftinput $width = 10 $height = 10 $mines = 10 $minesleft = 10 $time = 0 Dim $button[100][100] Dim $buttonnumber[100][100] create($width, $height, $mines, $time) While 1 Sleep(1000) GUICtrlSetData($timeinput, GUICtrlRead($timeinput) + 1) WEnd Func create($width, $height, $mines, $time) Local $rRow, $rColumn $maingui = GUICreate("Mine Sweeper", 15 * $width - 8, 15 * $height + 32, -1, -1) $minesleftinput = GUICtrlCreateInput($minesleft, 1, 1, 66, 40, BitOR($ES_READONLY, $ES_CENTER)) GUICtrlSetFont(-1, 20, 400, 0, "MS Sans Serif") $timeinput = GUICtrlCreateInput($time, $width * 15 - 74, 1, 66, 40, BitOR($ES_READONLY, $ES_CENTER)) GUICtrlSetFont(-1, 20, 400, 0, "MS Sans Serif") createbuttons($width, $height) ;disperse mines For $i = 1 To $mines Do $rRow = Random(1, $height, 1) $rColumn = Random(1, $width, 1) Until $buttonnumber[$rRow][$rColumn] <> "mine" $buttonnumber[$rRow][$rColumn] = "mine" Next ;generate numbers For $i = 1 To $width For $j = 1 To $height If $buttonnumber[$i][$j] = "mine" Then ContinueLoop ;if not lefttopmost then check lefttop If $i > 1 Then If $j > 1 Then If $buttonnumber[$i - 1][$j - 1] = "mine" Then $buttonnumber[$i][$j] += 1 EndIf EndIf EndIf ;if not leftmost then check left If $i > 1 Then If $buttonnumber[$i - 1][$j] = "mine" Then $buttonnumber[$i][$j] += 1 EndIf EndIf ;if not leftbottommost then check leftbottom If $i > 1 Then If $j < $height Then If $buttonnumber[$i - 1][$j + 1] = "mine" Then $buttonnumber[$i][$j] += 1 EndIf EndIf EndIf ;if not bottommost then check botton If $j < $height Then If $buttonnumber[$i][$j + 1] = "mine" Then $buttonnumber[$i][$j] += 1 EndIf EndIf ;if not bottomrightmost then check bottomright If $i < $width Then If $j < $height Then If $buttonnumber[$i + 1][$j + 1] = "mine" Then $buttonnumber[$i][$j] += 1 EndIf EndIf EndIf ;if not rightmost then check right If $i < $width Then If $buttonnumber[$i + 1][$j] = "mine" Then $buttonnumber[$i][$j] += 1 EndIf EndIf ;if not righttopmost then check righttop If $i < $width Then If $j > 1 Then If $buttonnumber[$i + 1][$j - 1] = "mine" Then $buttonnumber[$i][$j] += 1 EndIf EndIf EndIf ;if not topmost then check top If $j > 1 Then If $buttonnumber[$i][$j - 1] = "mine" Then $buttonnumber[$i][$j] += 1 EndIf EndIf Next Next GUISetOnEvent($GUI_EVENT_CLOSE, "close", $maingui) GUISetState() EndFunc Func createbuttons($width, $height) For $i = 1 To $width For $j = 1 To $height $button[$i][$j] = GUICtrlCreateButton("", $i * 14 - 13, $j * 14 + 27, 15, 15, $BS_BITMAP) GUICtrlSetOnEvent(-1, "buttonclick") Next Next EndFunc Func buttonclick() For $i = 1 To $width For $j = 1 To $height If @GUI_CtrlId = $button[$i][$j] Then If $buttonnumber[$i][$j] = "mine" Then GUICtrlSetImage($button[$i][$j], @ScriptDir & "\bitmaps\mine.bmp") ElseIf $buttonnumber[$i][$j] = 1 Then GUICtrlSetImage($button[$i][$j], @ScriptDir & "\bitmaps\1.bmp") ElseIf $buttonnumber[$i][$j] = 2 Then GUICtrlSetImage($button[$i][$j], @ScriptDir & "\bitmaps\2.bmp") ElseIf $buttonnumber[$i][$j] = 3 Then GUICtrlSetImage($button[$i][$j], @ScriptDir & "\bitmaps\3.bmp") ElseIf $buttonnumber[$i][$j] = 4 Then GUICtrlSetImage($button[$i][$j], @ScriptDir & "\bitmaps\4.bmp") ElseIf $buttonnumber[$i][$j] = 5 Then GUICtrlSetImage($button[$i][$j], @ScriptDir & "\bitmaps\5.bmp") ElseIf $buttonnumber[$i][$j] = 6 Then GUICtrlSetImage($button[$i][$j], @ScriptDir & "\bitmaps\6.bmp") ElseIf $buttonnumber[$i][$j] = 7 Then GUICtrlSetImage($button[$i][$j], @ScriptDir & "\bitmaps\7.bmp") ElseIf $buttonnumber[$i][$j] = 8 Then GUICtrlSetImage($button[$i][$j], @ScriptDir & "\bitmaps\8.bmp") ElseIf $buttonnumber[$i][$j] = "" Then GUICtrlDelete($button[$i][$j]) ;check left & lefttop If $i > 1 Then If $buttonnumber[$i - 1][$j] = "" Then buttoncheck($i-1, $j) If $j > 1 Then If $buttonnumber[$i - 1][$j - 1] = "" Then buttoncheck($i - 1, $j - 1) EndIf EndIf EndIf EndIf ;check top & topright If $j > 1 Then If $buttonnumber[$i][$j - 1] = "" Then buttoncheck($i, $j - 1) If $i < $width Then If $buttonnumber[$i + 1][$j + 1] Then buttoncheck($i + 1, $j + 1) EndIf EndIf EndIf EndIf ;check right & rightbottom If $i < $width Then If $buttonnumber[$i + 1][$j] = "" Then buttoncheck($i + 1, $j) If $j < $height Then If $buttonnumber[$i + 1][$j + 1] = "" Then buttoncheck($i + 1, $j + 1) EndIf EndIf EndIf EndIf ;check bottom & bottomleft If $j < $height Then If $buttonnumber[$i][$j + 1] = "" Then buttoncheck($i, $j + 1) If $i > 1 Then If $buttonnumber[$i - 1][$j + 1] = "" Then buttoncheck($i - 1, $j + 1) EndIf EndIf EndIf EndIf EndIf EndIf Next Next EndFunc Func buttoncheck($i, $j) Local $ReturnArray[2] While 1 $ReturnArray = buttoncheck2($i, $j) If @error Then ExitLoop $i = $ReturnArray[0] $j = $ReturnArray[1] WEnd EndFunc Func buttoncheck2($i, $j) Local $ReturnArray[2] If $buttonnumber[$i][$j] = "mine" Then GUICtrlSetImage($button[$i][$j], @ScriptDir & "\bitmaps\mine.bmp") ElseIf $buttonnumber[$i][$j] = 1 Then GUICtrlSetImage($button[$i][$j], @ScriptDir & "\bitmaps\1.bmp") ElseIf $buttonnumber[$i][$j] = 2 Then GUICtrlSetImage($button[$i][$j], @ScriptDir & "\bitmaps\2.bmp") ElseIf $buttonnumber[$i][$j] = 3 Then GUICtrlSetImage($button[$i][$j], @ScriptDir & "\bitmaps\3.bmp") ElseIf $buttonnumber[$i][$j] = 4 Then GUICtrlSetImage($button[$i][$j], @ScriptDir & "\bitmaps\4.bmp") ElseIf $buttonnumber[$i][$j] = 5 Then GUICtrlSetImage($button[$i][$j], @ScriptDir & "\bitmaps\5.bmp") ElseIf $buttonnumber[$i][$j] = 6 Then GUICtrlSetImage($button[$i][$j], @ScriptDir & "\bitmaps\6.bmp") ElseIf $buttonnumber[$i][$j] = 7 Then GUICtrlSetImage($button[$i][$j], @ScriptDir & "\bitmaps\7.bmp") ElseIf $buttonnumber[$i][$j] = 8 Then GUICtrlSetImage($button[$i][$j], @ScriptDir & "\bitmaps\8.bmp") ElseIf $buttonnumber[$i][$j] = "" Then GUICtrlDelete($button[$i][$j]) $buttonnumber[$i][$j] = "0" ;check left & lefttop If ($i > 1) And ($buttonnumber[$i - 1][$j] = "") Then ;buttoncheck($i-1, $j) If ($j > 1) And ($buttonnumber[$i - 1][$j - 1] = "") Then $ReturnArray[0] = $i - 1 $ReturnArray[1] = $j - 1 ;buttoncheck($i - 1, $j - 1) Else $ReturnArray[0] = $i - 1 $ReturnArray[1] = $j EndIf ;check top & topright ElseIf ($j > 1) And ($buttonnumber[$i][$j - 1] = "") Then ;buttoncheck($i, $j - 1) If ($i < $width) And ($buttonnumber[$i + 1][$j + 1] = "") Then $ReturnArray[0] = $i + 1 $ReturnArray[1] = $j + 1 ;buttoncheck($i + 1, $j + 1) Else $ReturnArray[0] = $i $ReturnArray[1] = $j - 1 EndIf ;check right & rightbottom ElseIf ($i < $width) And ($buttonnumber[$i + 1][$j] = "") Then ;buttoncheck($i + 1, $j) If ($j < $height) And ($buttonnumber[$i + 1][$j + 1] = "") Then $ReturnArray[0] = $i + 1 $ReturnArray[1] = $j + 1 ;buttoncheck($i + 1, $j + 1) Else $ReturnArray[0] = $i + 1 $ReturnArray[1] = $j EndIf ;check bottom & bottomleft ElseIf ($j < $height) And ($buttonnumber[$i][$j + 1] = "") Then ;buttoncheck($i, $j + 1) If ($i > 1) And ($buttonnumber[$i - 1][$j + 1] = "") Then $ReturnArray[0] = $i $ReturnArray[1] = $j + 1 ;buttoncheck($i - 1, $j + 1) Else $ReturnArray[0] = $i - 1 $ReturnArray[1] = $j + 1 EndIf Else Return SetError(1) EndIf Return $ReturnArray EndIf EndFunc Func close() Exit EndFunc There is still a chance for the script to crash when buttoncheck2() returns nothing and doesn't set @error, which was also present in the original code as far as I can see, but I have to go now, so I'll leave that to you. Hope this helps you. Tom Edited July 31, 2009 by Tvern Link to comment Share on other sites More sharing options...
Hawkwing Posted August 8, 2009 Author Share Posted August 8, 2009 Well, I'm finally bored enough to work on this again. Checking adjacent squares, and then squares adjacent to those squares until it gets to a mine will likely always exceed the recursion level. I was thinking about maybe storing all of the "open spaces" in an array, but I'm not really sure where to begin. The Wheel of Time turns, and Ages come and pass, leaving memories that become legend. Legend fades to myth, and even myth is long forgotten when the Age that gave it birth comes again. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now