Using AI to improve code readability
authorSvjatoslav Agejenko <svjatoslav@svjatoslav.eu>
Tue, 27 Aug 2024 12:38:17 +0000 (15:38 +0300)
committerSvjatoslav Agejenko <svjatoslav@svjatoslav.eu>
Tue, 27 Aug 2024 12:38:17 +0000 (15:38 +0300)
Graphics/strange2.bas
Graphics/texture.bas
Graphics/tree.bas
Simulation/interf.BAS
Simulation/interf2.BAS
Simulation/liquid.bas

index 35a4f9c..c150ee4 100755 (executable)
@@ -1,41 +1,65 @@
-' Svjatoslav Agejenko 2000\r
+' By Svjatoslav Agejenko.\r
+' Email: svjatoslav@svjatoslav.eu\r
+' Homepage: http://www.svjatoslav.eu\r
+'\r
+' Changelog:\r
+' 2000, Initial version\r
+' 2024.08, Improved program readability using AI\r
 \r
 \r
-DECLARE SUB lu (x%, y%, l%, c2%)\r
+DECLARE SUB DrawLine (x%, y%, l%, clr%)\r
+\r
 DEFINT A-Z\r
 SCREEN 12\r
 \r
+' Set up the palette\r
 FOR a = 0 TO 16\r
-OUT &H3C8, a\r
-OUT &H3C9, a * 4\r
-OUT &H3C9, a * 4\r
-OUT &H3C9, a * 4\r
+    OUT &H3C8, a\r
+    OUT &H3C9, a * 4\r
+    OUT &H3C9, a * 4\r
+    OUT &H3C9, a * 4\r
 NEXT\r
 \r
+' Draw the pattern\r
 FOR x = 0 TO 200\r
-y = SQR((200 - x) * x) / 2\r
-lu x + 200, y + 200, y * 2, t\r
-LINE (x + 200, y + 202)-(x + 200, y + 250), t\r
-IF x < 195 THEN\r
-LINE (300 + ((x - 100) / 2), y / 2 + 328)-(x + 200, y + 252), t\r
-END IF\r
-LINE (300 + ((x - 100) / 2), y / 2 + 330)-(300 + ((x - 100) / 2), y / 2 + 370), t\r
+    y = SQR((200 - x) * x) / 2\r
+    DrawLine x + 200, y + 200, y * 2, t\r
+    LINE (x + 200, y + 202)-(x + 200, y + 250), t\r
+    IF x < 195 THEN\r
+        LINE (300 + ((x - 100) / 2), y / 2 + 328)-(x + 200, y + 252), t\r
+    END IF\r
+    LINE (300 + ((x - 100) / 2), y / 2 + 330)-(300 + ((x - 100) / 2), y / 2 + 370), t\r
 NEXT x\r
 \r
-SUB lu (x, y, l, c2)\r
-\r
-c = 650 - y - x\r
-1\r
-IF c > 30 THEN c = c - 30: GOTO 1\r
-c2 = c\r
-IF c2 > 15 THEN c2 = 30 - c2\r
-\r
-FOR y1 = y TO y - l STEP -1\r
-c1 = c\r
-IF c1 > 15 THEN c1 = 30 - c1\r
-PSET (x, y1), c1\r
-c = c + 1\r
-IF c > 30 THEN c = c - 30\r
-NEXT y1\r
+SUB DrawLine (x, y, l, clr)\r
+    ' Calculate the initial color value\r
+    c = 650 - y - x\r
+\r
+    ' Adjust color to be within a specific range\r
+1   IF c > 30 THEN\r
+        c = c - 30\r
+        GOTO 1\r
+    END IF\r
+\r
+    clr = c\r
+    IF clr > 15 THEN\r
+        clr = 30 - clr\r
+    END IF\r
+\r
+    ' Draw a vertical line with varying colors\r
+    FOR y1 = y TO y - l STEP -1\r
+        c1 = c\r
+        IF c1 > 15 THEN\r
+            c1 = 30 - c1\r
+        END IF\r
+\r
+        PSET (x, y1), c1\r
+\r
+        ' Increment the color and wrap around if necessary\r
+        c = c + 1\r
+        IF c > 30 THEN\r
+            c = c - 30\r
+        END IF\r
+    NEXT y1\r
 END SUB\r
 \r
index c6a48c2..dc3a666 100755 (executable)
 ' Texture mapping\r
