A program to run Turtle Graphics program. The Render engine can draw the program with various rotations and positions and sizes in screen. Video was from the Greek version.
This program was written with Greek commands here:
https://georgekarras.blogspot.com/2025/03/36-13.html
ΤΜΗΜΑ TURTLE_GRAPHICS {
FLUSH
IF NOT VALID(USE_STEPS) THEN USE_STEPS=FALSE
IF NOT VALID(CLEAN) THEN CLEAN=TRUE
IF NOT VALID(DELAY) THEN DELAY=100
IF NOT VALID(NORTH) THEN NORTH=90
IF NOT VALID(ZOOM) THEN ZOOM=1
IF NOT VALID(XPOS) THEN XPOS=0
IF NOT VALID(YPOS) THEN YPOS=0
CONST PI AS SINGLE=3.1415926
BOOLEAN pen_draw=TRUE
SINGLE pen_angle=(NORTH-90)*PI/180
INTEGER line_width=1
ENUM PEN.COLOR {
BLACK=#000000
RED=#FF0000
GREEN=#00FF00
BLUE=#0000FF
}
FUNCTION PIC(CO){
DRAWING 3000, 3000 {
MOVE 0,0
WIDTH 4{
DRAW TO 3000, 1500, CO
DRAW TO 0, 3000, CO
DRAW TO 1000, 1500, CO
DRAW TO 0,0, CO
}
} AS ARROW
=ARROW
}
SMOOTH ON
ARROW=PIC(0)
IF CLEAN THEN CLS,0
HOLD
IF MODULE(DRAWTHIS) THEN CALL LOCAL DRAWTHIS
RELEASE
REFRESH 25
PEN 0
END
SUB DRAW.LETTER(G$, WHERE, CO=0&, SIZE=100, rotation=0)
SET_BACK()
WHERE-=NORTH+rotation
STEP ANGLE -WHERE/180*PI, 300*SIZE/100*ZOOM
PEN CO {LEGEND G$,FONTNAME$,MODE*SIZE/100*ZOOM, (NORTH-90+rotation)*PI/180, 2}
STEP ANGLE -WHERE/180*PI, -300*SIZE/100*ZOOM
PUT_ARROW()
END SUB
SUB PEN.BLACK()
PEN #000000
ARROW=PIC(PEN)
END SUB
SUB PEN.RED()
PEN #FF0000
ARROW=PIC(PEN)
END SUB
SUB PEN.GREEN()
PEN #00FF00
ARROW=PIC(PEN)
END SUB
SUB PEN.BLUE()
PEN #0000FF
ARROW=PIC(PEN)
END SUB
SUB CENTER.SCREEN()
SET_BACK()
MOVE (SCALE.X DIV 2)+XPOS, (SCALE.Y DIV 2)+YPOS
PUT_ARROW()
END SUB
SUB MOVE.ARROW(Χ, Υ)
SET_BACK()
MOVE Χ+XPOS, Υ+YPOS
PUT_ARROW()
END SUB
SUB LINE.WIDTH(that AS INTEGER)
IF that<1 THEN that=1
IF that>15 ΤΌΤΕ that=15
line_width=that
END SUB
SUB PEN.UP()
pen_draw=FALSE
END SUB
SUB PEN.DOWN()
pen_draw=TRUE
END SUB
SUB DRAW.CIRCLE(radius)
SET_BACK()
IF pen_draw THEN
WIDTH line_width {
CIRCLE radius
}
END IF
PUT_ARROW()
END SUB
SUB DRAW.ARC(radius, st=0, en=360, rotation=0)
SET_BACK()`
IF pen_draw THEN
WIDTH line_width {
CIRCLE radius,1,PEN,(NORTH-st+rotation)/180*PI, (NORTH-en+rotation)/180*PI;
}
END IF
PUT_ARROW()
END SUB
SUB GO.FORWARD(distance)
distance*=ZOOM
SET_BACK()
IF pen_draw THEN
WIDTH line_width {
IF USE_STEPS THEN
LOCAL STP=ABS(distance) DIV 300
IF STP>0 THEN
LOCAL STP1=300*SGN(distance)
STEP ANGLE pen_angle, distance
LOCAL i AS INTEGER, XP=POS.X, YP=POS.Y
STEP ANGLE pen_angle, -distance
FOR i=1 TO STP
DRAW ANGLE pen_angle, STP1
PUT_ARROW()
SET_BACK()
NEXT i
DRAW TO XP, YP
ELSE
DRAW ANGLE pen_angle, distance
END IF
ELSE
DRAW ANGLE pen_angle, distance
END IF
}
ELSE
IF USE_STEPS THEN
LOCAL STP=ABS(distance) DIV 300
IF STP>0 THEN
LOCAL STP1=300*SGN(distance)
STEP ANGLE pen_angle, distance
LOCAL i AS INTEGER, XP=POS.X, YP=POS.Y
STEP ANGLE pen_angle, -distance
FOR i=1 TO STP
STEP ANGLE pen_angle, STP1
PUT_ARROW()
SET_BACK()
NEXT i
MOVE XP, YP
ELSE
STEP ANGLE pen_angle, distance
END IF
ELSE
STEP ANGLE pen_angle, distance
END IF
END IF
PUT_ARROW()
END SUB
SUB DRAW.REAR(distance)
GO.FORWARD(-distance)
END SUB
SUB TURN.RIGHT(angle_in_degrees)
SET_BACK()
pen_angle-=angle_in_degrees/180*PI
PUT_ARROW()
END SUB
SUB TURN.TO(angle_in_degrees)
SET_BACK()
pen_angle=(angle_in_degrees+NORTH-90)/180*PI
PUT_ARROW()
END SUB
SUB SET_BACK()
RELEASE
END SUB
SUB PUT_ARROW()
HOLD
IMAGE ARROW, 600,,pen_angle*180/PI
REFRESH 1000
WAIT DELAY
END SUB
}
ΤΜΗΜΑ PRG1 {
CENTER.SCREEN()
LINE.WIDTH(4)
PEN.RED()
ZZ=13
TURN.RIGHT(ZZ)
DRAW.LETTER("Α", 225,,,-ZZ)
GO.FORWARD(4000)
DRAW.LETTER("90° ", -20, BLUE,200, -ZZ)
PEN.BLACK()
DRAW.ARC(300, -5, 275, -ZZ)
PEN.RED()
DRAW.LETTER("Β", 135,,,-ZZ)
TURN.RIGHT(270)
GO.FORWARD(3000)
DRAW.LETTER("Γ",45,,,-ZZ)
TURN.RIGHT(270-ATN(3000/4000))
GO.FORWARD(5000)
TURN.TO(180)
PEN.UP()
GO.FORWARD(6000)
PEN.DOWN()
PEN.GREEN()
HOUSE(5000)
SUB HOUSE(n)
LOCAL i
FOR i=1 TO 3
TURN.RIGHT(120)
GO.FORWARD(n)
NEXT
TURN.RIGHT(90)
PARALLELOGRAM(n, n)
TURN.RIGHT(90)
END SUB
SUB PARALLELOGRAM(w, h)
LOCAL i
FOR i=1 TO 2
TURN.RIGHT(90)
GO.FORWARD(h)
TURN.RIGHT(90)
GO.FORWARD(w)
NEXT
END SUB
}
BACKGROUND {CLS 15, 0}
CLS 15,0
PEN 0
A$=KEY$
TURTLE_GRAPHICS %USE_STEPS=TRUE, %DELAY=30, %XPOS=-SCALE.X / 2.8, %NORTH=190, %ZOOM=0.9; DRAWTHIS AS PRG1
TURTLE_GRAPHICS %USE_STEPS=TRUE, %DELAY=30, %CLEAN=FALSE, %XPOS=SCALE.X / 2.8, %NORTH=10, %ZOOM=0.9; DRAWTHIS AS PRG1
TURTLE_GRAPHICS %USE_STEPS=TRUE, %DELAY=30, %CLEAN=FALSE, %YPOS=-SCALE.Y / 3.8, %NORTH=100, %ZOOM=0.7; DRAWTHIS AS PRG1
TURTLE_GRAPHICS %USE_STEPS=TRUE, %DELAY=30, %CLEAN=FALSE, %YPOS=SCALE.Y / 3.8, %NORTH=280, %ZOOM=0.7; DRAWTHIS AS PRG1
CURSOR 0,0
PRINT "TURTLE GRAPHICS 1.0"
A$=KEY$
Δεν υπάρχουν σχόλια:
Δημοσίευση σχολίου
You can feel free to write any suggestion, or idea on the subject.