prog8/examples/c64/turtle-gfx.p8

116 lines
3.1 KiB
Plaintext
Raw Normal View History

%import floats
%import graphics
%zeropage floatsafe
2020-03-28 13:17:35 +00:00
2020-03-28 13:17:35 +00:00
main {
sub start() {
graphics.enable_bitmap_mode()
turtle.init()
turtle.pu()
turtle.pos(150, 110)
turtle.pd()
2020-03-28 13:17:35 +00:00
2020-07-25 20:54:50 +00:00
ubyte i
2020-03-28 13:17:35 +00:00
for i in 0 to 100 {
turtle.fd(i+20)
turtle.rt(94)
}
repeat {
2020-03-28 13:17:35 +00:00
}
}
}
turtle {
float xpos
float ypos
float angle
bool pendown
2020-03-28 13:17:35 +00:00
sub init() {
xpos = 160.0
ypos = 100.0
angle = 0.0
pendown = true
const uword SPRITE_MEMORY = $5800
const uword SPRITE_ADDR_POINTERS = (graphics.CHARS_ADDRESS & $fc00) + 1016 ; no longer the default location 2040!
sys.memcopy(&turtlesprite, SPRITE_MEMORY, len(turtlesprite))
@(SPRITE_ADDR_POINTERS) = (SPRITE_MEMORY & $3fff) / 64
2020-03-28 13:17:35 +00:00
c64.SPENA = 1
c64.SP0COL = 5
update_turtle_sprite()
2020-03-28 13:17:35 +00:00
}
sub update_turtle_sprite() {
2020-03-28 13:17:35 +00:00
uword xx = xpos as uword
c64.SPXY[0] = lsb(xx) + 12
c64.MSIGX = msb(xx) > 0
c64.SPXY[1] = ypos as ubyte + 40
2020-03-28 13:17:35 +00:00
}
sub pos(float x, float y) {
if pendown {
graphics.line(xpos as uword, ypos as ubyte, x as uword, y as ubyte)
}
xpos = x
ypos = y
update_turtle_sprite()
}
2020-03-28 13:17:35 +00:00
sub fd(uword length) {
float flen = length as float
float sx = xpos
float sy = ypos
xpos += flen * floats.sin(angle)
ypos -= flen * floats.cos(angle)
update_turtle_sprite()
2020-03-28 13:17:35 +00:00
if pendown {
2020-08-21 16:02:01 +00:00
graphics.line(sx as uword, sy as ubyte, xpos as uword, ypos as ubyte)
2020-03-28 13:17:35 +00:00
}
}
sub rt(uword degrees) {
angle += floats.rad(degrees as float)
2020-03-28 13:17:35 +00:00
}
sub lt(uword degrees) {
angle -= floats.rad(degrees as float)
2020-03-28 13:17:35 +00:00
}
sub pu() {
pendown = false
}
sub pd() {
pendown = true
}
ubyte[] turtlesprite = [ %00000000,%00000000,%00000000,
%00000000,%00000000,%00000000,
%00000000,%00000000,%00000000,
%00000000,%00000000,%00000000,
%00000000,%00000000,%00000000,
%00000000,%00000000,%00000000,
%00000000,%00000000,%00000000,
%00000000,%00000000,%00000000,
%00000000,%01111110,%00000000,
%00000000,%11000011,%00000000,
%00000000,%11000011,%00000000,
%00000000,%11000011,%00000000,
%00000000,%01111110,%00000000,
%00000000,%00000000,%00000000,
%00000000,%00000000,%00000000,
%00000000,%00000000,%00000000,
%00000000,%00000000,%00000000,
%00000000,%00000000,%00000000,
%00000000,%00000000,%00000000,
%00000000,%00000000,%00000000,
%00000000,%00000000,%00000000 ]
2020-03-28 13:17:35 +00:00
}