-' by Svjatoslav Agejenko\r
-' 04.2003\r
-\r
-DECLARE SUB demo3 ()\r
-DECLARE SUB demo2 ()\r
-DECLARE SUB demo1 ()\r
-DECLARE SUB hline (x1!, y!, x2!, tx1!, ty1!, tx2!, ty2!)\r
-DECLARE SUB polygon (x1!, y1!, x2!, y2!, x3!, y3!, tx1!, ty1!, tx2!, ty2!, tx3!, ty3!)\r
-DECLARE SUB pline (x1!, y1!, x2!, y2!, tx1!, ty1!, tx2!, ty2!)\r
-DECLARE SUB start ()\r
+' By Svjatoslav Agejenko.\r
+' Email: svjatoslav@svjatoslav.eu\r
+' Homepage: http://www.svjatoslav.eu\r
+'\r
+' Changelog:\r
+' 2003.04, Initial version\r
+' 2024.08, Improved program readability using AI\r
+\r
+DECLARE SUB Demo3()\r
+DECLARE SUB Demo2()\r
+DECLARE SUB Demo1()\r
+DECLARE SUB HLine(x1!, y!, x2!, tx1!, ty1!, tx2!, ty2!)\r
+DECLARE SUB Polygon(x1!, y1!, x2!, y2!, x3!, y3!, tx1!, ty1!, tx2!, ty2!, tx3!, ty3!)\r
+DECLARE SUB PLine(x1!, y1!, x2!, y2!, tx1!, ty1!, tx2!, ty2!)\r
+DECLARE SUB Start()\r
 DIM SHARED img(0 TO 100, 0 TO 100)\r
 \r
 DIM SHARED bufx(0 TO 199)\r
 DIM SHARED buftx(0 TO 199)\r
 DIM SHARED bufty(0 TO 199)\r
 \r
-start\r
-demo1\r
-demo2\r
-demo3\r
+Start\r
+Demo1\r
+Demo2\r
+Demo3\r
 SYSTEM\r
 \r
-SUB demo1\r
-polygon 10, 10, 300, 80, 100, 180, 1, 1, 99, 1, 30, 99\r
-\r
-a$ = INPUT$(1)\r
-3\r
-x1 = RND * 300 + 10\r
-x2 = RND * 300 + 10\r
-x3 = RND * 300 + 10\r
-y1 = RND * 180 + 10\r
-y2 = RND * 180 + 10\r
-y3 = RND * 180 + 10\r
-polygon x1, y1, x2, y2, x3, y3, 1, 1, 99, 1, 30, 99\r
-IF INKEY$ = "" THEN GOTO 3\r
-CLS\r
+SUB Demo1\r
+    ' Draw a polygon with predefined vertices and texture coordinates\r
+    Polygon 10, 10, 300, 80, 100, 180, 1, 1, 99, 1, 30, 99\r
+\r
+    ' Wait for user input\r
+    a$ = INPUT$(1)\r
+\r
+    ' Label to repeat the polygon drawing\r
+3:\r
+    x1 = RND * 300 + 10\r
+    x2 = RND * 300 + 10\r
+    x3 = RND * 300 + 10\r
+    y1 = RND * 180 + 10\r
+    y2 = RND * 180 + 10\r
+    y3 = RND * 180 + 10\r
+\r
+    ' Draw a polygon with random vertices and predefined texture coordinates\r
+    Polygon x1, y1, x2, y2, x3, y3, 1, 1, 99, 1, 30, 99\r
+\r
+    ' Repeat the process until a key is pressed\r
+    IF INKEY$ = "" THEN GOTO 3\r
+\r
+    CLS\r
 END SUB\r
 \r
-SUB demo2\r
-\r
-n = 0\r
-4\r
-x1 = SIN(n) * 80 + 160\r
-y1 = COS(n) * 80 + 100\r
-x2 = SIN(n + 2) * 80 + 160\r
-y2 = COS(n + 2) * 80 + 100\r
-x3 = SIN(n + 4) * 90 + 160\r
-y3 = COS(n + 4) * 90 + 100\r
-polygon x1, y1, x2, y2, x3, y3, 1, 1, 99, 1, 30, 99\r
-n = n + .1\r
-IF INKEY$ = "" THEN GOTO 4\r
-CLS\r
+SUB Demo2\r
+    n = 0\r
+\r
+    ' Label to repeat the polygon drawing\r
+4:\r
+    x1 = SIN(n) * 80 + 160\r
+    y1 = COS(n) * 80 + 100\r
+    x2 = SIN(n + 2) * 80 + 160\r
+    y2 = COS(n + 2) * 80 + 100\r
+    x3 = SIN(n + 4) * 90 + 160\r
+    y3 = COS(n + 4) * 90 + 100\r
+\r
+    ' Draw a polygon with calculated vertices and predefined texture coordinates\r
+    Polygon x1, y1, x2, y2, x3, y3, 1, 1, 99, 1, 30, 99\r
+\r
+    n = n + .1\r
+\r
+    ' Repeat the process until a key is pressed\r
+    IF INKEY$ = "" THEN GOTO 4\r
+\r
+    CLS\r
 END SUB\r
 \r
