Small Basic > Getting Started Guide > Chapter 7: Fun with Shapes




We’re going to have some fun in this chapter with whatever we’ve learned so far. This chapter contains samples that show some interesting ways of combining all that you’ve learned so far to create some cool looking programs.

Rectangalore

Here we draw multiple rectangles in a loop, with increasing size.

GraphicsWindow.BackgroundColor = "Black"
GraphicsWindow.PenColor = "LightBlue"
GraphicsWindow.Width = 200
GraphicsWindow.Height = 200
 
For i = 1 To 100 Step 5
  GraphicsWindow.DrawRectangle(100 - i, 100 - i, i * 2, i * 2)
EndFor 

Figure 7.1 - Rectangalore
Figure 7.1 - Rectangalore

Circtacular

A variant of the previous program draws circles instead of squares.

GraphicsWindow.BackgroundColor = "Black"
GraphicsWindow.PenColor = "LightGreen"
GraphicsWindow.Width = 200
GraphicsWindow.Height = 200
 
For i = 1 To 100 Step 5
  GraphicsWindow.DrawEllipse(100 - i, 100 - i, i * 2, i * 2)
EndFor

 

Figure 7.2 - Circtacular
Figure 7.2 - Circtacular

Randomize

This program uses the operation GraphicsWindow.GetRandomColor to set random colors for the brush and then uses Math.GetRandomNumber to set the x and y co-ordinates for the circles. These two operations can be combined in interesting ways to create interesting programs that give different results each time they are run.

GraphicsWindow.BackgroundColor = "Black"
For i = 1 To 1000
  GraphicsWindow.BrushColor = GraphicsWindow.GetRandomColor()
  x = Math.GetRandomNumber(640)
  y = Math.GetRandomNumber(480)
  GraphicsWindow.FillEllipse(x, y, 10, 10)
EndFor

 

Figure 7.3 - Randomize
Figure 7.3 - Randomize

Fractals

The following program draws a simple triangle fractal using random numbers. A fractal is a geometric shape that can be subdivided into parts, each of which resembles the parent shape accurately. In this case, the program draws hundreds of triangles each of which resembles its parent triangle. And since the program runs for a few seconds, you can actually see the triangles forming slowly from mere dots. The logic itself is somewhat hard to describe and I’ll leave it as an exercise for you to explore.

GraphicsWindow.BackgroundColor = "Black"
x = 100
y = 100
 
For i = 1 To 100000
  r = Math.GetRandomNumber(3)
  ux = 150
  uy = 30
  If (r = 1) then
    ux = 30
    uy = 1000
  EndIf
   
  If (r = 2) Then
    ux = 1000
    uy = 1000
  EndIf
   
  x = (x + ux) / 2
  y = (y + uy) / 2
   
  GraphicsWindow.SetPixel(x, y, "LightGreen")
EndFor

 

Figure 7.4 - Triangle Fractal
Figure 7.4 - Triangle Fractal

If you want to really see the dots slowly forming the fractal, you can introduce a delay in the loop by using the Program.Delay operation. This operation takes in a number that specifies in milliseconds, how long to delay. Here’s the modified program, with the modified line in bold.

GraphicsWindow.BackgroundColor = "Black"
x = 100
y = 100
 
For i = 1 To 100000
  r = Math.GetRandomNumber(3)
  ux = 150
  uy = 30
  If (r = 1) then
    ux = 30
    uy = 1000
  EndIf
   
  If (r = 2) Then
    ux = 1000
    uy = 1000
  EndIf
   
  x = (x + ux) / 2
  y = (y + uy) / 2
   
  GraphicsWindow.SetPixel(x, y, "LightGreen")
  Program.Delay(2)
EndFor

Increasing the delay will make the program slower. Experiment with the numbers to see what’s best for your taste.

Another modification you can make to this program is to replace the following line:

GraphicsWindow.SetPixel(x, y, "LightGreen")
 
with
 
color = GraphicsWindow.GetRandomColor()
GraphicsWindow.SetPixel(x, y, color)

This change will make the program draw the pixels of the triangle using random colors.

Next Chapter