From: Svjatoslav Agejenko Date: Wed, 23 Apr 2025 20:28:34 +0000 (+0300) Subject: Better homepage layout X-Git-Url: http://www2.svjatoslav.eu/gitweb/?a=commitdiff_plain;h=d5bb9061ac2a691a24b3653eb5e8da59edee7e4e;p=qbasicapps.git Better homepage layout --- diff --git a/Graphics/index.html b/Graphics/index.html new file mode 100644 index 0000000..eec20cd --- /dev/null +++ b/Graphics/index.html @@ -0,0 +1,1241 @@ + + + + + + + +Graphics demos + + + + + + +
+

Graphics demos

+ + + + +
+

1. Bump mapping

+
+

+Light source moves around. Based on light source location, different +parts of the surface become illuminated. +

+ +
+ +
+ +

+Source code +

+
+
+ +
+

2. Tree

+
+

+Tree grows and branches out. +

+ +
+ +
+ +

+Source code +

+ +
+
DECLARE SUB setPalette ()
+' Render tree that starts with single root and then branches out.
+' By Svjatoslav Agejenko.
+' Email: svjatoslav@svjatoslav.eu
+' Homepage: http://www.svjatoslav.eu
+'
+' Changelog:
+' 2001, Initial version
+' 2024.08, Improved program readability using AI
+
+
+DECLARE SUB start ()
+DECLARE SUB show (d%)
+DECLARE SUB setpal ()
+DECLARE SUB showpal ()
+DEFINT A-Y
+
+DIM SHARED x(1 TO 500)
+DIM SHARED y(1 TO 500)
+DIM SHARED s(1 TO 500)
+
+DIM SHARED x4(1 TO 500)
+DIM SHARED y4(1 TO 500)
+
+DIM SHARED z(1 TO 500)
+DIM SHARED mitu
+
+
+start
+
+1
+mitu = 1
+
+x4(1) = -1
+y4(1) = -1
+x(1) = 420
+y(1) = 340
+s(1) = 70 * 100
+z(1) = 1
+
+' Main loop to render the tree branches
+FOR tr = 1 TO 6
+    FOR b = 1 TO 50
+        FOR a = 1 TO mitu
+            show a
+        NEXT a
+    NEXT b
+
+    ' Duplicate existing branches and add randomness
+    FOR a = 1 TO mitu
+        x(mitu + a) = x(a)
+        y(mitu + a) = y(a)
+        s(mitu + a) = s(a)
+        z(mitu + a) = z(a)
+        x4(mitu + a) = RND * 4 - 2
+        y4(mitu + a) = RND * 4 - 2
+    NEXT a
+    mitu = mitu * 2
+
+NEXT tr
+
+' Exit application if any key was pressed by user
+IF INKEY$ <> "" THEN SYSTEM
+
+
+SLEEP 2
+CLS
+GOTO 1
+
+SUB setPalette
+    ' Set the palette colors to grayscale
+    FOR a = 0 TO 16
+        OUT &H3C8, a
+        OUT &H3C9, a * 4
+        OUT &H3C9, a * 4
+        OUT &H3C9, a * 4
+    NEXT
+END SUB
+
+SUB show (d)
+    ' Retrieve current branch properties
+    x1 = x(d)
+    y1 = y(d)
+    s1 = s(d)
+    z1 = z(d)
+
+    ' Calculate color based on angle
+    c = SIN(z1) * 7 + 9
+
+    ' Draw and fill the circle representing the branch
+    CIRCLE (x1, y1), s1 / 100, c
+    PAINT (x1, y1), c
+
+    ' Update position based on current angle and size
+    x(d) = x(d) + (SIN(z1) * 1000) / (s1 + 15)
+    y(d) = y(d) + (COS(z1) * 1000) / (s1 + 15)
+
+    ' Decay the size slightly
+    s(d) = s(d) / 1.01
+
+    ' Update angle based on direction
+    IF x4(d) >= 0 THEN z(d) = z(d) + .1 ELSE z(d) = z(d) - .1
+
+    ' Move branch in its random direction
+    x(d) = x(d) + x4(d)
+    y(d) = y(d) + y4(d)
+END SUB
+
+SUB start
+    SCREEN 12
+    setPalette
+    RANDOMIZE TIMER
+END SUB
+
+
+
+
+ +
+

