Using AI to improve code readability
authorSvjatoslav Agejenko <svjatoslav@svjatoslav.eu>
Sat, 17 Aug 2024 13:00:40 +0000 (16:00 +0300)
committerSvjatoslav Agejenko <svjatoslav@svjatoslav.eu>
Sat, 17 Aug 2024 13:00:40 +0000 (16:00 +0300)
Graphics/Texture generation/map1.bas
Graphics/Texture generation/map3.bas
Graphics/Texture generation/oldpaper.bas
Graphics/Texture generation/test3.bas
Graphics/Texture generation/wood.bas

index 3d40578..56ffcce 100755 (executable)
@@ -1,36 +1,45 @@
-' surface\r
-' made by Svjatoslav Agejenko\r
-' in 2003.12\r
-' H-Page: svjatoslav.eu\r
-' E-Mail: svjatoslav@svjatoslav.eu\r
\r
-DEFINT A-Z\r
-SCREEN 13\r
-RANDOMIZE TIMER\r
+' Yellow flame\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
-FOR a = 0 TO 255\r
-OUT &H3C8, a\r
-OUT &H3C9, SIN(a / 21) * 30 + 30\r
-OUT &H3C9, SIN(a / 34) * 30 + 30\r
-OUT &H3C9, SIN(a / 10) * 30 + 30\r
-NEXT a\r
 \r
+DEFINT A-Z ' Define all variables as integers\r
+SCREEN 13 ' Set graphics mode to 320x200 with 256 colors\r
+RANDOMIZE TIMER ' Seed the random number generator\r
 \r
+' Initialize palette registers with sine wave colors\r
+FOR paletteIndex = 0 TO 255\r
+    OUT &H3C8, paletteIndex\r
+    OUT &H3C9, INT(SIN(paletteIndex / 21) * 30 + 30)\r
+    OUT &H3C9, INT(SIN(paletteIndex / 34) * 30 + 30)\r
+    OUT &H3C9, INT(SIN(paletteIndex / 10) * 30 + 30)\r
+NEXT paletteIndex\r
 \r
+' Generate the surface pattern\r
 FOR y = 1 TO 199\r
-FOR x = 1 TO 319\r
-c1 = POINT(x, y - 1)\r
-c2 = POINT(x - 1, y)\r
-c3 = POINT(x - 1, y - 1)\r
-c4 = POINT(x - 2, y)\r
-c = (c1 + c2 + c3 + c4) \ 4 + (RND * 5 - 2)\r
-IF c < 0 THEN c = 0\r
-IF c > 63 THEN c = 63\r
-PSET (x, y), c\r
-NEXT x\r
-NEXT y\r
+    FOR x = 1 TO 319\r
+        prevPixel = POINT(x, y - 1)\r
+        leftPixel = POINT(x - 1, y)\r
+        diagPixel = POINT(x - 1, y - 1)\r
+        left2Pixel = POINT(x - 2, y)\r
+\r
+        ' Calculate the average of surrounding pixels and add some randomness\r
+        newColor = (prevPixel + leftPixel + diagPixel + left2Pixel) \ 4 + (RND * 5 - 2)\r
 \r
-a$ = INPUT$(1)\r
+        ' Clamp the color value within the valid range\r
+        IF newColor < 0 THEN newColor = 0\r
+        IF newColor > 63 THEN newColor = 63\r
+\r
+        ' Set the pixel with the calculated color\r
+        PSET (x, y), newColor\r
+    NEXT x\r
+NEXT y\r
 \r
-SYSTEM\r
+' Wait for user input to exit\r
+userInput$ = INPUT$(1)\r
 \r
index c156f33..927409b 100755 (executable)
@@ -1,86 +1,94 @@
-' Cloud surface\r
-' made by Svjatoslav Agejenko\r
-' in 2003.12\r
-' H-Page: svjatoslav.eu\r
-' E-Mail: svjatoslav@svjatoslav.eu\r
\r
-DECLARE SUB box (x1%, y1%, s%)\r
-DECLARE SUB setpal ()\r
-DECLARE SUB start ()\r
+DECLARE SUB DrawPixels (x1 AS INTEGER, y1 AS INTEGER, s AS INTEGER)\r
+' Program to render cloud surface using diamond square algorithm.\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
+DECLARE SUB DrawBox (x1 AS INTEGER, y1 AS INTEGER, s AS INTEGER)\r
+DECLARE SUB SetPalette ()\r
+DECLARE SUB InitializeProgram ()\r
 DEFINT A-Z\r
