Langton's ant: Difference between revisions
Content added Content deleted
(Added COBOL solution.) |
(implementation AutoIt solution) |
||
Line 320: | Line 320: | ||
................................................................................................... |
................................................................................................... |
||
...................................................................................................</pre> |
...................................................................................................</pre> |
||
=={{header|AutoIt}}== |
|||
<lang AutoIt> |
|||
Global $iCountMax = 100000 |
|||
Global $aFields[100][100][2] |
|||
Global $iDelayStep = 10 ; stop between steps in msec |
|||
Global $aDirection[4][4] = [ _ ; [ direction 0-3 ][ left change x, y, right change x, y ] |
|||
[-1, 0, +1, 0], _ ; == direction 0 |
|||
[ 0, -1, 0, +1], _ ; == direction 1 |
|||
[+1, 0, -1, 0], _ ; == direction 2 |
|||
[ 0, +1, 0, -1]] ; == direction 3 |
|||
Global $hGui = GUICreate("Langton's ant", 100*8, 100*8) |
|||
GUISetBkColor(0xFFFFFF) |
|||
For $i = 0 To 99 |
|||
For $j = 0 To 99 |
|||
$aFields[$i][$j][0] = GUICtrlCreateLabel('', $j*8, $i*8) |
|||
GUICtrlSetColor(-1, 0xFF0000) |
|||
$aFields[$i][$j][1] = 0 |
|||
Next |
|||
Next |
|||
GUISetState() |
|||
GUICtrlSetData($aFields[49][49][0], '#') |
|||
Do |
|||
Sleep($iDelayStep) |
|||
Until Not _SetAnt() |
|||
Do |
|||
Until GUIGetMsg() = -3 |
|||
Func _SetAnt() |
|||
Local Static $iRowLast = 49, $iColLast = 49, $iCount = 0 |
|||
Local Static $aCol[2] = [0xFFFFFF,0x000000], $iDirection = 0 |
|||
Local $iRow, $iCol, $fRight = False |
|||
If $iCount = $iCountMax Then Return 0 |
|||
; == get current color |
|||
Local $iLastColor = $aFields[$iRowLast][$iColLast][1] |
|||
; == go to left/right |
|||
If $iLastColor = 0 Then $fRight = True |
|||
; == set the ant to the next field |
|||
Local $indexX = 0, $indexY = 1 |
|||
If $fRight Then |
|||
$indexX = 2 |
|||
$indexY = 3 |
|||
EndIf |
|||
$iRow = $iRowLast + ($aDirection[$iDirection][$indexX]) |
|||
$iCol = $iColLast + ($aDirection[$iDirection][$indexY]) |
|||
If $iRow < 0 Or $iRow > 99 Or $iCol < 0 Or $iCol > 99 Then Return 0 |
|||
GUICtrlSetData($aFields[$iRowLast][$iColLast][0], '') |
|||
GUICtrlSetData($aFields[$iRow][$iCol][0], '#') |
|||
; == direction for next step |
|||
If $fRight Then |
|||
$iDirection += 1 |
|||
If $iDirection = 4 Then $iDirection = 0 |
|||
Else |
|||
$iDirection -= 1 |
|||
If $iDirection = -1 Then $iDirection = 3 |
|||
EndIf |
|||
; == change the color of the current field |
|||
GUICtrlSetBkColor($aFields[$iRowLast][$iColLast][0], $aCol[(Not $iLastColor)*1]) |
|||
$aFields[$iRowLast][$iColLast][1] = (Not $iLastColor)*1 |
|||
$iRowLast = $iRow |
|||
$iColLast = $iCol |
|||
$iCount += 1 |
|||
WinSetTitle($hGui, '', "Langton's ant [ step: " & StringFormat('%06d', $iCount) & " ]") |
|||
Return 1 |
|||
EndFunc ;==>_SetAnt |
|||
</lang> |
|||
[http://www.imgbox.de/users/BugFix/langtons_ant.png To see the GUI output, click here.] |
|||
--[[User:BugFix|BugFix]] ([[User talk:BugFix|talk]]) 14:48, 16 November 2013 (UTC) |
|||
=={{header|BBC BASIC}}== |
=={{header|BBC BASIC}}== |