100 MODE 2 110 DEG 120 level=4 130 DIM alevel(level+1), alength(level+1), astate(level+1) 140 length = 300 150 angle = 0 160 x = 160: y = 120 170 MOVE x, y 180 ' 190 ' draw 3 sides/Koch curves 200 FOR i = 1 TO 3 210 'initialize stack 220 sp = 1 230 alevel(sp) = level 240 alength(sp) = length 250 astate(sp) = 0 260 GOSUB 320 270 angle = angle - 120 280 NEXT i 290 END 300 ' 310 ' iterative Koch using stack 320 WHILE sp > 0 330 level = alevel(sp) 340 length = alength(sp) 350 state = astate(sp) 360 IF level = 0 THEN GOSUB 410 ELSE ON state+1 GOSUB 480,560,600,560,640 370 WEND 380 RETURN 390 ' 400 ' draw forward 410 x = x + length * COS(angle) 420 y = y - length * SIN(angle) 430 DRAW x, y 440 sp = sp - 1 450 RETURN 460 ' 470 ' F (state 0, partly 1,2,3) 480 astate(sp) = state + 1 490 sp = sp + 1 500 alevel(sp) = level - 1 510 alength(sp) = length / 3 520 astate(sp) = 0 530 RETURN 540 ' 550 ' +F (state 1, 3) 560 angle = angle + 60 570 GOTO 480 580 ' 590 ' --F (state 2) 600 angle = angle - 120 610 GOTO 480 620 ' 630 ' done (state 4) 640 sp = sp - 1 650 RETURN