-start\r
+InitializeProgram\r
 \r
-DIM SHARED lm\r
-lm = 127\r
+DIM SHARED maxLightness AS INTEGER\r
+maxLightness = 127\r
 \r
+DIM scale AS INTEGER\r
+scale = 2 ^ 8\r
 \r
-s = 2 ^ 8\r
-1\r
-s = s \ 2\r
-x1 = (319 \ s) - 1\r
-y1 = (199 \ s) - 1\r
+1 :\r
+scale = scale \ 2\r
+x1 = (319 \ scale) - 1\r
+y1 = (199 \ scale) - 1\r
 \r
 FOR y = 0 TO y1\r
-FOR x = 0 TO x1\r
-box x * s, y * s, s\r
-NEXT x\r
+    FOR x = 0 TO x1\r
+        DrawPixels x * scale, y * scale, scale\r
+    NEXT x\r
 NEXT y\r
-IF s > 2 THEN GOTO 1\r
-a$ = INPUT$(1)\r
-SYSTEM\r
-\r
-SUB box (x1, y1, s)\r
-c1 = POINT(x1, y1)\r
-c2 = POINT(x1 + s, y1)\r
-c3 = POINT(x1, y1 + s)\r
-c4 = POINT(x1 + s, y1 + s)\r
-\r
-sp = s \ 2\r
-k = s * 2\r
-kp = k / 2\r
-\r
-cc2 = ((c1 + c2) / 2) + (RND * k) - kp\r
-IF cc2 > lm THEN cc2 = lm\r
-IF cc2 < 0 THEN cc2 = 0\r
-\r
-cc3 = ((c1 + c3) / 2) + (RND * k) - kp\r
-IF cc3 > lm THEN cc3 = lm\r
-IF cc3 < 0 THEN cc3 = 0\r
-\r
-cc4 = ((c2 + c4) / 2) + (RND * k) - kp\r
-IF cc4 > lm THEN cc4 = lm\r
-IF cc4 < 0 THEN cc4 = 0\r
-\r
-cc5 = ((c3 + c4) / 2) + (RND * k) - kp\r
-IF cc5 > lm THEN cc5 = lm\r
-IF cc5 < 0 THEN cc5 = 0\r
-\r
-cc1 = ((cc2 + cc3 + cc4 + cc5) / 4) + (RND * k) - kp\r
-IF cc1 > lm THEN cc1 = lm\r
-IF cc1 < 0 THEN cc1 = 0\r
-\r
-\r
-\r
-PSET (x1 + sp, y1 + sp), cc1\r
-PSET (x1 + sp, y1), cc2\r
-PSET (x1, y1 + sp), cc3\r
-PSET (x1 + s, y1 + sp), cc4\r
-PSET (x1 + sp, y1 + s), cc5\r
 \r
+IF scale > 2 THEN GOTO 1\r
+WAITa$ = INPUT$(1)\r
+\r
+SUB DrawPixels (x1 AS INTEGER, y1 AS INTEGER, s AS INTEGER)\r
+    ' Get the lightness values for the corners of the box\r
+    c1 = POINT(x1, y1)\r
+    c2 = POINT(x1 + s, y1)\r
+    c3 = POINT(x1, y1 + s)\r
+    c4 = POINT(x1 + s, y1 + s)\r
+\r
+    ' Calculate the midpoint lightness values\r
+    sp = s \ 2\r
+    k = s * 2\r
+    kp = k / 2\r
+\r
+    cc2 = ((c1 + c2) / 2) + (RND * k) - kp\r
+    IF cc2 > maxLightness THEN cc2 = maxLightness\r
+    IF cc2 < 0 THEN cc2 = 0\r
+\r
+    cc3 = ((c1 + c3) / 2) + (RND * k) - kp\r
+    IF cc3 > maxLightness THEN cc3 = maxLightness\r
+    IF cc3 < 0 THEN cc3 = 0\r
+\r
+    cc4 = ((c2 + c4) / 2) + (RND * k) - kp\r
+    IF cc4 > maxLightness THEN cc4 = maxLightness\r
+    IF cc4 < 0 THEN cc4 = 0\r
+\r
+    cc5 = ((c3 + c4) / 2) + (RND * k) - kp\r
+    IF cc5 > maxLightness THEN cc5 = maxLightness\r
+    IF cc5 < 0 THEN cc5 = 0\r
+\r
+    ' Calculate the central lightness value\r
+    cc1 = ((cc2 + cc3 + cc4 + cc5) / 4) + (RND * k) - kp\r
+    IF cc1 > maxLightness THEN cc1 = maxLightness\r
+    IF cc1 < 0 THEN cc1 = 0\r
+\r
+    ' Set the calculated lightness values for the box\r
+    PSET (x1 + sp, y1 + sp), cc1\r
+    PSET (x1 + sp, y1), cc2\r
+    PSET (x1, y1 + sp), cc3\r
+    PSET (x1 + s, y1 + sp), cc4\r
+    PSET (x1 + sp, y1 + s), cc5\r
 END SUB\r
 \r