3. Rotation in 2D space using trigonometry functions

+
+

+Grid of dots is rotated on the screen. +

+ +
+ +
+ +

+Source code +

+ +
+
' This program showcases the rotation of points on an X-Y coordinate
+' system using trigonometric functions, specifically sine and cosine. By
+' simulating the effect of rotating a collection of grid points around
+' the origin, it demonstrates the mathematical principles behind 2D
+' rotation.
+'
+' By Svjatoslav Agejenko.
+' Email: svjatoslav@svjatoslav.eu
+' Homepage: http://www.svjatoslav.eu
+
+' Changelog:
+' 2003.12, Initial version
+' 2024, Improved program readability using AI
+
+DIM SHARED pointXCoordinates(1000) ' Array to store x coordinates of points
+DIM SHARED pointYCoordinates(1000) ' Array to store y coordinates of points
+DIM SHARED oldPointXCoordinates(1000) ' Array to store previous x coordinates of points
+DIM SHARED oldPointYCoordinates(1000) ' Array to store previous y coordinates of points
+
+SCREEN 13
+
+numPoints = 0 ' Initialize the number of points
+FOR pointXVal = -10 TO 10
+    FOR pointYVal = -10 TO 10
+        numPoints = numPoints + 1
+        pointXCoordinates(numPoints) = pointXVal
+        pointYCoordinates(numPoints) = pointYVal
+    NEXT pointYVal
+NEXT pointXVal
+
+' Main rotation loop
+rotationAngle = 0 ' Initialize the rotation angle to 0
+
+1
+    rotationAngle = rotationAngle + .01  ' Increment the rotation angle by 0.01 radians
+
+    ' Calculate the sine and cosine of the current rotation angle
+    sineOfRotationAngle = SIN(rotationAngle)
+    cosineOfRotationAngle = COS(rotationAngle)
+
+    FOR pointIndex = 1 TO numPoints
+        PSET (oldPointXCoordinates(pointIndex), oldPointYCoordinates(pointIndex)), 0 ' Clear the previous position
+
+        xCoordinate = pointXCoordinates(pointIndex)
+        yCoordinate = pointYCoordinates(pointIndex)
+
+        ' Calculate the new x and y coordinate after rotation
+        newXCoordinate = xCoordinate * sineOfRotationAngle + yCoordinate * cosineOfRotationAngle
+        newYCoordinate = xCoordinate * cosineOfRotationAngle - yCoordinate * sineOfRotationAngle
+
+        ' Scale and translate the new x and y coordinates to the center of the screen
+        newXCoordinate = newXCoordinate * 7 + 160
+        newYCoordinate = newYCoordinate * 7 + 100
+
+        ' Store x and y on-screen coordinates for clearing on next iteration
+        oldPointXCoordinates(pointIndex) = newXCoordinate
+        oldPointYCoordinates(pointIndex) = newYCoordinate
+
+        PSET (newXCoordinate, newYCoordinate), 15 ' Draw the point at the new position
+    NEXT pointIndex
+
+IF INKEY$ = "" THEN GOTO 1 ' Continue rotating if no key is pressed
+
+
+
+
+ +
+

4. Various text mode animation effects

+
+

+Program demonstrates various animation effects that can be +accomplished using text-mode rendering. +

+ +
+ +
+ +

+Source code +

+
+
+ +
+

5. Snowfall

+
+

+Program simulates falling of snow particles. Particles fall towards +the ground because of the gravity. Once particle falls on the surface, +it tries to skid around a bit, bit ultimately freezes in-place. +

+ +
+ +
+ +

+Source code +