-SUB demo3\r
-\r
-n = 0\r
-5\r
-x1 = SIN(n) * 40 + 50\r
-y1 = COS(n) * 40 + 50\r
-x2 = SIN(n + 2) * 40 + 50\r
-y2 = COS(n + 2) * 40 + 50\r
-x3 = SIN(n + 4) * 40 + 50\r
-y3 = COS(n + 4) * 40 + 50\r
-polygon 1, 50, 300, 1, 100, 180, x1, y1, x2, y2, x3, y3\r
-n = n + .1\r
-IF INKEY$ = "" THEN GOTO 5\r
-CLS\r
+SUB Demo3\r
+    n = 0\r
+\r
+    ' Label to repeat the polygon drawing\r
+5:\r
+    x1 = SIN(n) * 40 + 50\r
+    y1 = COS(n) * 40 + 50\r
+    x2 = SIN(n + 2) * 40 + 50\r
+    y2 = COS(n + 2) * 40 + 50\r
+    x3 = SIN(n + 4) * 40 + 50\r
+    y3 = COS(n + 4) * 40 + 50\r
+\r
+    ' Draw a polygon with calculated vertices and predefined texture coordinates\r
+    Polygon 1, 50, 300, 1, 100, 180, x1, y1, x2, y2, x3, y3\r
+\r
+    n = n + .1\r
+\r
+    ' Repeat the process until a key is pressed\r
+    IF INKEY$ = "" THEN GOTO 5\r
+\r
+    CLS\r
 \r
 END SUB\r
 \r
-SUB hline (x1, y, x2, tx1, ty1, tx2, ty2)\r
-\r
-IF INT(x2) = INT(x1) THEN GOTO 2\r
-IF x2 > x1 THEN\r
-  nx1 = INT(x1)\r
-  nx2 = INT(x2)\r
-  ntx1 = tx1\r
-  nty1 = ty1\r
-  ntx2 = tx2\r
-  nty2 = ty2\r
-ELSE\r
-  nx1 = INT(x2)\r
-  nx2 = INT(x1)\r
-  ntx1 = tx2\r
-  nty1 = ty2\r
-  ntx2 = tx1\r
-  nty2 = ty1\r
-END IF\r
-\r
-v = nx2 - nx1\r
-tvx = ntx2 - ntx1\r
-tvy = nty2 - nty1\r
-\r
-FOR a = 0 TO v\r
-  rtx = tvx * a / v + ntx1\r
-  rty = tvy * a / v + nty1\r
-  PSET (a + nx1, y), img(rtx, rty)\r
-NEXT a\r
-\r
-2\r
+SUB HLine(x1, y, x2, tx1, ty1, tx2, ty2)\r
+\r
+    ' Exit if the horizontal line has zero length\r
+    IF INT(x2) = INT(x1) THEN GOTO 2\r
+\r
+    ' Determine the direction and initialize variables\r
+    IF x2 > x1 THEN\r
+        nx1 = INT(x1)\r
+        nx2 = INT(x2)\r
+        ntx1 = tx1\r
+        nty1 = ty1\r
+        ntx2 = tx2\r
+        nty2 = ty2\r
+    ELSE\r
+        nx1 = INT(x2)\r
+        nx2 = INT(x1)\r
+        ntx1 = tx2\r
+        nty1 = ty2\r
+        ntx2 = tx1\r
+        nty2 = ty1\r
+    END IF\r
+\r
+    ' Calculate the line parameters\r
+    v = nx2 - nx1\r
+    tvx = ntx2 - ntx1\r
+    tvy = nty2 - nty1\r
+\r
+    FOR a = 0 TO v\r
+        rtx = tvx * a / v + ntx1\r
+        rty = tvy * a / v + nty1\r
+\r
+        ' Set the pixel color using texture coordinates\r
+        PSET (a + nx1, y), img(rtx, rty)\r
+    NEXT a\r
+\r
+2:\r
 END SUB\r
 \r
