FireFox Posted February 2, 2009 Posted February 2, 2009 @JamesBrooks No I mean : CLEAR COLOR 0xFFFFFF FORWARD 150 COLOR 0x0000FF FORWARD 50 TURN 90 WAIT 1000]oÝ÷ Ù«¢+Ù 1H) =1=HÁá)=I]IÄÔÀ) Cheers, FireFox.
James Posted February 2, 2009 Author Posted February 2, 2009 Oh it's the code that Andreik sent me, I haven't been able to test it yet. Blog - Seriously epic web hosting - Twitter - GitHub - Cachet HQ
Andreik Posted February 2, 2009 Posted February 2, 2009 (edited) Oh it's the code that Andreik sent me, I haven't been able to test it yet.Just test the code that you post and don't work. Maybe I sent you something wrong or you forgot some lines . Try this, for me work fine: expandcollapse popup#include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <String.au3> #include <Array.au3> Global $arrDic[7] = ["FORWARD", "COLOR", "CLEAR", "WAIT", "DO", "SIZE", "TURN"] Global $arrCols[4][2] = [["BLACK", "0x000000"],["RED", "0xFF0000"],["BLUE", "0x0000FF"],["GREEN", "0x00FF00"]] Global $turtle = @ScriptDir & '\turtle.gif', $Count = 0, $picDraw Global Const $Pi = 3.14159265358979323846264338328 Global $oldX = 228, $oldY = 300, $oldA = 90, $penColor = 0x000000, $penSize = 1 Global Const $degToRad = $Pi / 180 $guiMain = GUICreate("A3 LOGO Interpreter", 474, 445) GUICtrlCreateGroup("", 8, 336, 457, 105) $strCmd = GUICtrlCreateEdit("", 16, 352, 377, 81, BitOR($ES_AUTOVSCROLL, $ES_WANTRETURN, $WS_VSCROLL, $WS_HSCROLL,$ES_AUTOHSCROLL)) $btnRun = GUICtrlCreateButton("&Run", 400, 352, 57, 81, 0) GUICtrlCreateGroup("", -99, -99, 1, 1) $picDraw = GUICtrlCreateGraphic(8, 8, 457, 330) GUICtrlSetBkColor(-1, 0xFFFFFF) GUICtrlSetGraphic(-1, $GUI_GR_MOVE, $oldX, $oldY) $picTurt = GUICtrlCreatePic($turtle, 228, 300, 20, 24) GUISetState(@SW_SHOW) While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $btnRun ControlDisable("A3 LOGO Interpreter","",$btnRun) Command() ControlEnable("A3 LOGO Interpreter","",$btnRun) EndSwitch WEnd Func Turtle($x, $y, $color = $penColor, $size = $penSize) GUICtrlSetGraphic($picDraw, $GUI_GR_MOVE, $oldX, $oldY) GUICtrlSetGraphic($picDraw, $GUI_GR_PENSIZE, $size) GUICtrlSetGraphic($picDraw, $GUI_GR_COLOR, $color) GUICtrlSetGraphic($picDraw, $GUI_GR_LINE, $x, $y) GUICtrlSetGraphic($picDraw, $GUI_GR_REFRESH) $oldY = $y $oldX = $x GUICtrlSetPos($picTurt, $x, $y) EndFunc ;==>Turtle Func Command() $Line = StringSplit(StringStripCR(GUICtrlRead($strCmd)), @LF) For $i = 1 To $Line[0] If $Line[$i] = "" Then ContinueLoop EndIf If StringInStr($Line[$i], " ") Then $ThisThing = StringLeft($Line[$i], StringInStr($Line[$i], " ") - 1) Else $ThisThing = $Line[$i] EndIf Switch StringUpper($ThisThing) Case $arrDic[0]; FORWARD Call("FORWARD",$Line[$i]) Case $arrDic[1]; COLOR Call("COLOR",$Line[$i]) Case $arrDic[2]; CLEAR ClearGraphic() Case $arrDic[3]; WAIT Call("WAIT",$Line[$i]) Case $arrDic[4]; DO (Loop) Call("DoLoop",$Line[$i]) Case $arrDic[5]; SIZE Call("SIZE",$Line[$i]) Case $arrDic[6]; TURN Call("TURN",$Line[$i]) Case Else MsgBox(0, "LOGO", "Error: Unexpected command: " & $ThisThing) EndSwitch Next EndFunc ;==>Command Func FORWARD($Line) $ThisY = StringSplit($Line, " ") If IsArray($ThisY) Then Turtle($oldX + ( Cos($oldA * $degToRad) * $ThisY[2]) , $oldY - ( Sin($oldA * $degToRad) * $ThisY[2])) EndFunc Func Color($Line) $getPen = StringSplit($Line, " ") If IsArray($getPen) Then $penColor = $getPen[2] EndFunc Func WAIT($Line) $Time = StringSplit($Line, " ") If IsArray($Time) Then Sleep($Time[2]) EndFunc Func SIZE($Line) $getSize = StringSplit($Line, " ") If IsArray($getSize) Then $penSize = $getSize[2] EndFunc Func TURN($Line) $ThisTurn = StringSplit($Line, " ") If Not IsArray($ThisTurn) Then MsgBox(0, "LOGO", "Error: TURN requires a degree.") Else $oldA += Number($ThisTurn[2]) While ($oldA > 360) $oldA -= 360 WEnd While ($oldA < 0) $oldA += 360 WEnd ;Turtle($oldX - $ThisTurn[2], $oldY) EndIf EndFunc Func ClearGraphic() For $INDEX = 0 To $Count GUICtrlDelete($picDraw) GUICtrlCreateGraphic(8, 8, 457, 330) GUICtrlSetBkColor(-1, 0xFFFFFF) GUICtrlSetGraphic(-1, $GUI_GR_MOVE, $oldX, $oldY) $oldX = 228 $oldY = 300 $oldA = 90 Turtle(228, 300) Next $Count = 0 EndFunc ;==>ClearGraphic Func DoLoop($LINE) Local $WORK = _StringBetween($LINE,"[","]") Local $LOOP = StringLeft($LINE,StringInStr($LINE,"[")-2) Local $LOOPS = StringSplit($LOOP," ") If IsArray($LOOPS) Then Local $COMMANDS = StringSplit($WORK[0]," ",1) If IsArray($COMMANDS) Then For $INDEX = 1 To $LOOPS[2] For $COMMAND_INDEX = 1 To $COMMANDS[0] If StringLeft($COMMANDS[$COMMAND_INDEX],7) = "FORWARD" Then Call("FORWARD",$COMMANDS[$COMMAND_INDEX]) ElseIf StringLeft($COMMANDS[$COMMAND_INDEX],5) = "COLOR" Then Call("COLOR",$COMMANDS[$COMMAND_INDEX]) ElseIf StringLeft($COMMANDS[$COMMAND_INDEX],5) = "CLEAR" Then Call("ClearGraphic") ElseIf StringLeft($COMMANDS[$COMMAND_INDEX],4) = "WAIT" Then Call("WAIT",$COMMANDS[$COMMAND_INDEX]) ElseIf StringLeft($COMMANDS[$COMMAND_INDEX],4) = "SIZE" Then Call("SIZE",$COMMANDS[$COMMAND_INDEX]) ElseIf StringLeft($COMMANDS[$COMMAND_INDEX],4) = "TURN" Then Call("TURN",$COMMANDS[$COMMAND_INDEX]) EndIf Next Next EndIf EndIf EndFunc Edited February 2, 2009 by Andreik
James Posted February 2, 2009 Author Posted February 2, 2009 Weird. I copied it straight across. Blog - Seriously epic web hosting - Twitter - GitHub - Cachet HQ
Andreik Posted February 2, 2009 Posted February 2, 2009 @JamesBrooks You can modify COLOR function to be more useful. Something like random color or a random color in a range would be very nice. I tried to modify little, hope you like: Func Color($Line) $getPen = StringSplit($Line, " ") If IsArray($getPen) Then If StringLeft($getPen[2],6) = "RANDOM" Then If StringLen($getPen[2]) > 6 Then Local $RANGE = _StringBetween(StringTrimLeft($getPen[2],6),"{","}") If IsArray($RANGE) Then Local $SPLIT = StringSplit($RANGE[0],"-") If IsArray($SPLIT) Then $penColor = Random($SPLIT[1],$SPLIT[2],1) EndIf EndIf Else $penColor = Random(0x000000,0xFFFFFF,1) EndIf Else $penColor = $getPen[2] EndIf EndIf EndFunc Now should be possible code like: CLEAR COLOR 0xFFFFFF FORWARD 150 DO 4 [COLOR RANDOM FORWARD 50 TURN 90 WAIT 1000] or CLEAR COLOR 0xFFFFFF FORWARD 150 DO 4 [COLOR RANDOM{0x80FF00-0xCDFFFF} FORWARD 50 TURN 90 WAIT 1000]
FireFox Posted February 2, 2009 Posted February 2, 2009 @JamesBrooks What about this one Note : No more includes (only String.au3), Added picture choice ! expandcollapse popup;~ #include <EditConstants.au3> ;~ #include <GUIConstantsEx.au3> ;~ #include <WindowsConstants.au3> #include <String.au3> ;~ #include <Array.au3> Global $arrDic[7] = ['FORWARD', 'COLOR', 'CLEAR', 'WAIT', 'DO', 'SIZE', 'TURN'] Global $arrCols[4][2] = [['BLACK', '0x000000'],['RED', '0xFF0000'],['BLUE', '0x0000FF'],['GREEN', '0x00FF00']] Global $Count = 0, $picDraw Global Const $Pi = 3.14159265358979323846264338328 Global $oldA = 90, $penColor = 0x000000, $penSize = 1 Global Const $degToRad = $Pi / 180 #Region Start $pic = FileOpenDialog('Browse for picture...', @ScriptDir, 'gif (*.gif)|bmp (*.bmp)|png (*.png)|jpg (*.jpg)', 1 + 2, 'turtle.gif') If @error Then Global $turtle = @ScriptDir & '\turtle.gif' Global $Width = 22 Global $Height = 24 Global $oldX = 228, $oldY = 300 Else Global $turtle = $pic Global $Width = StringTrimRight(_GetExtProperty($pic, 27), 7) Global $Height = StringTrimRight(_GetExtProperty($pic, 28), 7) Global $oldX = 237 - ($Width / 2), $oldY = 200 - ($Height / 2) EndIf ;=============================================================================== ; Function Name: _GetExtProperty ; Author(s): Simucal ;=============================================================================== Func _GetExtProperty($sPath, $iProp) Local $iExist, $sFile, $sDir, $oShellApp, $oDir, $oFile, $aProperty, $sProperty $sFile = StringTrimLeft($sPath, StringInStr($sPath, '\', 0, -1)) $sDir = StringTrimRight($sPath, (StringLen($sPath) - StringInStr($sPath, '\', 0, -1))) $oShellApp = ObjCreate('shell.application') $oDir = $oShellApp.NameSpace($sDir) $oFile = $oDir.Parsename($sFile) If $iProp = -1 Then Local $aProperty[35] For $i = 0 To 34 $aProperty[$i] = $oDir.GetDetailsOf($oFile, $i) Next Return $aProperty Else $sProperty = $oDir.GetDetailsOf($oFile, $iProp) If $sProperty = '' Then Return 'None' Else Return $sProperty EndIf EndIf EndFunc ;==>_GetExtProperty #EndRegion Start ; #Region GUI $guiMain = GUICreate('A3 LOGO Interpreter', 474, 445) GUICtrlCreateGroup('', 8, 336, 457, 105) $strCmd = GUICtrlCreateEdit('', 16, 352, 377, 81, 3150016) $btnRun = GUICtrlCreateButton('&Run', 400, 352, 57, 81, 0) GUICtrlCreateGroup('', -99, -99, 1, 1) $picDraw = GUICtrlCreateGraphic(8, 8, 457, 330) GUICtrlSetBkColor(-1, 0xFFFFFF) GUICtrlSetGraphic(-1, 6, $oldX, $oldY) $picTurt = GUICtrlCreatePic($pic, $oldX, $oldY, $Width, $Height) GUISetState(@SW_SHOW) #EndRegion GUI While 1 $nMsg = GUIGetMsg() Switch $nMsg Case - 3 Exit Case $btnRun ControlDisable('A3 LOGO Interpreter', '', $btnRun) Command() ControlEnable('A3 LOGO Interpreter', '', $btnRun) EndSwitch WEnd #include <GuiConstantsEx.au3> Func Turtle($x, $y, $color = $penColor, $size = $penSize) GUICtrlSetGraphic($picDraw, 6, $oldX, $oldY) GUICtrlSetGraphic($picDraw, 24, $size) GUICtrlSetGraphic($picDraw, 8, $color) GUICtrlSetGraphic($picDraw, 2, $x, $y) GUICtrlSetGraphic($picDraw, 22) $oldY = $y $oldX = $x GUICtrlSetPos($picTurt, $x, $y) EndFunc ;==>Turtle Func Command() $Line = StringSplit(StringStripCR(GUICtrlRead($strCmd)), @LF) For $i = 1 To $Line[0] If $Line[$i] = '' Then ContinueLoop EndIf If StringInStr($Line[$i], ' ') Then $ThisThing = StringLeft($Line[$i], StringInStr($Line[$i], ' ') - 1) Else $ThisThing = $Line[$i] EndIf Switch StringUpper($ThisThing) Case $arrDic[0]; FORWARD Call('FORWARD', $Line[$i]) Case $arrDic[1]; COLOR Call('COLOR', $Line[$i]) Case $arrDic[2]; CLEAR ClearGraphic() Case $arrDic[3]; WAIT Call('WAIT', $Line[$i]) Case $arrDic[4]; DO (Loop) Call('DoLoop', $Line[$i]) Case $arrDic[5]; SIZE Call('SIZE', $Line[$i]) Case $arrDic[6]; TURN Call('TURN', $Line[$i]) Case Else MsgBox(0, 'LOGO', 'Error: Unexpected command: ' & $ThisThing) EndSwitch Next EndFunc ;==>Command Func FORWARD($Line) $ThisY = StringSplit($Line, ' ') If IsArray($ThisY) Then Turtle($oldX + (Cos($oldA * $degToRad) * $ThisY[2]), $oldY - (Sin($oldA * $degToRad) * $ThisY[2])) EndFunc ;==>FORWARD Func Color($Line) $getPen = StringSplit($Line, ' ') If IsArray($getPen) Then $penColor = $getPen[2] EndFunc ;==>Color Func WAIT($Line) $Time = StringSplit($Line, ' ') If IsArray($Time) Then Sleep($Time[2]) EndFunc ;==>WAIT Func SIZE($Line) $getSize = StringSplit($Line, ' ') If IsArray($getSize) Then $penSize = $getSize[2] EndFunc ;==>SIZE Func TURN($Line) $ThisTurn = StringSplit($Line, ' ') If Not IsArray($ThisTurn) Then MsgBox(0, 'LOGO', 'Error: TURN requires a degree.') Else $oldA += Number($ThisTurn[2]) While ($oldA > 360) $oldA -= 360 WEnd While ($oldA < 0) $oldA += 360 WEnd ;Turtle($oldX - $ThisTurn[2], $oldY) EndIf EndFunc ;==>TURN Func ClearGraphic() For $INDEX = 0 To $Count GUICtrlDelete($picDraw) GUICtrlCreateGraphic(8, 8, 457, 330) GUICtrlSetBkColor(-1, 0xFFFFFF) GUICtrlSetGraphic(-1, 6, $oldX, $oldY) $oldX = 228 $oldY = 300 $oldA = 90 Turtle(228, 300) Next $Count = 0 EndFunc ;==>ClearGraphic Func DoLoop($Line) Local $WORK = _StringBetween($Line, '[', ']') Local $LOOP = StringLeft($Line, StringInStr($Line, '[') - 2) Local $LOOPS = StringSplit($LOOP, ' ') If IsArray($LOOPS) Then Local $COMMANDS = StringSplit($WORK[0], ' ', 1) If IsArray($COMMANDS) Then For $INDEX = 1 To $LOOPS[2] For $COMMAND_INDEX = 1 To $COMMANDS[0] If StringLeft($COMMANDS[$COMMAND_INDEX], 7) = 'FORWARD' Then Call('FORWARD', $COMMANDS[$COMMAND_INDEX]) ElseIf StringLeft($COMMANDS[$COMMAND_INDEX], 5) = 'COLOR' Then Call('COLOR', $COMMANDS[$COMMAND_INDEX]) ElseIf StringLeft($COMMANDS[$COMMAND_INDEX], 5) = 'CLEAR' Then Call('ClearGraphic') ElseIf StringLeft($COMMANDS[$COMMAND_INDEX], 4) = 'WAIT' Then Call('WAIT', $COMMANDS[$COMMAND_INDEX]) ElseIf StringLeft($COMMANDS[$COMMAND_INDEX], 4) = 'SIZE' Then Call('SIZE', $COMMANDS[$COMMAND_INDEX]) ElseIf StringLeft($COMMANDS[$COMMAND_INDEX], 4) = 'TURN' Then Call('TURN', $COMMANDS[$COMMAND_INDEX]) EndIf Next Next EndIf EndIf EndFunc ;==>DoLoop
James Posted February 2, 2009 Author Posted February 2, 2009 Nice work guys! I am planning on also rotating the turtle with some GDI, just need to work it out. Blog - Seriously epic web hosting - Twitter - GitHub - Cachet HQ
James Posted February 2, 2009 Author Posted February 2, 2009 (edited) @JamesBrooks You can modify COLOR function to be more useful. Something like random color or a random color in a range would be very nice. I tried to modify little, hope you like: Func Color($Line) $getPen = StringSplit($Line, " ") If IsArray($getPen) Then If StringLeft($getPen[2],6) = "RANDOM" Then If StringLen($getPen[2]) > 6 Then Local $RANGE = _StringBetween(StringTrimLeft($getPen[2],6),"{","}") If IsArray($RANGE) Then Local $SPLIT = StringSplit($RANGE[0],"-") If IsArray($SPLIT) Then $penColor = Random($SPLIT[1],$SPLIT[2],1) EndIf EndIf Else $penColor = Random(0x000000,0xFFFFFF,1) EndIf Else $penColor = $getPen[2] EndIf EndIf EndFunc Now should be possible code like: CLEAR COLOR 0xFFFFFF FORWARD 150 DO 4 [COLOR RANDOM FORWARD 50 TURN 90 WAIT 1000] or CLEAR COLOR 0xFFFFFF FORWARD 150 DO 4 [COLOR RANDOM{0x80FF00-0xCDFFFF} FORWARD 50 TURN 90 WAIT 1000]Wow brilliant addition! Next is PROC: PROC SQUARE COLOR RANDOM FORWARD 20 TURN 45 } I am sure I an get that one down Edited February 2, 2009 by JamesBrooks Blog - Seriously epic web hosting - Twitter - GitHub - Cachet HQ
Andreik Posted February 2, 2009 Posted February 2, 2009 (edited) Wow brilliant addition! Next is PROC: PROC SQUARE COLOR RANDOM FORWARD 20 TURN 45 } I am sure I an get that one down I create a Square function: Func SQUARE($Line) Local $SPLIT = StringSplit($Line," ") If IsArray($SPLIT) Then If $SPLIT[0] = 3 Then DoLoop("DO 4 [COLOR " & $SPLIT[2] & " FORWARD " & $SPLIT[3] & " TURN 90]") ElseIf $SPLIT[0] = 2 Then DoLoop("DO 4 [FORWARD " & $SPLIT[2] & " TURN 90]") EndIf EndIf EndFunc It`s very easy to use: SQUARE COLOR SIDE_LEN or SQUARE SIDE_LEN Second syntax when you want to use default color. Example: CLEAR COLOR 0xFFFFFF FORWARD 150 DO 4 [SQUARE RANDOM 40 TURN 90 COLOR 0xFFFFFF FORWARD 20] Edited February 2, 2009 by Andreik
jvanegmond Posted February 2, 2009 Posted February 2, 2009 Andreik, LOGO is a real programming language.http://en.wikipedia.org/wiki/Logo_(programming_language) github.com/jvanegmond
James Posted February 2, 2009 Author Posted February 2, 2009 Andreik, LOGO is a real programming language.http://en.wikipedia.org/wiki/Logo_(programming_language)Which is what I am basing it on. With everything being so simple I aim to hand it to a primary school. Blog - Seriously epic web hosting - Twitter - GitHub - Cachet HQ
Andreik Posted February 2, 2009 Posted February 2, 2009 Andreik, LOGO is a real programming language.http://en.wikipedia.org/wiki/Logo_(programming_language)I didn't know. I will take a look.
James Posted February 2, 2009 Author Posted February 2, 2009 It's fun. I suggest looking at this. I need to change some command names to make it compatible though. Blog - Seriously epic web hosting - Twitter - GitHub - Cachet HQ
Andreik Posted February 2, 2009 Posted February 2, 2009 (edited) It's fun. I suggest looking at this. I need to change some command names to make it compatible though.And DO function as well, because between parameters are 2 spaces and on mathsnet is only one.And I suggest to rewrite all script again to be a little more aesthetic and remove all useless code and write efficient code (some functions could be write a more simple). Edited February 2, 2009 by Andreik
James Posted February 2, 2009 Author Posted February 2, 2009 And DO function as well, because between parameters are 2 spaces and on mathsnet is only one.And I suggest to rewrite all script again to be a little more aesthetic and remove all useless code and write efficient code (some functions could be write a more simple).I plan too, with the help you guys have been giving me and a possible snow day tomorrow... I hope to get it done. Blog - Seriously epic web hosting - Twitter - GitHub - Cachet HQ
AzKay Posted February 3, 2009 Posted February 3, 2009 (edited) Maybe add some form of "limit", or a scrollable workspace.x33EDIT::Also; for the turtle, maybe use something like this:http://www.autoitscript.com/forum/index.ph...e++from++memoryThat would save having a turtle.gif, and shouldnt be too hard to rotate with the GDI* functions. Edited February 3, 2009 by AzKay # MY LOVE FOR YOU... IS LIKE A TRUCK- #
BrettF Posted February 3, 2009 Posted February 3, 2009 (edited) I used this in primary school... It rocked then, it rocks now, as does this! Nice work james! Edited February 3, 2009 by BrettF Vist my blog!UDFs: Opens The Default Mail Client | _LoginBox | Convert Reg to AU3 | BASS.au3 (BASS.dll) (Includes various BASS Libraries) | MultiLang.au3 (Multi-Language GUIs!)Example Scripts: Computer Info Telnet Server | "Secure" HTTP Server (Based on Manadar's Server)Software: AAMP- Advanced AutoIt Media Player | WorldCam | AYTU - Youtube Uploader Tutorials: Learning to Script with AutoIt V3Projects (Hardware + AutoIt): ArduinoUseful Links: AutoIt 1-2-3 | The AutoIt Downloads Section: | SciTE4AutoIt3 Full Version!
James Posted February 3, 2009 Author Posted February 3, 2009 AzKay, limits will be here soon. Just need to work out angle distances etc Brett, thankies Blog - Seriously epic web hosting - Twitter - GitHub - Cachet HQ
AzKay Posted February 3, 2009 Posted February 3, 2009 Cant wait. # MY LOVE FOR YOU... IS LIKE A TRUCK- #
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