home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga MA Magazine 1998 #6
/
amigamamagazinepolishissue1998.iso
/
coders
/
jËzyki_programowania
/
logo
/
powerlogo
/
examples
/
demo
next >
Wrap
Text File
|
1992-11-10
|
15KB
|
623 lines
; *********************************************************************
; *** A demo of Power LOGO graphics ***
; *********************************************************************
make "demo [
procedure [ [ ] [ ] [ :abort-screen :abort-window ] ]
pr [ ]
pr [ ]
pr [ Welcome to the Power LOGO graphics demo! ]
say [ Welcome to the Power lo go graphics demo ]
pr [ ]
dowhile
[ about-windows
about-turtles
double-dragon
inc-spiral
nested-snowflake
multi-ferns
if namep "scram [ ] [ ( seedrand * 100 seconds ) make "scram 1 ] ]
[ requester [ Would you like to see the demo again? ] ]
if requester [ Do you want to quit LOGO? ] [ quit ] [ ] ]
; *********************************************************************
make "about-windows [
procedure [ [ ] [ ] [ :dw1 :dw2 :dt1 :dt2 ] ]
make "dw1 ( openwindow @0 0 [ Demo Window 1 ] 100 30 440 160 2 3 )
make "dt1 openturtle :dw1
setpen :dw1 1
move :dw1 25 30
text :dw1 [ With PowerLOGO you can open your own ]
move :dw1 25 40
text :dw1 [ custom graphics screens, windows, and turtles. ]
say [ With power lo go you can open your own
custom graphics screens, windows, and turtles. ]
make "dw2 ( openwindow @0 15 [ Demo Window 2 ] 400 130 240 70 2 1 )
make "dt2 ( openturtle :dw2 1 )
setpen :dw2 3
move :dw2 25 30
text :dw2 [ As many as you wish. ]
say [ As many as you, wish. ]
wait 0.5
clean
setfont :dw1 "diamond 20
move :dw1 25 50
setpen :dw1 3
text :dw1 [ Text may be in any font, ]
setstyle :dw1 7
move :dw1 25 75
text :dw1 [ any style, ]
setpen :dw1 1
text :dw1 [ or any color. ]
say [ Text may be in any font, any style, or any color. ]
wait 0.5
move :dw1 25 30
setstyle :dw1 4
setdrmode :dw1 1
( setpen :dw1 2 1 )
clean
text :dw1 [ You may use coordinate graphics: ]
say [ You may use co ordinate graphics: ]
move :dw1 25 55
text :dw1 [ draw, flood, copy, ... ]
say [ draw, flood, copy, \ ]
move :dw1 100 100
draw :dw1 200 130
draw :dw1 300 100
draw :dw1 400 140
draw :dw1 200 140
draw :dw1 20 120
draw :dw1 100 100
wait 0.2
setpen :dw2 1
move :dw2 100 30
draw :dw2 200 20
draw :dw2 200 60
draw :dw2 100 50
draw :dw2 100 30
wait 1
( setpen :dw1 1 2 )
setpen :dw1 3
floodol :dw1 100 110
wait 0.2
setpen :dw2 2
floodpc :dw2 150 40
wait 1
copyrect :dw2 90 15 :dw1 20 90 120 50
wait 0.2
copyrect :dw2 90 15 :dw1 150 70 120 50
wait 0.2
copyrect :dw2 90 15 :dw1 280 85 120 50
wait 1
move :dw1 25 30
clean
text :dw1 [ And of course turtle graphics. ]
say [ And of course turtle graphics. ]
( settpn 1 0 :dt1 )
( settpn 3 0 :dt2 )
rt 18 bk 12 cornerpoly 22 144 3 0.42
wait 1
( closewindow :dw1 :dw2 ) ]
make "cornerpoly [
procedure [ [ :size :angle :limit :factor ] [ ] [ :totalturn ] ]
if =0 :limit [ stop ] [ ]
make "totalturn 0
dowhile
[ fd :size
cornerpoly * :factor :size +- :angle - :limit 1 :factor
rt :angle
make "totalturn + :totalturn :angle ]
[ not =0 remainder :totalturn 360 ] ]
; *********************************************************************
make "about-turtles [
procedure [ [ ] [ ] [ :ds1 :dw1 :dt1 :dt2 :dt3 :dt4 :d :tl :ct ] ]
recycle
make "ds1 ( openscreen 3 2 [ ] )
set-abort :ds1
setrgb :ds1 0 [ 0 0 0 ]
setrgb :ds1 1 [ 15 0 0 ]
setrgb :ds1 2 [ 0 15 0 ]
setrgb :ds1 3 [ 13 13 13 ]
make "dw1 openwindow :ds1
( intuition 7 :ds1 0 )
make "dt1 ( openturtle :dw1 3.8 0.88 128 350 0 0 )
( settpn 1 0 :dt1 )
( wrap :dt1 )
make "dt2 ( openturtle :dw1 3.8 0.88 256 350 0 -1 )
( settpn 1 0 :dt2 )
( settpn 2 1 :dt2 )
( settdm 1 :dt2 )
( settlp "xxx-----xxx----- :dt2 )
make "dt3 ( openturtle :dw1 2 0.88 384 350 0 0 )
( settpn 2 0 :dt3 )
make "dt4 ( openturtle :dw1 5 0.88 512 350 0 0 )
( settpn 3 0 :dt4 )
( settlp "xxxxxxxx---xx--- :dt4 )
setfont :dw1 "diamond 20
setpen :dw1 2
move :dw1 50 27
text :dw1 [ Each turtle can have it's own pens, line pattern, ]
move :dw1 50 52
text :dw1 [ sense of distance, and sense of direction. ]
say [ Each turtle can have it's own penz, line pattern,
sense of distance, andsense ofdirection. ]
move :dw1 50 76
text :dw1 [ Turtles may be used all together, ]
say [ Turtles may be used all together, ]
rt 165
repeat 2 [
make "d 2
repeat 26 [
fd :d
rt 124.21
make "d + :d 1 ] ]
wait 0.2
move :dw1 50 100
text :dw1 [ one at a time, ]
say [ one at a time, ]
make "tl ( list :dt1 :dt2 :dt3 :dt4 )
repeat 4 [
make "ct first :tl
make "tl bf :tl
make "d 2
repeat 26 [
( fd :d :ct )
( rt 124.21 :ct )
make "d + :d 1 ]
wait 0.2 ]
text :dw1 [ or in any combination. ]
say [ or in any combination. ]
make "tl ( list :dt2 :dt4 )
make "d 2
repeat 26 [
( fd :d :tl )
( rt 124.21 :tl )
make "d + :d 1 ]
wait 0.2
make "tl ( list :dt1 :dt2 :dt3 )
make "d 2
repeat 26 [
( fd :d :tl )
( rt 124.21 :tl )
make "d + :d 1 ]
wait 0.2
make "tl ( list :dt1 :dt3 )
make "d 2
repeat 26 [
( fd :d :tl )
( rt 124.21 :tl )
make "d + :d 1 ]
wait 0.2
repeat 10 [
make "d 2
repeat 26 [
fd :d
rt 124.21
make "d + :d 1 ] ]
wait 1
clear-abort
closescreen :ds1 ]
; *********************************************************************
make "double-dragon [
procedure [ [ ] [ ] [ :ds1 :dw1 :dt1 :dt2 ] ]
recycle
make "ds1 ( openscreen 3 1 [ ] )
set-abort :ds1
setrgb :ds1 0 [ 0 0 0 ]
setrgb :ds1 1 [ 15 2 0 ]
make "dw1 openwindow :ds1
( intuition 7 :ds1 0 )
make "dt1 ( openturtle :dw1 3.8 0.88 150 288 0 0 )
( settpn 1 0 :dt1 )
make "dt2 ( openturtle :dw1 3.8 0.88 490 288 0 -1 )
( settpn 1 0 :dt2 )
s-dragon 70 2 35
wait 10
clear-abort
closescreen :ds1 ]
; s-dragon size limit angle
; Size limit dragon.
; s-dragon 50 5 45
make "s-dragon [
procedure [ [ :size :size-limit :angle1 ] [ ] [ :leg1 :leg2 :angle2 ] ]
make "angle2 - 90 :angle1
make "leg1 / * 0.5 sin - 180 * 2 :angle1 sin :angle1
make "leg2 / * 0.5 sin - 180 * 2 :angle2 sin :angle2
s-dragon1 :size 1 ]
make "s-dragon1 [
procedure [ [ :size :par ] ]
if > :size-limit :size [ fd :size stop ] [ ]
if >0 :par
[ rt :angle1
s-dragon1 * :size :leg1 1
lt 90
s-dragon1 * :size :leg2 -1
rt :angle2 ]
[ lt :angle2
s-dragon1 * :size :leg2 1
rt 90
s-dragon1 * :size :leg1 -1
lt :angle1 ] ]
; *********************************************************************
make "inc-spiral [
procedure [ [ ] [ ] [ :ds1 :dw1 :dt1 ] ]
recycle
make "ds1 ( openscreen 3 2 [ ] )
set-abort :ds1
setrgb :ds1 0 [ 0 0 0 ]
setrgb :ds1 1 [ 15 15 15 ]
setrgb :ds1 2 [ 0 0 4 ]
setrgb :ds1 3 [ 10 2 0 ]
make "dw1 openwindow :ds1
( intuition 7 :ds1 0 )
make "dt1 ( openturtle :dw1 )
( settpn 1 0 :dt1 )
pu
settpos [ 104.1 48.3 ]
seth 277.5
pd
( inspi 3.3 349 3.25 1338 )
setdrmode :dw1 1
setafpt :dw1 [ xxx----x----xxxx
xx-----x-----xxx
x-----xxx-----xx
-----xxxxx-----x
----xxxxxxx----x
x--xxxxxxxxx--xx
xxxxxxxxxxxxxxxx
x--xxxxxxxxx--xx
----xxxxxxx----x
-----xxxxx-----x
x-----xxx-----xx
xx-----x-----xxx
xxx----x----xxxx
xxxx--xxx--xxxxx
xxxxxxxxxxxxxxxx
xxxx--xxx--xxxxx ]
( setpen :dw1 3 0 )
( setpen :dw1 2 1 )
floodpc :dw1 0 0
setafpt :dw1 [ x-------x-------
x-------x-------
-x-------x------
-x-------x------
--x-------x-----
--x-------x-----
---x-------x----
---x-------x----
----x-------x---
----x-------x---
-----x-------x--
-----x-------x--
------x-------x-
------x-------x-
-------x-------x
-------x-------x ]
( setpen :dw1 3 0 )
( setpen :dw1 0 1 )
floodpc :dw1 630 390
wait 15
clear-abort
closescreen :ds1 ]
make "inspi [
procedure [ [ :side :angle :i-inc :steps ] ]
repeat :steps
[ fd :side
rt :angle
make "angle remainder + :angle :i-inc 360 ] ]
; *********************************************************************
make "nested-snowflake [
procedure [ [ ] [ ] [ :ds1 :dw1 :dt1 :d :c :i :s ] ]
recycle
make "ds1 ( openscreen 3 3 )
set-abort :ds1
setrgb :ds1 0 [ 0 0 0 ]
setrgb :ds1 1 [ 0 15 0 ]
setrgb :ds1 2 [ 14 2 0 ]
setrgb :ds1 3 [ 2 13 4 ]
setrgb :ds1 6 [ 8 8 8 ]
make "dw1 openwindow :ds1
( intuition 7 :ds1 0 )
make "dt1 openturtle :dw1
make "s 112
make "i 4
repeat 4 [
make "d :i
make "c 2
repeat + 1 :i [
( settpn :c 0 :dt1 )
setpen :dw1 :c
snowflake :s :d
floodpc :dw1 320 200
make "c + 1 :c
make "d - :d 1 ]
make "s / :s 2
make "i - :i 1 ]
wait 15
clear-abort
closescreen :ds1 ]
make "snowflake [
procedure [ [ :size :depth ] [ ] [ :d ] ]
make "d * 0.577350269189626 :size
pu
bk :d
lt 30
pd
flake :size :depth
rt 120
flake :size :depth
rt 120
flake :size :depth
rt 150
pu
fd :d ]
make "flake [
procedure [ [ :size :depth ] ]
if =0 :depth [ fd :size stop ] [ ]
make "size / :size 3
make "depth - :depth 1
flake :size :depth
lt 60
flake :size :depth
rt 120
flake :size :depth
lt 60
flake :size :depth ]
; *********************************************************************
make "multi-ferns [
procedure [ [ ] [ ] [ :ds1 :dw1 :dt1 :p :c :i :t ] ]
recycle
make "ds1 ( openscreen 3 3 )
set-abort :ds1
setrgb :ds1 0 [ 0 0 0 ]
make "dw1 ( openwindow :ds1 224 )
( intuition 7 :ds1 0 )
make "c [ [ 9 12 1 ]
[ 15 13 0 ]
[ 9 8 0 ]
[ 3 9 1 ]
[ 0 10 1 ]
[ 0 12 0 ]
[ 1 14 0 ] ]
make "p [ "-xxxx-----xxxx--
"--xx-xxx-xx-----
"x-----x------xxx
"x-xxx--xx---xxx-
"--xxxxx--xxxxx--
"xx-----xxx-xxxxx ]
make "i 1
repeat 7 [
make "dt1 ( openturtle :dw1
+ 1.4 * 3.5 rand
0.88
320
395
0
+- random 2 )
( settpn :i 0 :dt1 )
( settpn + 1 random 7 1 :dt1 )
( rt - random 120 60 :dt1 )
setrgb :ds1 :i item :i :c
( settlp item + 1 random 6 :p :dt1 )
make "i + 1 :i ]
settdm 1
fern2 80 2.8 4 0.35 0.3 60
clear-abort
setpen :dw1 2
move :dw1 164 10
text :dw1 [ End of demo. Press any key to continue. ]
say [ End of demo. Press any key to continue. ]
sleep
closescreen :ds1 ]
; fern2 size size-limit curl thickness node-spacing branch-angle
; A more versatile fern leaf.
; fern2 90 3 2 0.2 0.1 60
; fern2 90 3 2 0.3 0.18 60
; fern2 90 2 4 0.35 0.3 60
make "fern2 [
procedure [ [ :size :limit :curl :thick :nspace :angle ] [ ]
[ :d1 :d2 :a1 ] ]
make "d1 * :size :nspace
make "d2 * - 1 :nspace :size
fd :d1
if > :limit :size
[ make "a1 atan / :thick - 1 :nspace
fd :d2
rt :a1
bk :d2
fd :d2
lt + :a1 :a1
bk :d2
fd :d2
rt :a1
bk :d2 ]
[ rt :curl
fern2 :d2 :limit :curl :thick :nspace :angle
rt - :angle :curl
fern2 * :thick :size :limit :curl :thick :nspace :angle
lt + :angle :angle
fern2 * :thick :size :limit :curl :thick :nspace :angle
rt :angle ]
bk :d1 ]
; *********************************************************************
make "requester [
procedure [ [ :t ] [ ] [ :rw :m ] ]
make "rw ( openwindow @0 131 [ LOGO Request ] 0 0 400 64 )
setpen :rw 1
rectfill :rw 2 10 397 62
rectfill :rw 4 12 395 60
setpen :rw 0
( setpen :rw 1 1 )
move :rw 25 27
text :rw :t
move :rw 38 48
text :rw [ YES ]
move :rw 341 48
text :rw [ NO ]
move :rw 20 37
draw :rw 80 37
draw :rw 80 54
draw :rw 20 54
draw :rw 20 37
move :rw 319 37
draw :rw 379 37
draw :rw 379 54
draw :rw 319 54
draw :rw 319 37
setpen :rw 3
move :rw 19 36
draw :rw 81 36
draw :rw 81 55
draw :rw 19 55
draw :rw 19 36
move :rw 318 36
draw :rw 380 36
draw :rw 380 55
draw :rw 318 55
draw :rw 318 36
( intuition 6 @0 )
while [ true ]
[ make "m getmouse
if = :rw first :m
[ make "mx item 2 :m
make "my item 3 :m
if and >= :my 36
<= :my 55
[ if and >= :mx 19
<= :mx 81
[ closewindow :rw
op true ] [ ]
if and >= :mx 318
<= :mx 380
[ closewindow :rw
op false ] [ ] ] [ ] ] [ ] ] ]
; *********************************************************************
make "set-abort [
procedure [ [ :screen ] ]
make "abort-screen :screen
make "abort-window ( openwindow :screen 0 [ ] 540 380 100 20 0 1 )
setpen :abort-window 1
move :abort-window 14 12
text :abort-window [ Quit Demo ]
while [ mousep ] [ ignore getmouse ]
whenmouse [ abort-demon ] ]
make "clear-abort [
procedure [ ]
closewindow :abort-window
whenmouse [ ] ]
make "abort-demon [
procedure [ [ ] [ ] [ :m :comp ] ]
make "m getmouse
if = :abort-window first :m
[ comp-abort
make "comp true
while [ true ]
[ make "m mouse :abort-window
if =0 last :m
[ if or <0 first :m <0 item 2 :m
[ if :comp [ comp-abort ] [ ]
stop ]
[ clear-abort
if requester [ Do you want to quit LOGO? ] [ quit ] [ ]
while [ not emptyp screenlist ]
[ closescreen first screenlist ]
toplevel ]
]
[ if or <0 first :m <0 item 2 :m
[ if :comp
[ comp-abort
make "comp false ] [ ] ]
[ if :comp
[ ]
[ comp-abort
make "comp true ] ]
]
]
] [ ]
]
make "comp-abort [
procedure [ ]
( copyrect :abort-window 0 0 :abort-window 0 0 100 20 80 ) ]
; *********************************************************************
launch [ demo ]