-SUB pline (x1, y1, x2, y2, tx1, ty1, tx2, ty2)\r
-m = ABS(y2 - y1)\r
-IF m = 0 THEN GOTO 1\r
-\r
-vy = y2 - y1\r
-vx = x2 - x1\r
-\r
-tvy = ty2 - ty1\r
-tvx = tx2 - tx1\r
-\r
-FOR a = 0 TO m\r
-  rx = vx * a / m + x1\r
-  ry = vy * a / m + y1\r
-  trx = tvx * a / m + tx1\r
-  try = tvy * a / m + ty1\r
-' PSET (rx, ry), 14\r
-  IF bufx(ry) = -1 THEN\r
-    bufx(ry) = rx\r
-    buftx(ry) = trx\r
-    bufty(ry) = try\r
-  ELSE\r
-    hline bufx(ry), ry, rx, buftx(ry), bufty(ry), trx, try\r
-  END IF\r
-NEXT a\r
-\r
-1\r
+SUB PLine(x1, y1, x2, y2, tx1, ty1, tx2, ty2)\r
+\r
+    ' Calculate the number of vertical steps\r
+    m = ABS(y2 - y1)\r
+\r
+    IF m = 0 THEN GOTO 1\r
+\r
+    vy = y2 - y1\r
+    vx = x2 - x1\r
+\r
+    tvy = ty2 - ty1\r
+    tvx = tx2 - tx1\r
+\r
+    FOR a = 0 TO m\r
+        rx = vx * a / m + x1\r
+        ry = vy * a / m + y1\r
+        trx = tvx * a / m + tx1\r
+        try = tvy * a / m + ty1\r
+\r
+        ' Check if the buffer is empty for this row\r
+        IF bufx(ry) = -1 THEN\r
+            bufx(ry) = rx\r
+            buftx(ry) = trx\r
+            bufty(ry) = try\r
+        ELSE\r
+            HLine bufx(ry), ry, rx, buftx(ry), bufty(ry), trx, try\r
+        END IF\r
+    NEXT a\r
+\r
+1:\r
 END SUB\r
 \r
-SUB polygon (x1, y1, x2, y2, x3, y3, tx1, ty1, tx2, ty2, tx3, ty3)\r
+SUB Polygon(x1, y1, x2, y2, x3, y3, tx1, ty1, tx2, ty2, tx3, ty3)\r
 \r
-FOR a = 0 TO 199\r
-  bufx(a) = -1\r
-NEXT a\r
+    ' Initialize the buffer\r
+    FOR a = 0 TO 199\r
+        bufx(a) = -1\r
+    NEXT a\r
 \r
-pline x1, y1, x2, y2, tx1, ty1, tx2, ty2\r
-pline x1, y1, x3, y3, tx1, ty1, tx3, ty3\r
-pline x3, y3, x2, y2, tx3, ty3, tx2, ty2\r
+    ' Draw three lines connecting the vertices of the polygon\r
+    PLine x1, y1, x2, y2, tx1, ty1, tx2, ty2\r
+    PLine x1, y1, x3, y3, tx1, ty1, tx3, ty3\r
+    PLine x3, y3, x2, y2, tx3, ty3, tx2, ty2\r
 \r
 END SUB\r
 \r
-SUB start\r
+SUB Start\r
 \r
-SCREEN 13\r
+    ' Set the screen mode to 320x200 with 256 colors\r
+    SCREEN 13\r
 \r
-FOR a = 1 TO 100\r
-  x = RND * 150\r
-  y = RND * 150\r
-  c = RND * 255\r
-  CIRCLE (x, y), RND * 20 + 3, c\r
-  PAINT (x, y), c\r
-NEXT a\r
+    ' Draw random circles on the screen\r
+    FOR a = 1 TO 100\r
+        x = RND * 150\r
+        y = RND * 150\r
+        c = RND * 255\r
+        CIRCLE (x, y), RND * 20 + 3, c\r
+        PAINT (x, y), c\r
+    NEXT a\r
 \r
-LOCATE 8, 8\r
-PRINT "Test!"\r
-a$ = INPUT$(1)\r
+    ' Display "Test!" on the screen\r
+    LOCATE 8, 8\r
+    PRINT "Test!"\r
 \r
-FOR y = 0 TO 100\r
-  FOR x = 0 TO 100\r
-    img(x, y) = POINT(x + 20, y + 20)\r
-    PSET (x + 20, y + 20), 0\r
-  NEXT x\r
-NEXT y\r
-CLS\r
+    ' Wait for user input\r
+    a$ = INPUT$(1)\r
 \r
