-' 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
-' 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
-' 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
' 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
-' 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