-SUB setpal\r
-FOR a = 0 TO 255\r
-OUT &H3C8, a\r
-OUT &H3C9, a / 4\r
-OUT &H3C9, a / 3\r
-OUT &H3C9, a / 2.3\r
-NEXT a\r
+SUB InitializeProgram\r
+    ' Set the screen mode and initialize the color palette\r
+    SCREEN 13\r
+    SetPalette\r
+    RANDOMIZE TIMER\r
 END SUB\r
 \r
-SUB start\r
-SCREEN 13\r
-setpal\r
-RANDOMIZE TIMER\r
+SUB SetPalette\r
+    ' Set the color palette for lightness levels\r
+    FOR a = 0 TO 255\r
+        OUT &H3C8, a\r
+        OUT &H3C9, a / 4\r
+        OUT &H3C9, a / 3\r
+        OUT &H3C9, a / 2.3\r
+    NEXT a\r
 END SUB\r
 \r
index 72a92ab..8bdca0d 100755 (executable)
@@ -1,51 +1,84 @@
-' Old paper surface\r
-' made by Svjatoslav Agejenko\r
-' in 2003.12\r
-' H-Page: svjatoslav.eu\r
-' E-Mail: svjatoslav@svjatoslav.eu\r
\r
-DECLARE SUB paper (x1%, y1%, x2%, y2%)\r
+' Program to render surface resembling old paper.\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
+DECLARE SUB DrawPaper (x1 AS INTEGER, y1 AS INTEGER, x2 AS INTEGER, y2 AS INTEGER)\r
+\r
 DEFINT A-Z\r
 SCREEN 12\r
 RANDOMIZE TIMER\r
-FOR a = 0 TO 15\r
-OUT &H3C8, a\r
-OUT &H3C9, a * 3\r
-OUT &H3C9, a * 3\r
-OUT &H3C9, a * 2\r
-NEXT a\r
 \r
+' Set color palette\r
+FOR colorIndex = 0 TO 15\r
+    OUT &H3C8, colorIndex\r
+    OUT &H3C9, colorIndex * 3\r
+    OUT &H3C9, colorIndex * 3\r
+    OUT &H3C9, colorIndex * 2\r
+NEXT colorIndex\r
+\r
+' Generate and draw paper surfaces continuously until a key is pressed\r
 1\r
-x1 = RND * 600 + 20\r
-x2 = RND * 600 + 20\r
-y1 = RND * 400 + 40\r
-y2 = RND * 400 + 40\r
-IF x1 > x2 THEN SWAP x1, x2\r
-IF y1 > y2 THEN SWAP y1, y2\r
-paper x1, y1, x2, y2\r
+    x1 = RND * 600 + 20\r
+    x2 = RND * 600 + 20\r
+    y1 = RND * 400 + 40\r
+    y2 = RND * 400 + 40\r
+\r
+    ' Ensure x1 is less than x2 and y1 is less than y2\r
+    IF x1 > x2 THEN SWAP x1, x2\r
+    IF y1 > y2 THEN SWAP y1, y2\r
+\r
+    ' Draw the paper with the calculated coordinates\r
+    CALL DrawPaper(x1, y1, x2, y2)\r
+\r
+    ' Continue drawing until any key is pressed\r
+    IF INKEY$ <> "" THEN SYSTEM\r
 GOTO 1\r
 \r