-END SUB\r
+    ' Copy the screen content to the image array and clear the screen\r
+    FOR y = 0 TO 100\r
+        FOR x = 0 TO 100\r
+            img(x, y) = POINT(x + 20, y + 20)\r
+            PSET (x + 20, y + 20), 0\r
+        NEXT x\r
+    NEXT y\r
+\r
+    CLS\r
 \r
+END SUB\r
index 642ccd8..a4ce143 100755 (executable)
@@ -1,23 +1,26 @@
 ' Render tree that starts with single root and then branches out.\r
-' made by Svjatoslav Agejenko\r
-' in 2001\r
-' H-Page: svjatoslav.eu\r
-' E-Mail: svjatoslav@svjatoslav.eu\r
\r
-DECLARE SUB start ()\r
-DECLARE SUB show (d%)\r
-DECLARE SUB setpal ()\r
-DECLARE SUB showpal ()\r
-DEFINT A-Y\r
+' By Svjatoslav Agejenko.\r
+' Email: svjatoslav@svjatoslav.eu\r
+' Homepage: http://www.svjatoslav.eu\r
+'\r
+' Changelog:\r
+' 2001, Initial version\r
+' 2024.08, Improved program readability using AI\r
 \r
 \r
+DECLARE SUB start()\r
+DECLARE SUB show(d%)\r
+DECLARE SUB setpal()\r
+DECLARE SUB showpal()\r
+DEFINT A - Y\r
+\r
 DIM SHARED x(1 TO 500)\r
 DIM SHARED y(1 TO 500)\r
 DIM SHARED s(1 TO 500)\r
 \r
 DIM SHARED x4(1 TO 500)\r
 DIM SHARED y4(1 TO 500)\r
-   \r
+\r
 DIM SHARED z(1 TO 500)\r
 DIM SHARED mitu\r
 \r
@@ -31,69 +34,82 @@ x(1) = 420
 y(1) = 340\r
 s(1) = 70 * 100\r
 z(1) = 1\r
-  \r
+\r
+' Main loop to render the tree branches\r
 FOR tr = 1 TO 6\r
-FOR b = 1 TO 50\r
-FOR a = 1 TO mitu\r
-show a\r
-NEXT a\r
-NEXT b\r
-\r
-FOR a = 1 TO mitu\r
-x(mitu + a) = x(a)\r
-y(mitu + a) = y(a)\r
-s(mitu + a) = s(a)\r
-z(mitu + a) = z(a)\r
-x4(mitu + a) = RND * 4 - 2\r
-y4(mitu + a) = RND * 4 - 2\r
-NEXT a\r
-mitu = mitu * 2\r
+    FOR b = 1 TO 50\r
+        FOR a = 1 TO mitu\r
+            show a\r
+        NEXT a\r
+    NEXT b\r
+\r
+    ' Duplicate existing branches and add randomness\r
+    FOR a = 1 TO mitu\r
+        x(mitu + a) = x(a)\r
+        y(mitu + a) = y(a)\r
+        s(mitu + a) = s(a)\r
+        z(mitu + a) = z(a)\r
+        x4(mitu + a) = RND * 4 - 2\r
+        y4(mitu + a) = RND * 4 - 2\r
+    NEXT a\r
+    mitu = mitu * 2\r
 \r
 NEXT tr\r
+\r
+' Wait for user input before exiting\r
 a$ = INPUT$(1)\r
 SYSTEM\r
 \r
 SUB setpal\r
-FOR a = 0 TO 16\r
-'    OUT &H3C7, a\r
-    OUT &H3C8, a\r
-    OUT &H3C9, a * 4\r
-    OUT &H3C9, a * 4\r
-    OUT &H3C9, a * 4\r
-NEXT\r
+    ' Set the palette colors\r
+    FOR a = 0 TO 16\r
+        OUT &H3C8, a\r
+        OUT &H3C9, a * 4\r
+        OUT &H3C9, a * 4\r
+        OUT &H3C9, a * 4\r
+    NEXT\r
 END SUB\r
 \r
-SUB show (d)\r
\r
-x1 = x(d)\r
-y1 = y(d)\r
-s1 = s(d)\r
-z1 = z(d)\r
+SUB show(d)\r
+    ' Retrieve current branch properties\r
+    x1 = x(d)\r
+    y1 = y(d)\r
+    s1 = s(d)\r
+    z1 = z(d)\r
+\r
+    ' Calculate color based on angle\r
+    c = SIN(z1) * 7 + 9\r
 \r