+ +
+
' Svjatoslav Agejenko 2003.04
+
+DEFINT A-Z
+DECLARE SUB fall (particleIndex)
+DECLARE SUB start ()
+
+amo = 500
+
+DIM SHARED fx(1 TO amo)
+DIM SHARED fy(1 TO amo)
+
+' Initialize particle positions
+FOR a = 1 TO amo
+    fx(a) = RND * 300 + 10
+    fy(a) = RND * 100 + 10
+NEXT a
+
+start
+
+1
+' Main loop to simulate snowfall
+FOR b = 1 TO 100
+    a = INT(RND * amo) + 1
+    fall a
+NEXT b
+SOUND 0, .1
+IF INKEY$ <> "" THEN SYSTEM
+GOTO 1
+
+SUB fall (particleIndex)
+
+t = 0
+2
+' Draw the particle at its current position
+PSET (fx(particleIndex), fy(particleIndex)), 0
+
+ny = fy(particleIndex) + 1
+nx = fx(particleIndex) + INT(RND * 3) - 1
+
+' Check for collision with another particle
+IF POINT(nx, ny) > 0 THEN
+    ' If collision detected and t is less than 10, increment t and retry
+    IF t < 10 THEN
+        t = t + 1
+        GOTO 2
+    END IF
+    ' If collision persists, change particle color to indicate collision
+    PSET (fx(particleIndex), fy(particleIndex)), 15
+    nx = RND * 300 + 10
+    ny = 1
+END IF
+
+' Check if the particle has reached the bottom of the screen
+IF fy(particleIndex) > 198 THEN
+    PSET (fx(particleIndex), fy(particleIndex)), 15
+    nx = RND * 300 + 10
+    ny = 1
+END IF
+
+' Update particle position
+fx(particleIndex) = nx
+fy(particleIndex) = ny
+
+' Draw the particle at its new position
+PSET (fx(particleIndex), fy(particleIndex)), 15
+
+END SUB
+
+DEFSNG A-Z
+SUB start
+SCREEN 13
+
+' Create nice and curvy surface for snow particles to fall onto.
+' Here we draw "SNOW" with big and wobbly letters to the screen
+' to serve as an obstacle for snow particles.
+
+LOCATE 1, 1
+PRINT "SNOW"
+
+FOR y = 0 TO 15 STEP .2
+    xp = SIN(y / 1) * 3 + 65
+    FOR x = 0 TO 30 STEP .1
+        ys = 4 + COS(x / 5)
+        yp = COS(x / 4 + 3) * 5 + 130
+        c = POINT(x, y)
+        ' Draw a line if the point is not black
+        IF c > 0 THEN
+            LINE (x * 6 + xp, y * ys + yp)-(x * 6 + xp + 1, y * ys + yp + 1), 11, BF
+        END IF
+    NEXT x
+NEXT y
+
+LOCATE 1, 1
+PRINT "      "
+
+END SUB
+
+
+
+
+ +
+

6. Screensaver

+
+

+Application of trigonometry functions is explored here to calculate +line coordinates. +

+ +
+ +
+ +

+Source code +

+ +
+
' Mystery screensaver
+' By Svjatoslav Agejenko.
+' Email: svjatoslav@svjatoslav.eu
+' Homepage: http://www.svjatoslav.eu
+'
+' Changelog:
+' 2004.01, Initial version
+' 2024.08, Improved program readability using AI
+
+SCREEN 7, , , 1
+
+' Main loop for animation
+DO
+    ' Increment frame counter
+    frameCounter = frameCounter + 1
+
+    ' Calculate scaling factor based on frame counter
+    scaleFactor = (SIN(frameCounter / 100) + 1.1) * 2
+
+    ' Draw lines to create animation effect
+    FOR s = 1 TO 20 STEP .1
+        ' Calculate x and y coordinates for the first point
+        x = SIN(s / 1 + frameCounter / 7) * 100
+        y = COS(s / 1 + frameCounter / 10) * 100
+
+        ' Calculate x and y coordinates for the second point
+        x1 = SIN(s / 1 - frameCounter / 8) * 100
+        y1 = COS(s / 1 + frameCounter / 15) * 100
+
+        ' Draw a line between the two points with varying thickness
+        LINE (x + 160, y + 100)-(x1 + 160, y1 + 100), s MOD 15
+    NEXT s
+
+    ' Copy screen buffer to display the animation
+    PCOPY 0, 1
+
+    ' Generate a sound effect
+    SOUND 0, 1
+
+    ' Clear the screen for the next frame
+    CLS
+
+    ' Check if a key is pressed and exit if so
+    IF INKEY$ <> "" THEN SYSTEM
+LOOP
+
+
+
+
+ +
+

