1. Enclosure file: EINAR.EX
- Posted by "BABOR, JIRI" <J.Babor at GNS.CRI.NZ> Aug 25, 1998
- 409 views
-- einar.ex: collision detection along a straight line -- jbabor at paradise.net.nz -- 98-08-25 include graphics.e include image.e include get.e object junk sequence LEVEL function nowall(integer x,integer y,integer x2,integer y2) integer d,dx,dy,ai,bi,xi,yi,temp x=floor(x/20) x2=floor(x2/20) y=floor(y/20) y2=floor(y2/20) if y=y2 then -- horizontal line if x>x2 then temp=x x=x2 x2=temp end if for i=x to x2 do if LEVEL[y+1][i+1] then return 0 end if end for else if x<x2 then xi=1 dx=x2-x else xi=-1 dx=x-x2 end if if y<y2 then yi=1 dy=y2-y else yi=-1 dy=y-y2 end if if LEVEL[y+1][x+1] then return 0 end if if dx>dy then ai=2*(dy-dx) bi=2*dy d=bi-dx while x!=x2 do if d>=0 then y=y+yi d=d+ai else d=d+bi end if x=x+xi if LEVEL[y+1][x+1] then return 0 end if end while else ai=2*(dx-dy) bi=2*dx d=bi-dy while y!=y2 do if d>=0 then x=x+xi d=d+ai else d=d+bi end if y=y+yi if LEVEL[y+1][x+1] then return 0 end if end while end if end if return 1 end function -- test ------------------------------------------------------------------------ LEVEL=repeat(repeat(0,16),10) -- 1:20 scale model of screen for i=1 to 16 do LEVEL[6][i]=1 end for for i=1 to 10 do LEVEL[i][9]=1 end for junk=graphics_mode(19) polygon(8,1,{{0,0},{319,0},{319,199},{0,199}}) display_image({0,0},LEVEL) position(3,1) draw_line(12,{{50,50},{100,130}}) text_color(12) ? nowall(50,50,100,130) draw_line(13,{{50,150},{159,130}}) text_color(13) ? nowall(50,150,159,130) draw_line(14,{{60,50},{200,50}}) text_color(14) ? nowall(60,50,200,50) draw_line(15,{{190,190},{300,140}}) text_color(15) ? nowall(190,190,300,140) junk=wait_key() junk=graphics_mode(-1)