+    ' Draw and fill the circle representing the branch\r
+    CIRCLE (x1, y1), s1 / 100, c\r
+    PAINT (x1, y1), c\r
 \r
-c = SIN(z1) * 7 + 9\r
-CIRCLE (x1, y1), s1 / 100, c\r
-PAINT (x1, y1), c\r
-x(d) = x(d) + (SIN(z1) * 1000) / (s1 + 15)\r
-y(d) = y(d) + (COS(z1) * 1000) / (s1 + 15)\r
+    ' Update position based on current angle and size\r
+    x(d) = x(d) + (SIN(z1) * 1000) / (s1 + 15)\r
+    y(d) = y(d) + (COS(z1) * 1000) / (s1 + 15)\r
 \r
-s(d) = s(d) / 1.01\r
-IF x4(d) >= 0 THEN z(d) = z(d) + .1 ELSE z(d) = z(d) - .1\r
-x(d) = x(d) + x4(d)\r
-y(d) = y(d) + y4(d)\r
+    ' Decay the size slightly\r
+    s(d) = s(d) / 1.01\r
+\r
+    ' Update angle based on direction\r
+    IF x4(d) >= 0 THEN z(d) = z(d) + .1 ELSE z(d) = z(d) - .1\r
+\r
+    ' Move branch in its random direction\r
+    x(d) = x(d) + x4(d)\r
+    y(d) = y(d) + y4(d)\r
 END SUB\r
 \r
 SUB showpal\r
-FOR a = 1 TO 16\r
-LINE (a * 10, 1)-(a * 10 + 10, 100), a, BF\r
-NEXT a\r
+    ' Display the color palette at the top of the screen\r
+    FOR a = 1 TO 16\r
+        LINE (a * 10, 1) - (a * 10 + 10, 100), a, BF\r
+    NEXT a\r
 END SUB\r
 \r
 SUB start\r
-\r
-SCREEN 12\r
-setpal\r
-REM  showpal\r
-RANDOMIZE TIMER\r
+    ' Initialize graphics mode and set palette\r
+    SCREEN 12\r
+    setpal\r
+    REM showpal\r
+    RANDOMIZE TIMER\r
 END SUB\r
-\r
index eea01d8..563e27a 100755 (executable)
@@ -1,65 +1,70 @@
 ' Program simulates interference between two slightly different frequencies\r
-\r
-DECLARE SUB getfreq ()\r
-DECLARE SUB start ()\r
-DECLARE FUNCTION gety! (t!)\r
+' By Svjatoslav Agejenko.\r
+' Email: svjatoslav@svjatoslav.eu\r
+' Homepage: http://www.svjatoslav.eu\r
+'\r
+' Changelog:\r
+' ?, Initial version\r
+' 2024.08, Improved program readability using AI\r
+\r
+DECLARE SUB GetFrequency ()\r
+DECLARE SUB Start ()\r
+DECLARE FUNCTION GetY! (t!)\r
 DIM SHARED freq(1 TO 100)\r
 DIM SHARED phase(1 TO 100)\r
 \r
-start\r
+Start\r
 1\r
-frm = frm + 1\r
+frame = frame + 1\r
 PSET (0, 0)\r
 FOR x = 0 TO 639\r
\r
-  oy1 = y1\r
-  oy2 = y2\r
-  oy3 = y3\r
 \r
-  y1 = gety(frm + x / 4) * 20 + 150\r
-  y2 = gety(frm + x / 4 + (x / 50)) * 20 + 150\r
-  y3 = y1 + y2\r
+    oldY1 = y1\r
+    oldY2 = y2\r
+    oldY3 = y3\r
+\r
+    y1 = GetY(frame + x / 4) * 20 + 150\r
+    y2 = GetY(frame + x / 4 + (x / 50)) * 20 + 150\r
+    y3 = y1 + y2\r
 \r
- ' LINE (x + 1, 0)-(x + 1, 479), 12\r
-  LINE (x, 0)-(x, 479), 0\r
   ' LINE (x + 1, 0)-(x + 1, 479), 12\r
+    LINE (x, 0)-(x, 479), 0\r
 \r