7. Screensaver - flying hand fans

+
+

+Quick implementation for colorful flying hand fans. +

+ +
+ +
+ +

+Source code +

+ +
+
' Screensaver
+' By Svjatoslav Agejenko.
+' Email: svjatoslav@svjatoslav.eu
+' Homepage: http://www.svjatoslav.eu
+'
+' Changelog:
+' 2003.04, Initial version
+' 2024.08, Improved program readability using AI
+
+
+SCREEN 7, , , 1
+
+' Main animation loop
+1 :
+    ' Adjust frame counter if it exceeds a certain threshold
+    IF frameCounter > 10000 THEN frameCounter = -10000
+
+    ' Update the positions of six points based on the frame counter
+    FOR pointIndex = 1 TO 6
+        OUT &H3C8, pointIndex
+        OUT &H3C9, SIN(pointIndex + frameCounter * 3) * 30 + 31
+        OUT &H3C9, COS(pointIndex * 1 + frameCounter * 5) * 30 + 31
+        OUT &H3C9, SIN(pointIndex * .7 + frameCounter * 2.23) * 30 + 31
+    NEXT pointIndex
+
+    ' Increment the frame counter for the next iteration
+    frameCounter = frameCounter + .01
+
+    ' Render lines connecting points
+    FOR objectIndex = 1 TO 10
+        ' Determine the color based on the remainder of objectIndex divided by 6
+        pointColor = (objectIndex MOD 6) + 1
+        ' Calculate the X coordinate for the starting point of the line
+        xCoordinate = SIN(objectIndex + frameCounter) * 100 + 150
+        ' Calculate the Y coordinate for the starting point of the line
+        yCoordinate = COS(objectIndex * 1.2 + frameCounter * 1.81) * 80 + 100
+        ' Calculate the sine component for the line's angle
+        xSineComponent = SIN(objectIndex * frameCounter * 2.3)
+        ' Draw lines from the starting point with varying lengths and angles
+        FOR xPositionOffset = -50 TO 50 STEP 10
+            ' Calculate the cosine component for the line's angle based on xPositionOffset
+            yCosineComponent = COS(xPositionOffset / 60 + frameCounter * 1 + objectIndex) * 50
+            ' Draw a line segment with varying thickness and color
+            LINE (xCoordinate, yCoordinate)-(xCoordinate + xPositionOffset * xSineComponent, yCoordinate - yCosineComponent), pointColor
+        NEXT xPositionOffset
+    NEXT objectIndex
+
+    ' Copy the graphics from the hidden page to the visible page
+    PCOPY 0, 1
+
+    ' Clear the screen for the next frame
+    CLS
+
+    ' Play a sound at a specific frequency and duration
+    SOUND 0, .4
+
+    ' Check if any key is pressed; if so, exit the program
+    IF INKEY$ <> "" THEN SYSTEM
+
+    ' Loop back to the start of the animation
+GOTO 1
+
+
+
+
+ +
+

8. Polygon rendering

+
+

+Algorithm to demonstrate rendering or polygons across arbitrary +coordinates. +

+ +
+ +
+ +

+Source code +

