80 x2=INT (RND*256): y2=INT (RND*128):
REM random line end
90 DRAW INK c;x2-x1,y2-y1
100 x1,y1=x2,y2: REM next line starts
where last one finished
110 c+=1:IF c=8 THEN c=1
120 NEXT r
130 PAUSE 0: REM Display inspection
140 NEXT m
150 STOP
1000 DEFPROC LayChange (mode)
1010 IF mode=0 THEN LAYER 0
1020 IF mode=1 THEN LAYER 1,0
1030 IF mode=2 THEN LAYER 1,1
1040 IF mode=3 THEN LAYER 1,2
1050 IF mode=4 THEN LAYER 1,3
1060 IF mode=5 THEN LAYER 2,1
1070 ENDPROC
In layers other than LoRes and Layer 2, you can see how the lines seem to get broader as the program goes on, and this is because a line changes the colours of all the inked-in pixels of all the attribute positions that it passes through. You may also be temporarily perplexed about how the program doesn't crash on LoRes given that the selected values can exceed these of the physical resolution (see line 80). This would definitely be true for compatibility reasons on Layer 0, however on other layers, graphics output off screen is permitted for x and y values up to 65535. Note that you can embed PAPER, INK, FLASH (only on layers that this is available or not turned off by enabling the EnhancedULA functionality), BRIGHT (idem), INVERSE and OVER items in a PLOT or DRAW statement just as you could with PRINT and INPUT. They go between the keyword and the coordinates, and are terminated by either semicolons or commas.
An extra frill with DRAW is that you can use it to draw parts of circles instead of straight lines, by using an extra number to specify an angle to be turned through; the form is:
DRAW x_coordinate, y_coordinate, arc_turn
x_coordinate and y_coordinate are used to specify the finishing point of the line just as before and arc_turn is the number of radians that it must turn through as it goes; if arc_turn is a positive it turns to the left, while if arc_turn is a negative it turns to the right. Another way of seeing arc_turn is as showing the fraction of a complete circle that will be drawn: a complete circle is 2π radians, so if a=π it will draw a semicircle, if a=**0.5***π a quarter of a circle, and so on.
For instance suppose a=π . Then whatever values x and y take, a semicircle will be drawn. Run:
10 PLOT 100,100: DRAW 50,50, PI
ZX Spectrum Next User Manual, 3rd Edition (ISBN 978-1-5272-5496-1), written and illustrated by Phoebus R. Dokos. Copyright © 2020-2024 Phoebus Dokos / SpecNext Ltd. Licensed under CC BY-NC-SA 4.0. This is a transcription and can contain errors; check any doubt against the printed page.