-a$ = INPUT$(1)\r
-\r
-SYSTEM\r
-\r
-SUB paper (x1, y1, x2, y2)\r
-yl = y2 + 1\r
-z = 0\r
-LINE (x1, y1)-(x2, y1), 0\r
-LINE (x2, y1)-(x2, y2), 0\r
-FOR y = y1 + 1 TO y2\r
-c = 0\r
-FOR x = x1 TO x2\r
-p = p + 1\r
-IF p > 23 THEN z = RND * 1: p = 0\r
-c1 = POINT(x, y - 1)\r
-c = (c1 + c) / 2 + (RND * (2 + (5 / y)) - (3 / (yl - y))) - z\r
-IF c < 0 THEN c = 0\r
-IF c > 15 THEN c = 15\r
-PSET (x - 1, y), c\r
-NEXT x\r
-NEXT y\r
+SUB DrawPaper (x1 AS INTEGER, y1 AS INTEGER, x2 AS INTEGER, y2 AS INTEGER)\r
+    DIM c AS INTEGER\r
+    DIM z AS SINGLE\r
+    DIM p AS INTEGER\r
+    DIM c1 AS INTEGER\r
+    DIM yl AS INTEGER\r
+\r
+    ' Initialize variables\r
+    yl = y2 + 1\r
+    z = 0\r
+\r
+    ' Draw the bottom and right borders of the paper\r
+    LINE (x1, y1)-(x2, y1), 0\r
+    LINE (x2, y1)-(x2, y2), 0\r
+\r
+    ' Generate the texture of the paper\r
+    FOR y = y1 + 1 TO y2\r
+        c = 0\r
+        FOR x = x1 TO x2\r
+            p = p + 1\r
+\r
+            ' Randomly reset the pattern counter\r
+            IF p > 23 THEN\r
+                z = RND * 1\r
+                p = 0\r
+            END IF\r
+\r
+            ' Get the color of the previous row\r
+            c1 = POINT(x, y - 1)\r
+\r
+            ' Calculate the average color with random variation\r
+            c = (c1 + c) / 2 + (RND * (2 + (5 / y))) - (3 / (yl - y)) - z\r
+\r
+            ' Clamp the color value within the range [0, 15]\r
+            IF c < 0 THEN c = 0\r
+            IF c > 15 THEN c = 15\r
 \r
+            ' Set the pixel color for the current position\r
+            PSET (x - 1, y), c\r
+        NEXT x\r
+    NEXT y\r
 END SUB\r
 \r
index da21913..c23659c 100755 (executable)
@@ -1,19 +1,27 @@
 ' Strange surface\r
-' made by Svjatoslav Agejenko\r
-' in 2003.12\r
+' Made by Svjatoslav Agejenko in 2003.12\r
 ' H-Page: svjatoslav.eu\r
 ' E-Mail: svjatoslav@svjatoslav.eu\r
\r
+\r
 SCREEN 13\r
 \r
-FOR y = 1 TO 199\r
-FOR x = 1 TO 319\r
-c = SIN((x ^ 2 + y ^ 2) / 10) * 10\r
-IF c < 0 THEN c = 0\r
-IF c > 15 THEN c = 15\r
-PSET (x, y), c + 16\r
-NEXT x\r
-NEXT y\r
+' Initialize the screen mode to 320x200 with 16 colors\r
+\r
+' Outer loop for the vertical axis (y-coordinate)\r
+FOR ycoordinate = 1 TO 199\r
+    ' Inner loop for the horizontal axis (x-coordinate)\r
+    FOR xcoordinate = 1 TO 319\r
+        ' Calculate the sine value based on the squared distances from the origin\r
+        colorvalue = SIN((xcoordinate ^ 2 + ycoordinate ^ 2) / 10) * 10\r
 \r
+        ' Clamp the color value to the range [0, 15]\r
+        IF colorvalue < 0 THEN colorvalue = 0\r
+        IF colorvalue > 15 THEN colorvalue = 15\r
 \r
+        ' Set the pixel color at (xcoordinate, ycoordinate) with an offset to use the full 16-color palette\r
+        PSET (xcoordinate, ycoordinate), colorvalue + 16\r
+    NEXT xcoordinate\r
+NEXT ycoordinate\r
 \r