+ +
+
' Program to render polygons at random locations and random colors.
+' By Svjatoslav Agejenko.
+' Email: svjatoslav@svjatoslav.eu
+' Homepage: http://www.svjatoslav.eu
+
+' Changelog:
+' 2001,    Initial version
+' 2024,    Improved program readability using AI
+
+DEFINT A-Z
+DECLARE SUB fillPolygon (x1, y1, x2, y2, x3, y3, c)
+SCREEN 13
+
+MainLoop:
+    ' Generate random coordinates for the first vertex
+    x1 = RND * 318 + 1
+    y1 = RND * 198 + 1
+
+    ' Generate random coordinates for the second vertex
+    x2 = RND * 318 + 1
+    y2 = RND * 198 + 1
+
+    ' Generate random coordinates for the third vertex
+    x3 = RND * 318 + 1
+    y3 = RND * 198 + 1
+
+    ' Fill the polygon with a random color
+    fillPolygon x1, y1, x2, y2, x3, y3, RND * 255
+
+    ' Add delay
+    SOUND 0, 1
+
+    ' Check if any key is pressed to exit the loop
+    IF INKEY$ <> "" THEN SYSTEM
+GOTO MainLoop
+
+SUB fillPolygon (x1, y1, x2, y2, x3, y3, c)
+    ' Buffer array to store x-coordinates for each y-index
+    DIM yBuffer(-10 TO 210)
+
+    ' Draw the line between the first and second vertices
+    tempX1 = x1
+    tempY1 = y1
+    tempX2 = x2
+    tempY2 = y2
+    GOSUB makeLine
+
+    ' Draw the line between the first and third vertices
+    tempX1 = x1
+    tempY1 = y1
+    tempX2 = x3
+    tempY2 = y3
+    GOSUB makeLine
+
+    ' Draw the line between the second and third vertices
+    tempX1 = x3
+    tempY1 = y3
+    tempX2 = x2
+    tempY2 = y2
+    GOSUB makeLine
+
+GOTO FillEnd
+
+makeLine:
+    ' Ensure that the start point is always below the end point
+    IF tempY2 < tempY1 THEN SWAP tempY1, tempY2: SWAP tempX1, tempX2
+
+    ' Loop through each y-index from the start to the end
+    FOR yIndex = tempY1 TO tempY2 - 1
+        ' Calculate the x-position for the current y-index
+        xPos = tempX1 + (tempX2 - tempX1) * ((yIndex - tempY1) / (tempY2 - tempY1))
+
+        ' If the buffer is empty, store the x-position
+        IF yBuffer(yIndex) = 0 THEN
+            yBuffer(yIndex) = xPos
+        ELSE
+            ' Otherwise, draw a line between the stored and calculated positions
+            LINE (xPos, yIndex)-(yBuffer(yIndex), yIndex), c
+        END IF
+    NEXT yIndex
+RETURN
+
+FillEnd:
+END SUB
+
+
+
+
+ +
+

9. Textured polygon rendering

+
+

+Algorithm to demonstrate rendering or textured polygons across +arbitrary coordinates. +

+ +
+ +
+ +

+Source code +

+
+
+ +
+

10. Yin and yang animation

+
+

+Yin and yang is a concept that originated in Chinese philosophy, +describing an opposite but interconnected, self-perpetuating +cycle. Yin and yang can be thought of as complementary and at the same +time opposing forces that interact to form a dynamic system in which +the whole is greater than the assembled parts and the parts are +important for cohesion of the whole. +

+ +
+ +
+ +

+Source code +