-  LINE (x - 1, oy1)-(x, y1), 1\r
-  LINE (x - 1, oy2)-(x, y2), 2\r
-  LINE (x - 1, oy3)-(x, y3), 15\r
+    LINE (x - 1, oldY1)-(x, y1), 1\r
+    LINE (x - 1, oldY2)-(x, y2), 2\r
+    LINE (x - 1, oldY3)-(x, y3), 15\r
 \r
 NEXT x\r
 GOTO 1\r
 \r
-SUB diplay\r
+SUB Display\r
 END SUB\r
 \r
-SUB getfreq\r
+SUB GetFrequency\r
 \r
 FOR a = 1 TO 100\r
-  freq(a) = RND / 2 + 1\r
+    freq(a) = RND / 2 + 1\r
 NEXT a\r
 \r
 FOR a = 1 TO 100\r
-  phase(a) = RND * 100\r
+    phase(a) = RND * 100\r
 NEXT a\r
 \r
-\r
 END SUB\r
 \r
-FUNCTION gety (t)\r
+FUNCTION GetY (t)\r
 \r
 y = 0\r
 FOR a = 1 TO 1\r
-  y = y + SIN(t * freq(a) + phase(a))\r
+    y = y + SIN(t * freq(a) + phase(a))\r
 NEXT a\r
 \r
-gety = y\r
+GetY = y\r
 \r
 END FUNCTION\r
 \r
-SUB start\r
+SUB Start\r
 SCREEN 12\r
-getfreq\r
+GetFrequency\r
 \r
 END SUB\r
-\r
index 8f223a8..e1150bf 100755 (executable)
@@ -1,52 +1,60 @@
 ' Program simulates lot of frequencies interfering with itself.\r
 ' As a result, interferogram is produced.\r
+'\r
+' By Svjatoslav Agejenko.\r
+' Email: svjatoslav@svjatoslav.eu\r
+' Homepage: http://www.svjatoslav.eu\r
+'\r
+' Changelog:\r
+' ?, Initial version\r
+' 2024.08, Improved program readability using AI\r
 \r
-DIM SHARED freq(1 TO 100)\r
-DIM SHARED phase(1 TO 100)\r
+\r
+DIM SHARED frequency(1 TO 100)\r
+DIM SHARED phaseAngle(1 TO 100)\r
 \r
 SCREEN 12\r
 \r
 PSET (0, 0)\r
-FOR x = 0 TO 639\r
-\r
- fs = (x - 320) / 5000 + 1\r
-' fs = (x - 320) / 50 + 1\r
+FOR xPos = 0 TO 639\r
 \r
-  y = 0\r
-  FOR t = 1 TO 5000 STEP 5\r
-    y1 = SIN(t)\r
-    y2 = SIN(t * fs)\r
-    y = y + ABS(y1 + y2)\r
-  NEXT t\r
+    fs = (xPos - 320) / 5000 + 1\r
+    ' fs = (xPos - 320) / 50 + 1\r
 \r
-  y = y / 5\r
-  IF y > 470 THEN y = 470\r
-  IF y < 0 THEN y = 0\r
+    yVal = 0\r
+    FOR timeStep = 1 TO 5000 STEP 5\r
+        y1 = SIN(timeStep)\r
+        y2 = SIN(timeStep * fs)\r
+        yVal = yVal + ABS(y1 + y2)\r
+    NEXT timeStep\r
 \r
-  LINE -(x, 479 - y), 15\r
+    yVal = yVal / 5\r
+    IF yVal > 470 THEN yVal = 470\r
+    IF yVal < 0 THEN yVal = 0\r
 \r
-NEXT x\r
+    LINE -(xPos, 479 - yVal), 15\r
 \r
-SUB getfreq\r
+NEXT xPos\r
 \r
-FOR a = 1 TO 100\r
-  freq(a) = RND / 7 + 1\r
-NEXT a\r
+SUB getFrequencies\r
 \r
-FOR a = 1 TO 100\r
-  phase(a) = RND * 100\r
-NEXT a\r
+    ' Generates random frequencies and phase angles\r
+    FOR index = 1 TO 100\r
+        frequency(index) = RND / 7 + 1\r
+    NEXT index\r
 \r
+    FOR index = 1 TO 100\r
+        phaseAngle(index) = RND * 100\r
+    NEXT index\r
 \r
 END SUB\r
 \r
-SUB gety (t)\r
-\r
-y = 0\r
-FOR a = 1 TO 100\r
-  y = y + SIN(t * freq(a) + phase(a))\r
-NEXT a\r
+SUB getYVal (timeStep)\r
 \r
