REM Per caricare ed eseguire questo programma, segui queste istruzioni:
REM 1) Carica normalmente AmigaBasic dal dischetto degli Extras che era
REM    sicuramente incluso nella confezione di Amiga.
REM 2) Non appena il Basic e' stato caricato, togli il disco Extras dal 
REM    drive e inserisci questo dischetto di AmigaByte.
REM 3) Seleziona dai menu a discesa di AmigaBasic l'opzione "Open" e digita
REM    come nome del file da caricare: DF0:BASIC/TERRAIN.BAS
REM 4) Premendo Return verra' caricato questo listato in memoria, e potrete
REM    eseguirlo digitando il comando RUN da AmigaBasic.
REM						AmigaByte
REM					       la redazione

    CLEAR ,200000&
    DEFINT cell
    INPUT "SEED :->",SEED
    A=RND(-SEED)
    size = 8
    count = 2^size
    colours = 32
    DIM SHARED Range(8)
    DATA 32, 32, 30,22, 14, 8, 4, 2
    FOR f=1 TO 8:READ Range(f):NEXT
    DIM SHARED cell(count,count) 
   WHILE 1
       GOSUB grow
   WEND
   END
   

grow:
    SCREEN 2,320,256,5,1
    WINDOW 2,,,1,2
    FOR f=0 TO 1
      PALETTE f,f/10,f/10,f/10+.5
    NEXT
    FOR f=2 TO 10
      PALETTE f,.1,1-(f-2)/10,.1
    NEXT
    FOR f=11 TO 27
      PALETTE f,(f-11)/20+.2,(f-11)/20,.1
    NEXT
    FOR f=28 TO 31
      PALETTE f,1,1,1
    NEXT
    cell(0, 0) = 0
    Sstep = count
    FOR i = 0 TO size - 1 
        nextStep = Sstep / 2
        FOR l = 0 TO count - 1 STEP Sstep
            l1 = l + nextStep
            l2 = l + Sstep
            IF l2 = count THEN
                l2 = 0
            END IF
            FOR c = 0 TO count - 1 STEP Sstep
                c1 = c + nextStep
                c2 = c + Sstep
                IF c2 = count THEN
                    c2 = 0
                END IF
                CALL set(l, c1, i, (cell(l, c) + cell(l, c2) + 1) / 2)
                CALL set(l1, c, i, (cell(l, c) + cell(l2, c) + 1) / 2)
                CALL set(l1, c1, i, (cell(l, c) + cell(l, c2) + cell(l2, c) + cell(l2, c2) + 2) / 4)
            NEXT
        NEXT
        Sstep = nextStep
    NEXT
RETURN

SUB set( l, c, size, height) STATIC
    SHARED colours
    rang = Range(size+1)
    height = height + INT(RND(1)*rang) - (rang + 1) / 2 
    cell(l, c) = height
        IF height<0 THEN
            pen=0
        ELSEIF height>=colours THEN
            pen=colours-1
        ELSE
            pen=height
        END IF
        PSET( c, l), INT(pen )
END SUB