+ +
+
' Yin and yang animation
+' By Svjatoslav Agejenko.
+' Email: svjatoslav@svjatoslav.eu
+' Homepage: http://www.svjatoslav.eu
+'
+' Changelog:
+' 2000, Initial version
+' 2024.08, Improved program readability using AI
+
+DECLARE SUB Cir (x!, y!, r!, c!)
+SCREEN 13
+pi = 3.141592599999999#
+PAINT (1, 1), 1
+
+' Main animation loop
+DO
+    ' Calculate the x and y positions for both circles using sine and cosine functions
+    x = SIN(a) * 40 + 160
+    x1 = SIN(a + pi) * 40 + 160
+    y = COS(a) * 34 + 100
+    y1 = COS(a + pi) * 34 + 100
+
+    ' Draw the first circle with color 0 (black)
+    Cir x, y, 40, 0
+    ' Draw the second circle with color 1 (blue)
+    Cir x1, y1, 40, 1
+
+    ' Increment the angle to animate the circles
+    a = a + .05
+
+    ' Check for user input to exit the program
+    IF INKEY$ <> "" THEN SYSTEM
+
+    ' delay to slow down animation
+    SOUND 0, 1
+LOOP
+
+' Subroutine to draw a circle with specified center (x, y), radius r, and color c
+SUB Cir (x, y, r, c)
+    ' Define colors for the circle outline
+    cc1 = 0 ' Black
+    cc2 = 15 ' White
+
+    ' Swap colors if the second color is desired for the inner part of the circle
+    IF c = 1 THEN SWAP cc1, cc2
+
+    ' Draw the circle from radius 1 to r
+    FOR a = 1 TO r
+        ' Determine the color for the current circle segment
+        IF a < r / 2 THEN c1 = cc1 ELSE c1 = cc2
+        ' Draw the circle segment with the determined color
+        CIRCLE (x, y), a, c1
+    NEXT a
+END SUB
+
+
+
+
+ +
+

11. Orbiting particles

+
+

+Trivial to implement but interesting looking effect. Various particles +are orbiting central point. Each particle is connected to the center. +

+ +
+ +
+ +

+Source code +

+ +
+
' Projects animated particles in orbit around a central point.
+' By Svjatoslav Agejenko.
+' Email: svjatoslav@svjatoslav.eu
+' Homepage: http://www.svjatoslav.eu
+
+' Changelog:
+' ?, Initial version
+' 2024, Improved program readability using AI
+
+SCREEN 7, , , 1
+RANDOMIZE TIMER
+
+' Declare shared arrays to store particles
+DIM SHARED particleColor(1 TO 100)
+DIM SHARED particleX(1 TO 100)
+DIM SHARED particleAngle(1 TO 100)
+
+' Initialize the arrays with random values
+FOR a = 1 TO 100
+    particleColor(a) = RND * 15
+    particleX(a) = RND * 100
+    particleAngle(a) = RND * 100
+NEXT a
+
+' Main loop to draw the animated particles
+1
+CLS
+FOR a = 1 TO 50
+    ' Get current segment data
+    currentColor = particleColor(a)
+    currentParticleX = particleX(a)
+    currentparticleAngle = particleAngle(a)
+
+    ' Calculate the x and y coordinates for the current segment
+    xCoordinate = SIN(currentparticleAngle) * 25
+    yCoordinate = SIN(currentParticleX) * 20
+
+    ' Scale the coordinates
+    scaleFactor = (COS(currentparticleAngle) + 2) * 2
+    xCoordinate = xCoordinate * scaleFactor
+    yCoordinate = yCoordinate * scaleFactor
+
+    ' Draw the current particle as a circle
+    CIRCLE (xCoordinate + 160, yCoordinate + 100), scaleFactor, currentColor
+
+    ' Fill the inside of the circle with color
+    PAINT (xCoordinate + 160, yCoordinate + 100), currentColor
+
+    ' Draw a line from the center to the current particle
+    LINE (160, 100)-(xCoordinate + 160, yCoordinate + 100), currentColor
+
+    ' Rotate particle by small amount for next frame
+    particleAngle(a) = particleAngle(a) + .1
+NEXT a
+
+' Copy screen buffer 0 to screen buffer 1
+PCOPY 0, 1
+
+' Check for user input and exit if any key is pressed
+IF INKEY$ <> "" THEN SYSTEM
+
+' Use sound function with inaudible 0 Hz but fixed delay to slow down animation
+SOUND 0, 1
+
+' Go back to the main loop
+GOTO 1
+
+
+
+
+ +
+