+    yVal = 0\r
+    ' Sum of sinusoids with different frequencies and phases\r
+    FOR index = 1 TO 100\r
+        yVal = yVal + SIN(timeStep * frequency(index) + phaseAngle(index))\r
+    NEXT index\r
 \r
 END SUB\r
-\r
index 1b60bcd..53d280e 100755 (executable)
@@ -1,52 +1,76 @@
 ' Program simulates water spill and subsequent surface tension that\r
 ' tries to round out the sharp edges.\r
 '\r
-' made by Svjatoslav Agejenko\r
-' in 2003.12\r
-' homepage: svjatoslav.eu\r
-' email:    svjatoslav@svjatoslav.eu\r
\r
+' By Svjatoslav Agejenko.\r
+' Email: svjatoslav@svjatoslav.eu\r
+' Homepage: http://www.svjatoslav.eu\r
+'\r
+' Changelog:\r
+' 2003.12, Initial version\r
+' 2024.08, Improved program readability using AI\r
+\r
+\r
 DEFINT A-Z\r
 WIDTH 80, 50\r
 VIEW PRINT 1 TO 50\r
 RANDOMIZE TIMER\r
 CLS\r
-DIM SHARED buf1(1 TO 80, 1 TO 50)\r
-DIM SHARED buf2(1 TO 80, 1 TO 50)\r
+DIM SHARED buffer1(1 TO 80, 1 TO 50)\r
+DIM SHARED buffer2(1 TO 80, 1 TO 50)\r
 \r
+' Initialize the buffers with random values (0 or 1)\r
 FOR y = 1 TO 50\r
     FOR x = 1 TO 80\r
-        buf1(x, y) = INT(RND * 2)\r
+        buffer1(x, y) = INT(RND * 2)\r
     NEXT x\r
 NEXT y\r
 \r
+' Main simulation loop\r
 1\r
 FOR y = 2 TO 49\r
     FOR x = 2 TO 79\r
-        c = buf1(x - 1, y - 1)\r
-        c = c + buf1(x, y - 1)\r
-        c = c + buf1(x + 1, y - 1)\r
-        c = c + buf1(x - 1, y)\r
-        c = c + buf1(x + 1, y)\r
-        c = c + buf1(x - 1, y + 1)\r
-        c = c + buf1(x, y + 1)\r
-        c = c + buf1(x + 1, y + 1)\r
-        IF buf1(x, y) = 1 THEN\r
-            IF c > 3 THEN buf2(x, y) = 1 ELSE buf2(x, y) = 0\r
+        ' Calculate the sum of neighboring cells\r
+        cellSum = buffer1(x - 1, y - 1)\r
+        cellSum = cellSum + buffer1(x, y - 1)\r
+        cellSum = cellSum + buffer1(x + 1, y - 1)\r
+        cellSum = cellSum + buffer1(x - 1, y)\r
+        cellSum = cellSum + buffer1(x + 1, y)\r
+        cellSum = cellSum + buffer1(x - 1, y + 1)\r
+        cellSum = cellSum + buffer1(x, y + 1)\r
+        cellSum = cellSum + buffer1(x + 1, y + 1)\r
+\r
+        ' Apply the surface tension rules\r
+        IF buffer1(x, y) = 1 THEN\r
+            IF cellSum > 3 THEN\r
+                buffer2(x, y) = 1\r
+            ELSE\r
+                buffer2(x, y) = 0\r
+            END IF\r
         ELSE\r
-            IF c > 4 THEN buf2(x, y) = 1 ELSE buf2(x, y) = 0\r
+            IF cellSum > 4 THEN\r
+                buffer2(x, y) = 1\r
+            ELSE\r
+                buffer2(x, y) = 0\r
+            END IF\r
         END IF\r
     NEXT x\r
 NEXT y\r
 \r
+' Update the display and swap buffers\r
 FOR y = 1 TO 50\r
     FOR x = 1 TO 80\r
-        b = buf2(x, y)\r
-        buf1(x, y) = b\r
+        cellValue = buffer2(x, y)\r
+        buffer1(x, y) = cellValue\r
+\r
+        ' Print the cell value on screen\r
         LOCATE y, x\r
-        IF b = 0 THEN PRINT ".";  ELSE PRINT "#"\r
+        IF cellValue = 0 THEN\r
+            PRINT ".";\r
+        ELSE\r
+            PRINT "#"\r
+        END IF\r
     NEXT x\r
 NEXT y\r
+\r
 SOUND 0, 3\r
 GOTO 1\r
-\r