Art
Volume Number: 3
Issue Number: 2
Column Tag: Fun With A Mac
Random MacArt in Basic 
By Amy Barger, Waunakee, WI
Random MacArt is an MS Basic program which creates catchy modern art designs.
Each design is unique and exciting with a general movement expressed. These designs
can be created almost instantaneously and have many potential uses for decorating,
entertainment, and experimentation. Figure 1 shows a design created by Random
MacArt.
Fig. 1 Our random art program in Basic
Using Random MacArt
Random MacArt is an easy program to use. To create a design, press COMMAND R
and watch the random designs appear; the computer screen will seem alive! Each
design will finish on its own. After you have admired or printed the design, click the
mouse button once and a fresh new design will appear. When you have created all the
designs you want, you can save or print them. To save a design, type COMMAND SHIFT
3. This saves the screen. In order to print a design, make sure the printer is on, then
type COMMAND SHIFT 4. This will print the active window. Stopping or listing the
program follows the normal MS Basic conventions.
How Random MacArt Works
The program is simple to understand. We will begin with the first line and go
through the program. RANDOMIZE TIMER bases random numbers according to the time
on the Macintosh's internal clock. If you were to use this program again at exactly the
same time that you had used it on a previous day, so that the clock reading was the
same, the same design would be created. You will most likely never get the same design
twice.
DIM shows the highest number of elements in the array specified in the
statement. In this program it is set to 10 for both x and y. The DIM statement is
really not necessary here because a maximum value of 10 is always assumed for an
otherwise unspecified subscript, but it is good practice to routinely use DIM
statements.
In order for designs to be created one after another without having to rerun the
program each time, a loop is used. When the computer gets to the last line of the
program, the statement GOTO loop instructs it to return to the line with the statement
"loop".
The WINDOW statement opens a window on the screen within which the design
will be drawn. The window-ID, one in this case, specifies the window's identification
number. The commas show that there is no title for this window. (If there had been, it
would have been in quotes between the two commas.) The numbers in parentheses
specify the window size. The x values for this window are 10 and 502, and the y
values are 26 and 332. Following the comma, the number three indicates that the type
of window desired is an one-line border window.
Following the WINDOW statement is a FOR/NEXT loop that is used in determining
ten random values of x and y, labeled as x(n) and y(n). The statements in the loop are
executed with n increasing by one each cycle. RND(1) returns a random number in
the range of 0 to 1. For x, the random number is multiplied by 440, and for y, by
254. INT converts the numbers into integers, and then two is added to each. These
latter steps insure that the design is drawn within the window's border. NEXT n forms
the loop. After ten iterations the loop is exited.
Next, nested FOR/NEXT loops are used to create the design based on the array of
random x(n), y(n) values generated previously.
The LINE statement draws a straignt line between the coordinates pairs
(x(n-1)+s*4), (y(n-1)+s*4) and (x(n)+s*4), (y(n)+s*4). For example, with
n=0 and s=0 the statement becomes LINE (x(1),y(1))-(x(2),y(2)). NEXT n forms
a loop so that the successive points will be connected. The LINE statement following
NEXT n connects the last point with n=10 back to the first point with n=1.
Without the FOR/NEXT loop on s, the design would look flat and simple. On every
pass through the s-loop an identical design is created with (x,y) points displaced four
pixels away from the previous design. By the time the loop is completed the result
consists of 13 superimposed designs.
The WHILE/WEND loop allows the user to view the design until the mouse button
is depressed. MOUSE(0) is the state of the mouse button, with MOUSE(0)=0
indicating that the button has not been clicked and MOUSE(0)=-1 indicating that it has
been. When the user clicks the mouse the WHILE statement will end with the WEND.
(WEND means WHILE end). The colon allows two separate statements to be entered on
one line. The CLS line clears the screen and the last line returns to "loop" to start a
new design.
Possible Modifications To Improve Random MacArt
When you have tried the program and printed out some intricate designs, the next
step is to experiment. If you would like your designs to have more sides to make them
appear even more complex, or smaller to make them appear simpler, the number of
random numbers to be chosen can be changed. Remember that if you increase the
number of random numbers to be used, the DIM statement must also be increased. If
you would prefer a larger or smaller screen, the window size numbers in the
parentheses can be altered. Three other types of windows can be obtained by changing
the number three after the parentheses to one, two, or four. Try altering the numbers
which are multiplied and added to the random numbers. This will position your designs
in different parts of the screen and make your designs larger or smaller. The distance
between each line of your designs can be altered by changing the value the variable s is
multiplied by. To create more or less lines, change the value of the variable s. As you
can see the possiblities of this program are endless! Have a good time and experiment
freely to make the most interesting designs possible. Try running this under the new
compiler and see if you can notice any speed improvements.
RANDOMIZE TIMER
DIM x(10),y(10)
loop:
WINDOW 1,,(10,26)-(502,332),3
FOR n=1 TO 10
x(n)=INT(RND(1)*440)+2
y(n)=INT(RND(1)*254)+2
NEXT n
FOR s=0 TO 12
FOR n=2 TO 10
LINE (x(n-1)+s*4,y(n-1)+s*4)-(x(n)+s*4,y(n)+s*4)
NEXT n
LINE (x(10)+s*4,y(10)+s*4)-(x(1)+s*4,y(1)+s*4)
NEXT s
WHILE MOUSE(0)=0:WEND
CLS
GOTO loop