RetroBASIC
Basicprogramming(.org) => Code and examples => Topic started by: B+ on July 14, 2016, 01:45:59 AM
-
'recurring ellipsii.sdlbas [B+=MGA] 2016-07-13
'extending Administrator's code example at SdlBasic forum
sw = 800 : sh = 600
setdisplay(sw, sh, 32, 1)
setcaption("Recurring Ellipsii")
autoback(-2)
sub drawEllipsii(x, y, w, h, oset)
ellipse(x, y, w, h)
if(h > 15) then
ink(0x800000)
drawEllipsii(x + w/2*oset, y, w/2*oset, h/2*oset, oset)
ink(0x0000ff)
drawEllipsii(x - w/2*oset, y, w/2*oset, h/2*oset, oset)
ink(0x008000)
drawEllipsii(x, y + h/2*oset, w/2*oset, h/2*oset, oset)
ink(0xffff00)
drawEllipsii(x, y - h/2*oset, w/2*oset, h/2*oset, oset)
end if
end sub
oset = 0 : dr = 1
while 1
cls
ink(0xffffff)
drawEllipsii(sw/2, sh/2, sw/2, sh/2, oset)
screenswap
wait(60)
oset += .01 * dr
if oset >= 1.01 then
dr = dr * -1
elseif oset <= 0 then
dr = dr * -1
end if
wend
-
Same principle with rectangles in SmallBASIC:
'rect gasket yo-yo.bas for SmallBASIC 0.12.6 [B+=MGA] 2016-07-13
sub drawrect(x, y, w, h, oset)
rect x,y step w, h
if h > 10 then
color 12
drawrect x - oset * w, y - oset * h, 2 * oset * w, 2 * oset * h, oset
color rgb(0,128,0)
drawrect x + w - oset * w, y - oset * h, 2 * oset * w, 2 * oset * h, oset
color 9
drawrect x - oset * w, y + h - oset * h, 2 * oset * w, 2 * oset * h, oset
color 14
drawrect x + w - oset * w, y + h - oset * h, 2 * oset * w, 2 * oset * h, oset
fi
end
oset = 0 : dir = 1
while 1
cls
color 15
drawrect .25 * xmax, .25 * ymax, .5 * xmax, .5 * ymax, oset
showpage
delay 60
oset +=.01 * dir
if oset = .25 then dir = dir * -1
if oset = 0 then dir = dir * -1
wend
-
'recurring ellipsii.sdlbas [B+=MGA] 2016-07-13
'extending Administrator's code example at SdlBasic forum
'Ported to BaCon by PvE / 2016-07-15
INCLUDE canvas-gd.bac
OPTION VARTYPE double
sw = 600 : sh = 450
WINDOW("Recurring Ellipsii", sw, sh)
SUB drawEllipsii(x, y, w, h, oset)
CIRCLE(x, y, w, h, 0)
IF h > 15 THEN
INK(0x80, 0x00, 0x00, 0xff)
drawEllipsii(x + w/2*oset, y, w/2*oset, h/2*oset, oset)
INK(0x00, 0x00, 0xff, 0xff)
drawEllipsii(x - w/2*oset, y, w/2*oset, h/2*oset, oset)
INK(0x00, 0x80, 0x00, 0xff)
drawEllipsii(x, y + h/2*oset, w/2*oset, h/2*oset, oset)
INK(0xff, 0xff, 0x00, 0xff)
drawEllipsii(x, y - h/2*oset, w/2*oset, h/2*oset, oset)
ENDIF
ENDSUB
oset = 0 : dr = 1
SUB Draw
INK(0x0, 0x0, 0x0, 0xff)
CLS
INK(0xff, 0xff, 0xff, 0xff)
drawEllipsii(sw/2, sh/2, sw/2, sh/2, oset)
INCR oset, .01 * dr
IF oset >= 1.01 THEN
dr = dr * -1
ELIF oset <= 0 THEN
dr = dr * -1
ENDIF
END SUB
CALLBACK(60, Draw)
FRAMES(200)
WAITKEY
(http://www.basic-converter.org/canvas/ellipsii.gif)
-
:) hey Peter! that's better than a snapshot!
-
Thanks! I have updated the GD canvas (http://www.basic-converter.org/canvas-gd.bac.html) a little bit, now the program is almost similar to the original.
Regards
Peter
'recurring ellipsii.sdlbas [B+=MGA] 2016-07-13
'extending Administrator's code example at SdlBasic forum
'Ported to BaCon by PvE / 2016-07-15 - version 2
INCLUDE canvas-gd.bac
OPTION VARTYPE double
sw = 600 : sh = 450
WINDOW("Recurring Ellipsii", sw, sh)
FRAMES(200) : ' How many frames in this GIF
DELAY(60) : ' Delay in msecs between the frames
SUB drawEllipsii(x, y, w, h, oset)
CIRCLE(x, y, w, h, 0)
IF h > 15 THEN
INK(0x80, 0x00, 0x00, 0xff)
drawEllipsii(x + w/2*oset, y, w/2*oset, h/2*oset, oset)
INK(0x00, 0x00, 0xff, 0xff)
drawEllipsii(x - w/2*oset, y, w/2*oset, h/2*oset, oset)
INK(0x00, 0x80, 0x00, 0xff)
drawEllipsii(x, y + h/2*oset, w/2*oset, h/2*oset, oset)
INK(0xff, 0xff, 0x00, 0xff)
drawEllipsii(x, y - h/2*oset, w/2*oset, h/2*oset, oset)
ENDIF
ENDSUB
oset = 0 : dr = 1
WHILE TRUE
INK(0x0, 0x0, 0x0, 0xff)
CLS
INK(0xff, 0xff, 0xff, 0xff)
drawEllipsii(sw/2, sh/2, sw/2, sh/2, oset)
IF NOT(SYNC()) THEN QUIT
INCR oset, .01 * dr
IF oset >= 1.01 THEN
dr = dr * -1
ELIF oset <= 0 THEN
dr = dr * -1
ENDIF
WEND