From: Svjatoslav Agejenko Date: Wed, 23 Apr 2025 20:29:23 +0000 (+0300) Subject: Better homepage layout X-Git-Url: http://www2.svjatoslav.eu/gitweb/?a=commitdiff_plain;h=57d361b7456f3172988a2a8839da477bfa1a89ca;p=qbasicapps.git Better homepage layout --- diff --git a/Graphics/index.html b/Graphics/index.html deleted file mode 100644 index eec20cd..0000000 --- a/Graphics/index.html +++ /dev/null @@ -1,1241 +0,0 @@ - - - - - - - -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

-
- -