lokster Posted June 14, 2007 Share Posted June 14, 2007 (edited) If anyone can help me to translate this VBScript to AutoIt I will be very, very thankfull! I know this is very simple code, but I have difficulties translating it. Plz help! expandcollapse popupDim M(3,3) L = 3 H = 3 Randomize Sub g(byval x, byval y, d) i = x-1 j = y-1 u = x+1 v = y+1 If d<4 Then M(x,y) = M(x,y) Or 2^d Select Case d Case 0 M(x,j) = M(x,j) Or 4 Case 1 M(u,y) = M(u,y) Or 8 Case 2 M(x,v) = M(x,v) Or 1 Case 3 M(i,y) = M(i,y) Or 2 End Select If x<L And x*y>0 And y<H Then While (M(x,y) And Not 2^d)=0 Select Case int(4*Rnd) Case 0 If M(x,j) = 0 Then g x,j,2 Else If M(u,y)*M(x,v)*M(i,y)>0 Then M(x,y)=16 Case 1 If M(u,y) = 0 Then g u,y,3 Else If M(x,v)*M(i,y)*M(x,j)>0 Then M(x,y)=16 Case 2 If M(x,v) = 0 Then g x,v,0 Else If M(i,y)*M(x,j)*M(u,y)>0 Then M(x,y)=16 Case 3 If M(i,y) = 0 Then g i,y,1 Else If M(x,j)*M(u,y)*M(x,v)>0 Then M(x,y)=16 End Select Wend If M(x+1,y) = 0 Then g x+1,y,3 If M(x,y+1) = 0 Then g x,y+1,0 If M(x-1,y) = 0 Then g x-1,y,1 If M(x,y-1) = 0 Then g x,y-1,2 End If End Sub Anyone? Edited June 14, 2007 by lokster Link to comment Share on other sites More sharing options...
MrCreatoR Posted June 14, 2007 Share Posted June 14, 2007 I am try, but not sure if this wright... expandcollapse popupDim $M[3][3] = [[2, 3, 3], [2, 3, 3]] $L = 3 $H = 3 Dim $d Func g(ByRef $x, ByRef $y, $d) $i = $x-1 $j = $y-1 $u = $x+1 $v = $y+1 If $d < 4 Then $M[$x][$y] = $M[$x][$y] Switch $d Case 0 $M[$x][$j] = $M[$x][$j] Case 1 $M[$u][$y] = $M[$u][$y] Case 2 $M[$x][$v] = $M[$x][$v] Case 3 $M[$i][$y] = $M[$i][$y] EndSwitch If $x<$L And $x*$y>0 And $y<$H Then While ($M[$x][$y] And Not 2^$d)=0 Switch Random(0, 4) Case 0 If $M[$x][$j] = 0 Then $g = $x $j = 2 ElseIf $M[$u][$y]*$M[$x][$v]*$M[$i][$y]>0 Then $M[$x][$y]=16 EndIf Case 1 If $M[$u][$y] = 0 Then $g = $u $y = 3 ElseIf $M[$x][$v]*$M[$i][$y]*$M[$x][$j] > 0 Then $M[$x][$y]=16 EndIf Case 2 If $M[$x][$v] = 0 Then $g = $x $v = 0 ElseIf $M[$i][$y]*$M[$x][$j]*$M[$u][$y]>0 Then $M[$x][$y]=16 EndIf Case 3 If $M[$i][$y] = 0 Then $g = $i $y = 1 ElseIf $M[$x][$j]*$M[$u][$y]*$M[$x][$v]>0 Then $M[$x][$y]=16 EndIf EndSwitch Wend If $M[$x+1][$y] = 0 Then $g = $x+1 $y = 3 EndIf If $M[$x][$y+1] = 0 Then $g = $x $y = 1 EndIf If $M[$x-1][$y] = 0 Then $g = $x-1 $y = 1 EndIf If $M[$x][$y-1] = 0 Then $g = $x $y = 2 EndIf EndIf EndFunc I think it would be easyer if you just tell what this script supose to do, and then build it by AutoIt functions will be more correct.  Spoiler Using OS: Win 7 Professional, Using AutoIt Ver(s): 3.3.6.1 / 3.3.8.1  AutoIt Russian Community My Work... Spoiler Projects: ATT - Application Translate Tool {new}| BlockIt - Block files & folders {new}| SIP - Selected Image Preview {new}| SISCABMAN - SciTE Abbreviations Manager {new}| AutoIt Path Switcher | AutoIt Menu for Opera! | YouTube Download Center! | Desktop Icons Restorator | Math Tasks | KeyBoard & Mouse Cleaner | CaptureIt - Capture Images Utility | CheckFileSize ProgramUDFs: OnAutoItErrorRegister - Handle AutoIt critical errors {new}| AutoIt Syntax Highlight {new}| Opera Library! | Winamp Library | GetFolderToMenu | Custom_InputBox()! | _FileRun UDF | _CheckInput() UDF | _GUIInputSetOnlyNumbers() UDF | _FileGetValidName() UDF | _GUICtrlCreateRadioCBox UDF | _GuiCreateGrid() | _PathSplitByRegExp() | _GUICtrlListView_MoveItems - UDF | GUICtrlSetOnHover_UDF! | _ControlTab UDF! | _MouseSetOnEvent() UDF! | _ProcessListEx - UDF | GUICtrl_SetResizing - UDF! | Mod. for _IniString UDFs | _StringStripChars UDF | _ColorIsDarkShade UDF | _ColorConvertValue UDF | _GUICtrlTab_CoverBackground | CUI_App_UDF | _IncludeScripts UDF | _AutoIt3ExecuteCode | _DragList UDF | Mod. for _ListView_Progress | _ListView_SysLink | _GenerateRandomNumbers | _BlockInputEx | _IsPressedEx | OnAutoItExit Handler | _GUICtrlCreateTFLabel UDF | WinControlSetEvent UDF | Mod. for _DirGetSizeEx UDF Examples: ScreenSaver Demo - Matrix included | Gui Drag Without pause the script | _WinAttach()! | Turn Off/On Monitor | ComboBox Handler Example | Mod. for "Thinking Box" | Cool "About" Box | TasksBar Imitation Demo Like the Projects/UDFs/Examples? Please rate the topic (up-right corner of the post header: Rating ) * === My topics === * ================================================== ==================================================    AutoIt is simple, subtle, elegant. © AutoIt Team Link to comment Share on other sites More sharing options...
lokster Posted June 14, 2007 Author Share Posted June 14, 2007 (edited) Here it is the whole script: expandcollapse popupDim M(5,5) L = 5 H = 5 Randomize Sub g(byval x, byval y, d) i = x-1 j = y-1 u = x+1 v = y+1 If d<4 Then M(x,y) = M(x,y) Or 2^d Select Case d Case 0 M(x,j) = M(x,j) Or 4 Case 1 M(u,y) = M(u,y) Or 8 Case 2 M(x,v) = M(x,v) Or 1 Case 3 M(i,y) = M(i,y) Or 2 End Select If x<L And x*y>0 And y<H Then While (M(x,y) And Not 2^d)=0 Select Case int(4*Rnd) Case 0 If M(x,j) = 0 Then g x,j,2 Else If M(u,y)*M(x,v)*M(i,y)>0 Then M(x,y)=16 Case 1 If M(u,y) = 0 Then g u,y,3 Else If M(x,v)*M(i,y)*M(x,j)>0 Then M(x,y)=16 Case 2 If M(x,v) = 0 Then g x,v,0 Else If M(i,y)*M(x,j)*M(u,y)>0 Then M(x,y)=16 Case 3 If M(i,y) = 0 Then g i,y,1 Else If M(x,j)*M(u,y)*M(x,v)>0 Then M(x,y)=16 End Select Wend If M(x+1,y) = 0 Then g x+1,y,3 If M(x,y+1) = 0 Then g x,y+1,0 If M(x-1,y) = 0 Then g x-1,y,1 If M(x,y-1) = 0 Then g x,y-1,2 End If End Sub g 2,2,4 Set i = CreateObject("Scripting.FileSystemObject") j = "c:\$" Set u = i.CreateTextFile(j) For y = 0 To H For x = 0 To L u.Write("#" & Chr(61-(M(x,y) And 1)*29)) Next u.Write("#" & vbCrLf & "|") For x = 0 To L u.Write(" " & Chr(124-(M(x,y) And 2)*46)) Next u.Write(vbCrLf) Next u.Write(String(L*2+3,"#")) u.Close Set u = WScript.CreateObject("WScript.Shell") u.Run "notepad " & j, 3, -1 i.DeleteFile j This is a maze generator I found somewhere on the web, and I want to port it to autoit. It produces something like:#=#=#=#=#=#=# | | | | | | | #=# # # # #=# | | | #=# # #=# #=# | | | | #=# #=# # #=# | | | | | #=# #=# # #=# | | | #=# # # # #=# | | | | | | | ############# Edited June 14, 2007 by lokster Link to comment Share on other sites More sharing options...
MrCreatoR Posted June 16, 2007 Share Posted June 16, 2007 Ok, i think i got it... expandcollapse popupGlobal $M[4][4] $L = 3 $H = 3 Func g($x, $y, $d) $i = $x-1 $j = $y-1 $u = $x+1 $v = $y+1 If $d < 4 Then $M[$x][$y] = $M[$x][$y] Switch $d Case 0 $M[$x][$j] = $M[$x][$j] Case 1 $M[$u][$y] = $M[$u][$y] Case 2 $M[$x][$v] = $M[$x][$v] Case 3 $M[$i][$y] = $M[$i][$y] EndSwitch If $x<$L And $x*$y>0 And $y<$H Then While ($M[$x][$y] > 0 And 2^$d <> 0) Switch Random(0, 4) Case 0 If $M[$x][$j] = 0 Then g($x, $j, 2) ElseIf $M[$u][$y]*$M[$x][$v]*$M[$i][$y]>0 Then $M[$x][$y]=16 EndIf Case 1 If $M[$u][$y] = 0 Then g($u, $y, 3) ElseIf $M[$x][$v]*$M[$i][$y]*$M[$x][$j] > 0 Then $M[$x][$y]=16 EndIf Case 2 If $M[$x][$v] = 0 Then g($x, $v, 0) ElseIf $M[$i][$y]*$M[$x][$j]*$M[$u][$y]>0 Then $M[$x][$y]=16 EndIf Case 3 If $M[$i][$y] = 0 Then g($i, $y, 1) ElseIf $M[$x][$j]*$M[$u][$y]*$M[$x][$v]>0 Then $M[$x][$y]=16 EndIf EndSwitch Wend If $M[$x+1][$y] = 0 Then g($x+1,$y,3) If $M[$x][$y+1] = 0 Then g($x,$y+1,0) If $M[$x-1][$y] = 0 Then g($x-1,$y,1) If $M[$x][$y-1] = 0 Then g($x,$y-1,2) EndIf EndFunc g(2,2,4) $j = "c:\$" For $y = 0 To $H For $x = 0 To $L FileWrite($j, "#" & Chr(61-($M[$x][$y] And 1)*29)) Next FileWrite($j, "#" & @CRLF & "|") For $x = 0 To $L FileWrite($j, " " & Chr(124-($M[$x][$y] And 2)*46)) Next FileWrite($j, @CRLF) Next FileWrite($j, String("#########")) RunWait("notepad " & $j) FileDelete($j) But i get this error: Recursion level has been exceeded - AutoIt will quit to prevent stack overflow.: If $M[$x+1][$y] = 0 Then g($x+1,$y,3)  Spoiler Using OS: Win 7 Professional, Using AutoIt Ver(s): 3.3.6.1 / 3.3.8.1  AutoIt Russian Community My Work... Spoiler Projects: ATT - Application Translate Tool {new}| BlockIt - Block files & folders {new}| SIP - Selected Image Preview {new}| SISCABMAN - SciTE Abbreviations Manager {new}| AutoIt Path Switcher | AutoIt Menu for Opera! | YouTube Download Center! | Desktop Icons Restorator | Math Tasks | KeyBoard & Mouse Cleaner | CaptureIt - Capture Images Utility | CheckFileSize ProgramUDFs: OnAutoItErrorRegister - Handle AutoIt critical errors {new}| AutoIt Syntax Highlight {new}| Opera Library! | Winamp Library | GetFolderToMenu | Custom_InputBox()! | _FileRun UDF | _CheckInput() UDF | _GUIInputSetOnlyNumbers() UDF | _FileGetValidName() UDF | _GUICtrlCreateRadioCBox UDF | _GuiCreateGrid() | _PathSplitByRegExp() | _GUICtrlListView_MoveItems - UDF | GUICtrlSetOnHover_UDF! | _ControlTab UDF! | _MouseSetOnEvent() UDF! | _ProcessListEx - UDF | GUICtrl_SetResizing - UDF! | Mod. for _IniString UDFs | _StringStripChars UDF | _ColorIsDarkShade UDF | _ColorConvertValue UDF | _GUICtrlTab_CoverBackground | CUI_App_UDF | _IncludeScripts UDF | _AutoIt3ExecuteCode | _DragList UDF | Mod. for _ListView_Progress | _ListView_SysLink | _GenerateRandomNumbers | _BlockInputEx | _IsPressedEx | OnAutoItExit Handler | _GUICtrlCreateTFLabel UDF | WinControlSetEvent UDF | Mod. for _DirGetSizeEx UDF Examples: ScreenSaver Demo - Matrix included | Gui Drag Without pause the script | _WinAttach()! | Turn Off/On Monitor | ComboBox Handler Example | Mod. for "Thinking Box" | Cool "About" Box | TasksBar Imitation Demo Like the Projects/UDFs/Examples? Please rate the topic (up-right corner of the post header: Rating ) * === My topics === * ================================================== ==================================================    AutoIt is simple, subtle, elegant. © AutoIt Team Link to comment Share on other sites More sharing options...
Mast3rpyr0 Posted June 16, 2007 Share Posted June 16, 2007 can you not just compile the VB script? if you convert to autoit it will still do the same thing. My UDF's : _INetUpdateCheck() My Programs : GameLauncher vAlpha, InfoCrypt, WindowDesigner, ScreenCap, DailyRemindersPick3GeneratorBackupUtility! Other : Bored? Click Here! Link to comment Share on other sites More sharing options...
MrCreatoR Posted June 16, 2007 Share Posted June 16, 2007 can you not just compile the VB script?Then why not use direct VBS file, why he need the AutoIt?  Spoiler Using OS: Win 7 Professional, Using AutoIt Ver(s): 3.3.6.1 / 3.3.8.1  AutoIt Russian Community My Work... Spoiler Projects: ATT - Application Translate Tool {new}| BlockIt - Block files & folders {new}| SIP - Selected Image Preview {new}| SISCABMAN - SciTE Abbreviations Manager {new}| AutoIt Path Switcher | AutoIt Menu for Opera! | YouTube Download Center! | Desktop Icons Restorator | Math Tasks | KeyBoard & Mouse Cleaner | CaptureIt - Capture Images Utility | CheckFileSize ProgramUDFs: OnAutoItErrorRegister - Handle AutoIt critical errors {new}| AutoIt Syntax Highlight {new}| Opera Library! | Winamp Library | GetFolderToMenu | Custom_InputBox()! | _FileRun UDF | _CheckInput() UDF | _GUIInputSetOnlyNumbers() UDF | _FileGetValidName() UDF | _GUICtrlCreateRadioCBox UDF | _GuiCreateGrid() | _PathSplitByRegExp() | _GUICtrlListView_MoveItems - UDF | GUICtrlSetOnHover_UDF! | _ControlTab UDF! | _MouseSetOnEvent() UDF! | _ProcessListEx - UDF | GUICtrl_SetResizing - UDF! | Mod. for _IniString UDFs | _StringStripChars UDF | _ColorIsDarkShade UDF | _ColorConvertValue UDF | _GUICtrlTab_CoverBackground | CUI_App_UDF | _IncludeScripts UDF | _AutoIt3ExecuteCode | _DragList UDF | Mod. for _ListView_Progress | _ListView_SysLink | _GenerateRandomNumbers | _BlockInputEx | _IsPressedEx | OnAutoItExit Handler | _GUICtrlCreateTFLabel UDF | WinControlSetEvent UDF | Mod. for _DirGetSizeEx UDF Examples: ScreenSaver Demo - Matrix included | Gui Drag Without pause the script | _WinAttach()! | Turn Off/On Monitor | ComboBox Handler Example | Mod. for "Thinking Box" | Cool "About" Box | TasksBar Imitation Demo Like the Projects/UDFs/Examples? Please rate the topic (up-right corner of the post header: Rating ) * === My topics === * ================================================== ==================================================    AutoIt is simple, subtle, elegant. © AutoIt Team Link to comment Share on other sites More sharing options...
Mast3rpyr0 Posted June 16, 2007 Share Posted June 16, 2007 exaclty.. My UDF's : _INetUpdateCheck() My Programs : GameLauncher vAlpha, InfoCrypt, WindowDesigner, ScreenCap, DailyRemindersPick3GeneratorBackupUtility! Other : Bored? Click Here! Link to comment Share on other sites More sharing options...
randallc Posted June 17, 2007 Share Posted June 17, 2007 (edited) Hi,I can't do it by direct conversion * See next post, got it! [ ***** Still might be better to use This maze3vbs.au3 as higher dimensions give recursion error in AutoIt version ; - 50*50 vs 40*40 approx!]; but this works in AutoIt and might help debug it.I suspect the issue might be a different meaning of "or" and "and" in vbs; [bitAND works in the autoIt display file generation]Best, randallexpandcollapse popup;maze3vbs.au3 Local $LL = 50, $HH = 50, $MM[$LL+1][$HH+1], $mazeautxt = @ScriptDir & "\mazeau.txt",$arRead[1][1] $ar_GridMakeArray = _GridMakeArray(2,2,4, $MM, $LL, $HH) $j = FileOpen($mazeautxt, 2) For $y = 0 To $HH For $x = 0 To $LL FileWrite($j, "#" & Chr(61 - BitAND($ar_GridMakeArray[$y] [$x], 1) * 29)) Next FileWrite($j, "#" & @CRLF & "|") For $x = 0 To $LL FileWrite($j, " " & Chr(124 - BitAND($ar_GridMakeArray[$y] [$x], 2) * 46)) Next FileWrite($j, @CRLF) Next FileWrite($j, String("#############")) FileClose($j) RunWait("notepad " & $mazeautxt) FileDelete($j) Func _GridMakeArray($x, $y,$d, $M2, $L2, $H2) $code = 'function G_MakeArray( xx,yy,dd, M2, L2, H2)' $code &= @LF & ' Randomize' $code &= @LF & ' gg=g(xx,yy,dd,M2,L2,H2)' $code &= @LF & ' G_MakeArray=M2' $code &= @LF & 'End function' $code &= @LF & 'function g(byval x, byval y, d , byref M, byref L, byref H)' $code &= @LF & ' i = x-1' $code &= @LF & ' j = y-1' $code &= @LF & ' u = x+1' $code &= @LF & ' v = y+1' $code &= @LF & ' If d<4 Then M(x,y) = M(x,y) Or 2^d' $code &= @LF & ' Select Case d' $code &= @LF & ' Case 0' $code &= @LF & ' M(x,j) = M(x,j) Or 4' $code &= @LF & ' Case 1' $code &= @LF & ' M(u,y) = M(u,y) Or 8' $code &= @LF & ' Case 2' $code &= @LF & ' M(x,v) = M(x,v) Or 1' $code &= @LF & ' Case 3' $code &= @LF & ' M(i,y) = M(i,y) Or 2' $code &= @LF & ' End Select' $code &= @LF & ' If x<L And x*y>0 And y<H Then' $code &= @LF & ' While (M(x,y) And Not 2^d)=0' $code &= @LF & ' Select Case int(4*Rnd)' $code &= @LF & ' Case 0' $code &= @LF & ' If M(x,j) = 0 Then g x,j,2,M,L,H Else If M(u,y)*M(x,v)*M(i,y)>0 Then M(x,y)=16' $code &= @LF & ' Case 1' $code &= @LF & ' If M(u,y) = 0 Then g u,y,3,M,L,H Else If M(x,v)*M(i,y)*M(x,j)>0 Then M(x,y)=16' $code &= @LF & ' Case 2' $code &= @LF & ' If M(x,v) = 0 Then g x,v,0,M,L,H Else If M(i,y)*M(x,j)*M(u,y)>0 Then M(x,y)=16' $code &= @LF & ' Case 3' $code &= @LF & ' If M(i,y) = 0 Then g i,y,1,M,L,H Else If M(x,j)*M(u,y)*M(x,v)>0 Then M(x,y)=16' $code &= @LF & ' End Select' $code &= @LF & ' Wend' $code &= @LF & ' If M(x+1,y) = 0 Then g x+1,y,3,M,L,H ' $code &= @LF & ' If M(x,y+1) = 0 Then g x,y+1,0,M,L,H ' $code &= @LF & ' If M(x-1,y) = 0 Then g x-1,y,1,M,L,H ' $code &= @LF & ' If M(x,y-1) = 0 Then g x,y-1,2,M,L,H ' $code &= @LF & ' End If' $code &= @LF & 'End function' $vbs = ObjCreate("ScriptControl") $vbs.language = "vbscript" $vbs.addcode ($code) $returnArray = $vbs.Run("G_MakeArray", $x, $y,$d, $M2, $L2, $H2) $vbs = "" Return $returnArray EndFunc ;==>_GridMakeArraymaze3.au3 is my attempt at conversion [modified MScreatoR]* See next post Edited June 17, 2007 by randallc ExcelCOM... AccessCom.. Word2... FileListToArrayNew...SearchMiner... Regexps...SQL...Explorer...Array2D.. _GUIListView...array problem...APITailRW Link to comment Share on other sites More sharing options...
randallc Posted June 17, 2007 Share Posted June 17, 2007 (edited) OK,Now I think i have it; [ ***** Still might be better to use maze3vbs.au3 as higher dimensions give recursion error in AutoIt version ; - 50*50 vs 40*40 approx!]; but this works in AutoIt and might help debug it.expandcollapse popup;maze3.au3 Global $L = 5, $H = 5,$M[$L+1][$H+1], $uuWrite, $mazeautxt = @ScriptDir & "\mazeau.txt" Local $a = 2, $b = 2 g($a, $b, 4) $ar_GridMakeArray = $M $j = FileOpen($mazeautxt, 2) For $y = 0 To $H For $x = 0 To $L FileWrite($j, "#" & Chr(61 - BitAND($ar_GridMakeArray[$x][$y], 1) * 29)) Next FileWrite($j, "#" & @CRLF & "|") For $x = 0 To $L FileWrite($j, " " & Chr(124 - BitAND($ar_GridMakeArray[$x][$y], 2) * 46)) Next FileWrite($j, @CRLF) Next FileWrite($j, String("#############")) FileClose($j) RunWait("notepad " & $mazeautxt) FileDelete($j) Func g($x, $y, $d) Local $i = $x - 1, $j = $y - 1, $u = $x + 1, $v = $y + 1 If $d < 4 Then $M[$x][$y] = BitOR($M[$x][$y], (2 ^ $d)) Switch $d Case 0 $M[$x][$j] = BitOR($M[$x][$j], 4) Case 1 $M[$u][$y] = BitOR($M[$u][$y], 8) Case 2 $M[$x][$v] = BitOR($M[$x][$v], 1) Case 3 $M[$i][$y] = BitOR($M[$i][$y], 2) EndSwitch If ($x < $L) And ($x * $y) And ($y < $H) Then While Not BitAND($M[$x][$y], BitNOT(2 ^ $d)) Switch Int(Random(0, 4)) ;Select Case int(4*Rnd) Case 0 If $M[$x][$j] = 0 Then g($x, $j, 2) ElseIf $M[$u][$y] * $M[$x][$v] * $M[$i][$y] > 0 Then $M[$x][$y] = 16 EndIf Case 1 If $M[$u][$y] = 0 Then g($u, $y, 3) ElseIf $M[$x][$v] * $M[$i][$y] * $M[$x][$j] > 0 Then $M[$x][$y] = 16 EndIf Case 2 If $M[$x][$v] = 0 Then g($x, $v, 0) ElseIf $M[$i][$y] * $M[$x][$j] * $M[$u][$y] > 0 Then $M[$x][$y] = 16 EndIf Case 3 If $M[$i][$y] = 0 Then g($i, $y, 1) ElseIf $M[$x][$j] * $M[$u][$y] * $M[$x][$v] > 0 Then $M[$x][$y] = 16 EndIf EndSwitch WEnd If $M[$x + 1][$y] = 0 Then g($x + 1, $y, 3) If $M[$x][$y + 1] = 0 Then g($x, $y + 1, 0) If $M[$x - 1][$y] = 0 Then g($x - 1, $y, 1) If $M[$x][$y - 1] = 0 Then g($x, $y - 1, 2) EndIf EndFunc ;==>gBest, Randall Edited June 17, 2007 by randallc ExcelCOM... AccessCom.. Word2... FileListToArrayNew...SearchMiner... Regexps...SQL...Explorer...Array2D.. _GUIListView...array problem...APITailRW Link to comment Share on other sites More sharing options...
randallc Posted June 17, 2007 Share Posted June 17, 2007 (edited) Or, To compact it! [ ***** Still might be better to use maze3vbs.au3 as higher dimensions give recursion error in AutoIt version ; - 50*50 vs 40*40 approx!]expandcollapse popup#include<misc.au3>;maze6.au3 #include<string.au3> Global $L = 50, $H = 20,$M[$L+1][$H+1], $uuWrite, $mazeautxt = @ScriptDir & "\mazeau.txt",$a = 2, $b = 2,$j = FileOpen($mazeautxt, 2) g(2, 2, 4) For $y = 0 To $H For $x = 0 To $L FileWrite($j, "#" & Chr(61 - BitAND($M[$x][$y], 1) * 29)&_iif($x=$L,"#" & @CRLF & "|","")) Next For $x = 0 To $L FileWrite($j, " " & Chr(124 - BitAND($M[$x][$y], 2) * 46)&_iif($x=$L,_iif($y=$H,@CRLF&_StringRepeat("#",$L*2+3) ,@CRLF),"")) Next Next FileClose($j) RunWait("notepad " & $mazeautxt) Func g($x, $y, $d) Local $i = $x - 1, $j = $y - 1, $u = $x + 1, $v = $y + 1 If $d < 4 Then $M[$x][$y] = BitOR($M[$x][$y], (2 ^ $d)) If $d = 0 Then $M[$x][$j] = _Iif($d = 0, BitOR($M[$x][$j], 4), $M[$x][$j]) If $d = 1 Then $M[$u][$y] = _Iif($d = 1, BitOR($M[$u][$y], 8), $M[$u][$y]) If $d = 2 Then $M[$x][$v] = _Iif($d = 2, BitOR($M[$x][$v], 1), $M[$x][$v]) If $d = 3 Then $M[$i][$y] = _Iif($d = 3, BitOR($M[$i][$y], 2), $M[$i][$y]) If ($x < $L) And ($x * $y) And ($y < $H) Then While Not BitAND($M[$x][$y], BitNOT(2 ^ $d)) Local $z = Int(Random(0, 4)), $w0 = $M[$x][$j], $w1 = $M[$u][$y], $w2 = $M[$x][$v], $w3 = $M[$i][$y] If $z = 0 And Not $w0 Then g($x, $j, 2) If $z = 0 And $w0 Then $M[$x][$y] = _Iif($M[$u][$y] * $M[$x][$v] * $M[$i][$y], 16, $M[$x][$y]) If $z = 1 And Not $w1 Then g($u, $y, 3) If $z = 1 And $w1 Then $M[$x][$y] = _Iif($M[$x][$v] * $M[$i][$y] * $M[$x][$j], 16, $M[$x][$y]) If $z = 2 And Not $w2 Then g($x, $v, 0) If $z = 2 And $w2 Then $M[$x][$y] = _Iif($M[$i][$y] * $M[$x][$j] * $M[$u][$y], 16, $M[$x][$y]) If $z = 3 And Not $w3 Then g($i, $y, 1) If $z = 3 And $w3 Then $M[$x][$y] = _Iif($M[$x][$j] * $M[$u][$y] * $M[$x][$v], 16, $M[$x][$y]) WEnd If $M[$x + 1][$y] = 0 Then g($x + 1, $y, 3) If $M[$x][$y + 1] = 0 Then g($x, $y + 1, 0) If $M[$x - 1][$y] = 0 Then g($x - 1, $y, 1) If $M[$x][$y - 1] = 0 Then g($x, $y - 1, 2) EndIf EndFunc ;==>g Edited June 17, 2007 by randallc ExcelCOM... AccessCom.. Word2... FileListToArrayNew...SearchMiner... Regexps...SQL...Explorer...Array2D.. _GUIListView...array problem...APITailRW 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