+' Wait for a key press before exiting\r
+WAIT 30, 1
\ No newline at end of file
index 9d3efa3..2bf38d0 100755 (executable)
@@ -1,49 +1,73 @@
-' Wood surface\r
-' made by Svjatoslav Agejenko\r
-' in 2003.12\r
-' H-Page: svjatoslav.eu\r
-' E-Mail: svjatoslav@svjatoslav.eu\r
\r
-DECLARE SUB wood (x1%, y1%)\r
-DECLARE SUB paper (x1%, y1%)\r
+' Program to render surface resembling wood.\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
+DECLARE SUB DrawWood(xPos%, yPos%)\r
+DECLARE SUB DrawPaper(xPos%, y1Pos%)\r
 DEFINT A-Z\r
 SCREEN 12\r
 RANDOMIZE TIMER\r
-FOR a = 0 TO 15\r
-OUT &H3C8, a\r
-OUT &H3C9, a * 4\r
-OUT &H3C9, a * 3\r
-OUT &H3C9, a * 0\r
-NEXT a\r
-\r
-1\r
-x1 = RND * 400 + 200\r
-y1 = RND * 100 + 200\r
-wood x1, y1\r
-GOTO 1\r
 \r
+' Set palette colors\r
+FOR colorIndex = 0 TO 15\r
+    OUT &H3C8, colorIndex\r
+    OUT &H3C9, colorIndex * 4\r
+    OUT &H3C9, colorIndex * 3\r
+    OUT &H3C9, colorIndex * 0\r
+NEXT colorIndex\r
+\r
+' Main loop to draw wood at random positions\r
+100:\r
+xPos = RND * 400 + 200\r
+yPos = RND * 100 + 200\r
+CALL DrawWood(xPos, yPos)\r
+GOTO 100\r
+\r
+' Wait for user input to exit\r
 a$ = INPUT$(1)\r
 \r
-SYSTEM\r
-\r
-SUB wood (x1, y1)\r
-yl = y1 + 1\r
-LINE (0, 0)-(x1, y1), 0, BF\r
-LINE (5, 5)-(x1 - 5, y1 - 5), 8, BF\r
-LINE (10, 10)-(x1 - 10, y1 - 10), 15, BF\r
-pe = RND * 300\r
-FOR y = y1 - 1 TO 0 STEP -1\r
-FOR x = x1 - 1 TO 0 STEP -1\r
-p = p + 1\r
-IF p > x1 THEN z = RND * 13: p = SIN((y + pe) / 100) * x1\r
-c1 = POINT(x, y + 1)\r
-c2 = POINT(x, y)\r
-c = (c1 * 2 + c2 + c * 3 + z) / 7 + RND * 1\r
-IF c < 0 THEN c = 0\r
-IF c > 15 THEN c = 15\r
-PSET (x + 1, y), c\r
-NEXT x\r
-NEXT y\r
-\r
-END SUB\r
+SUB DrawWood (xPos, yPos)\r
+    DIM yl AS INTEGER\r
+    DIM pe AS INTEGER\r
+    DIM p AS INTEGER\r
+    DIM z AS INTEGER\r
+    DIM c AS INTEGER\r
+    DIM c1 AS INTEGER\r
+    DIM c2 AS INTEGER\r
+\r
+    ' Draw the outline of the wood\r
+    yl = yPos + 1\r
+    LINE (0, 0)-(xPos, yPos), 0, BF\r
+    LINE (5, 5)-(xPos - 5, yl - 5), 8, BF\r
+    LINE (10, 10)-(xPos - 10, yl - 10), 15, BF\r
+\r
+    ' Initialize random factor for color variation\r
+    pe = RND * 300\r
+\r
+    ' Draw the wood texture\r
+    FOR y = yPos - 1 TO 0 STEP -1\r
+        FOR x = xPos - 1 TO 0 STEP -1\r
+            p = p + 1\r
+            IF p > xPos THEN\r
+                z = RND * 13\r
+                p = SIN((y + pe) / 100) * xPos\r
+            END IF\r
+            c1 = POINT(x, y + 1)\r
+            c2 = POINT(x, y)\r
+            c = (c1 * 2 + c2 + c * 3 + z) / 7 + RND * 1\r
+\r
+            ' Ensure color value is within the valid range\r
+            IF c < 0 THEN c = 0\r
+            IF c > 15 THEN c = 15\r
+\r
+            ' Set the pixel color for the wood texture\r
+            PSET (x + 1, y), c\r
+        NEXT x\r
+    NEXT y\r
 \r
+END SUB
\ No newline at end of file