home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
AMOS PD CD
/
amospdcd.iso
/
451-475
/
apd453
/
flakes.amos
/
flakes.amosSourceCode
Wrap
AMOS Source Code
|
1993-01-08
|
4KB
|
196 lines
Set Buffer 70
Rem
Rem Please Note
Rem
Rem At present the save option performs one more cycle
Rem before saving. It saves the pattern of pixels on or
Rem off, so when you reload it the colours will no doubt
Rem be different, but the basic design will be the same.
Rem
Screen Open 1,340,260,16,LORES
HOWBIG=100
Dim CELL(HOWBIG+1,HOWBIG+1)
Wind Open 1,0,0,40,30,1
Palette ,,,,$0,$0,$FF0,$F0F,$FF,$888,$F00,$F0,$F,$0,$0
Curs Off
Pen 0
Paper 2
Title Top " Amiga Snowflakes "
Menu$(1)="CONTROLS"
Menu$(1,4)="INITIALIZE"
Menu$(1,5)="CHANGE SIZE"
Menu$(1,6)="LOAD"
Menu$(1,7)="SAVE"
Menu$(1,8)="QUIT"
On Menu Gosub MENUINT
Menu On
On Menu On
SIZE=64
FACTOR=20
NEWSIZE:
SIZE1=SIZE+1
INITIALIZE:
Clw
Menu$(1,1)="START"
Menu$(1,2)=" "
Menu$(1,3)="STEP"
Locate 30,1
Print "SIZE:"
Locate 30,2
Print SIZE;" "
Locate 30,4
Print "GEN: "
Locate 30,7
Print "AREA:"
H=SIZE/2
GENERATION=0
For X=1 To H
For Y=X To 1 Step -1
CELL(X,Y)=0
CELL(X,X)=7
Next Y
Next X
RNMODE=0
MAINLOOP:
Menu On
Ink 0
Bar FACTOR,FACTOR To SIZE+2,SIZE+2
Locate 30,5
Print GENERATION;" "
DENSITY=-128
For X=1 To H
For Y=X To 1 Step -1
STORE=0
C=CELL(X,Y)
If X=Y or(C>4 and C<8)
STORE=1
Ink Rnd(11)+4
DENSITY=DENSITY+8
XF=X+FACTOR
YF=Y+FACTOR
SIZEF=SIZE1+FACTOR
Plot XF,YF
Plot SIZEF-XF,YF
Plot XF,SIZEF-YF
Plot SIZEF-XF,SIZEF-YF
Plot YF,XF
Plot SIZEF-YF,XF
Plot YF,SIZEF-XF
Plot SIZEF-YF,SIZEF-XF
End If
CELL(X,Y)=STORE
Next Y
Next X
Locate 30,8
Print DENSITY;" "
CHECKMENU:
While((RNMODE=0) or(MKEY<>0))
If MENUHIT=1
Goto EXECUTE
End If
Menu On
On Menu On
Wend
GENERATE:
GENERATION=GENERATION+1
For X=1 To H
For Y=X To 1 Step -1
If(CELL(X,Y) and 1)<>0
CELL(X-1,Y-1)=CELL(X-1,Y-1)+2
CELL(X,Y-1)=CELL(X,Y-1)+2
CELL(X+1,Y-1)=CELL(X+1,Y-1)+2
CELL(X-1,Y)=CELL(X-1,Y)+2
CELL(X+1,Y)=CELL(X+1,Y)+2
CELL(X-1,Y+1)=CELL(X-1,Y+1)+2
CELL(X,Y+1)=CELL(X,Y+1)+2
CELL(X+1,Y+1)=CELL(X+1,Y+1)+2
If X=H
CELL(X,Y-1)=CELL(X,Y-1)+2
CELL(X,Y)=CELL(X,Y)+2
CELL(X,Y+1)=CELL(X,Y+1)+2
End If
End If
Next Y
Next X
For X=2 To H-1
If(CELL(X,X-1) and 1)<>0 Then CELL(X,X-1)=CELL(X,X-1)+2
Next X
For X=1 To H
CELL(0,X)=0
CELL(X-1,X+1)=0
CELL(X,0)=0
Next X
Goto MAINLOOP
EXECUTE:
Menu Off
MENUHIT=0
On MNUCAT Goto STRTMODE,STPMODE,GENERATE,INITIALIZE,CHANGESIZE,LODER,SAVR,QUIT
STRTMODE:
RNMODE=1
MKEY=0
Menu$(1,1)="RUNNING"
Menu$(1,2)="STOP"
Menu$(1,3)=" "
Goto GENERATE
STPMODE:
RNMODE=0
Menu$(1,1)="START"
Menu$(1,2)=" "
Menu$(1,3)="STEP"
Goto CHECKMENU
QUIT:
End
CHANGESIZE:
Clw
Print "INPUT THE NEW LENGTH/WIDTH OF"
Print "CELL ARRAY. USE ONLY EVEN NUMBERS."
Input "";SIZE
SIZE=SIZE and 254
Curs Off
If SIZE>(HOWBIG*2) Then Goto CHANGESIZE
Goto NEWSIZE
LODER:
FILE$=Fsel$("Screens/*.flk","","Load Data From")
Open In 1,FILE$
Input #1,SIZE
Input #1,GENERATION
H=SIZE/2
SIZE1=SIZE+1
For X=1 To H
For Y=X To 1 Step -1
Input #1,CELL(X,Y)
If CELL(X,Y)=1
CELL(X,Y)=7
End If
Next Y
Next X
Close 1
Locate 30,2
Print SIZE
RNMODE=0
Menu$(1,1)="START"
Menu$(1,2)=" "
Menu$(1,3)="STEP"
Goto MAINLOOP
SAVR:
FILE$=Fsel$("Screens/*.flk","","Save Data as")
FILE$=Lower$(FILE$)
If Right$(FILE$,4)<>".flk"
FILE$=FILE$+".flk"
End If
Open Out 1,FILE$
Print #1,SIZE
Print #1,GENERATION
For X=1 To H
For Y=X To 1 Step -1
Print #1,CELL(X,Y)
Next Y
Next X
Close 1
Goto GENERATE
MENUINT:
MENUHIT=Choice(1)
MNUCAT=Choice(2)
MKEY=2
On Menu On
Return