12. DNA animation

+
+

+Animated DNA. Nowhere close to being anatomically correct, but +resembles animation as seen in the movies :) +

+ +
+ +
+ +

+Source code +

+ +
+
' Program to render animated DNA as seen in the movies.
+'
+' By Svjatoslav Agejenko.
+' Email: svjatoslav@svjatoslav.eu
+' Homepage: http://www.svjatoslav.eu
+'
+' Changelog:
+' ?, Initial version
+' 2024, Improved program readability using AI
+
+DIM SHARED xCoordinates(1 TO 100)
+DIM SHARED yCoordinates(1 TO 100)
+DIM SHARED zCoordinates(1 TO 100)
+DIM SHARED colorCodes(1 TO 100)
+
+SCREEN 7, , , 1
+
+1:
+b = 0
+rotationAngle = rotationAngle + 0.1
+FOR a = 1 TO 20
+    b = b + 1
+    ' Calculate x-coordinate using sine function and add to array
+    xCoordinates(b) = SIN(a / 2 + rotationAngle) * 30 + 150
+    ' Calculate z-coordinate using sine function and add to array
+    zCoordinates(b) = SIN(a / 2 + rotationAngle + 1.6) * 2 + 2
+    ' Calculate y-coordinate by multiplying a with 8 and adding z-coordinate
+    yCoordinates(b) = a * 8 + zCoordinates(b)
+    ' Assign color code to the current point
+    colorCodes(b) = 3
+
+    b = b + 1
+    ' Calculate x-coordinate using sine function and add to array
+    xCoordinates(b) = SIN(a / 2 + rotationAngle + 2.5) * 30 + 150
+    ' Calculate z-coordinate using sine function and add to array
+    zCoordinates(b) = SIN(a / 2 + rotationAngle + 1.6 + 2.5) * 2 + 2
+    ' Calculate y-coordinate by multiplying a with 8 and adding z-coordinate
+    yCoordinates(b) = a * 8 + zCoordinates(b)
+    ' Assign color code to the current point
+    colorCodes(b) = 4
+NEXT a
+
+' Clear the screen
+CLS
+
+' Draw lines and circles based on z-coordinate
+FOR b = 0 TO 4
+    IF b = 1 THEN
+        FOR a = 1 TO 40 STEP 2
+            ' Draw line between consecutive points
+            LINE (xCoordinates(a), yCoordinates(a))-(xCoordinates(a + 1), yCoordinates(a + 1)), 15
+        NEXT a
+    END IF
+
+    FOR a = 1 TO 40
+        ' Check if the current z-coordinate matches the loop variable b
+        IF int(zCoordinates(a)) = b THEN
+            ' Draw circle with specified color code
+            CIRCLE (xCoordinates(a), yCoordinates(a)), b + 5, colorCodes(a)
+            PAINT (xCoordinates(a), yCoordinates(a)), colorCodes(a)
+            ' Draw an black outline of the circle
+            CIRCLE (xCoordinates(a), yCoordinates(a)), b + 5, 0
+        END IF
+    NEXT a
+NEXT b
+
+' Copy the screen to buffer and clear the screen
+PCOPY 0, 1
+CLS
+
+' Check if any key is pressed
+IF INKEY$ = "" THEN GOTO 1
+
+' End the program
+SYSTEM
+
+
+
+
+ +
+

13. Matrix

+
+

+Effect inspired by "The Matrix" movie. +

+ +
+ +
+ +

+Source code +

+
+
+ +
+

14. Hacker

+
+

+Ultra-realistic hacker screen simulator! Behold da glory of a true +hacker's terminal, brimming wif mystical green text that cascades like +a waterfall of knowledge across thy monitor. +

+ +
+ +
+ +

+Source code +

+
+
+
+
+

Created: 2025-04-23 ke 23:27

+

Validate

+
+ +