|
Post by bluatigro on Apr 22, 2018 13:57:42 GMT
this NOT the same as on the LB forum
now you can create 3D isometric games in JB it has 1 disadvantage : al sprites must be in the same arrayname
error : if i deREM the ghostcode it crahes if i deREM the remove pil code it removes al pil and super i did not test jet the hit ghostcode
''bluatigro 22 apr 2018 ''pac man whit 3d world JB VESION
WindowWidth = DisplayWidth WindowHeight = DisplayHeight global winx , winy , pi , s.max , s.tel , key$ global p.x , p.y , p.z dim g.x( 4 ) , g.y( 4 ) , g.z( 4 ) p.x = 6 p.y = 0 p.z = 6 for i = 0 to 4 g.x( i ) = 2 g.y( i ) = 0 g.z( i ) = 2 next i winx = WindowWidth winy = WindowHeight pi = atn( 1 ) * 4 s.max = 600 dim s.x( s.max ) , s.y( s.max ) , s.z( s.max ) dim s.name$( s.max ) , ry( s.max ) dim maze$( 20 , 20 ) , s.state$( s.max ) nomainwin gosub [sprite] open "isometric game demo" for graphics as #m #m "trapclose [quit]" call sprite.clear 60 , 60 call sprite.getbmp "empty" call sprite.clear 60 , 60 call sprite.pie 30 , 30 , 25 , 25 , 45 , 315 _ , "black" , "yellow" , 1 call sprite.ellipse 30 , 20 , 10 , 10 _ , "black" , "white" , 1 call sprite.ellipse 30 , 20 , 5 , 5 _ , "black" , "black" , 1 call sprite.getbmp "player" call sprite.clear 60 , 60 call sprite.ellipse 30 , 30 , 25 , 25 _ , "black" , "Red" , 1 call sprite.ellipse 25 , 30 , 10 , 10 _ , "black" , "white" , 1 call sprite.ellipse 25 , 30 , 7 , 7 _ , "black" , "black" , 1 call sprite.ellipse 35 , 30 , 10 , 10 _ , "black" , "white" , 1 call sprite.ellipse 35 , 30 , 7 , 7 _ , "black" , "black" , 1 call sprite.getbmp "hunt" call sprite.clear 60 , 60 call sprite.rectangle 10 , 10 , 50 , 20 _ , "255 127 0" call sprite.rectangle 10 , 20 , 50 , 50 _ , "127 63 0" call sprite.getbmp "wall" call sprite.clear 60 , 60 call sprite.ellipse 30 , 30 , 10 , 10 _ , "blue" , "blue" , 5 call sprite.getbmp "pil" call sprite.clear 60 , 60 call sprite.ellipse 30 , 30 , 15 , 15 _ , "cyan" , "cyan" , 5 #m "getbmp super 0 0 60 120" for i = 0 to s.max ry( i ) = i s.state$( i ) = "on" next i s.tel = 0 call add.atom 0 , 0 , 28 , "player" for i = 0 to 4 call add.atom -60*4 , 0 , 29-60*4 , "hunt" s.state$( i + 1 ) = "hunt" next i j = 0 while maze$ <> "end" j = j + 1 read maze$ l = len( maze$ ) for i = 1 to l maze$( i , j ) = mid$( maze$ , i , 1 ) select case mid$( maze$ , i , 1 ) case "m" call add.atom _ ( i - .5 - l / 2 ) * 60 _ , 0 , ( j - 5.5 ) * 60 , "wall" case "." call add.atom _ ( i - .5 - l / 2 ) * 60 _ , 0 , ( j - 5.5 ) * 60 , "pil empty" case "@" call add.atom _ ( i - .5 - l / 2 ) * 60 _ , 0 , ( j - 5.5 ) * 60 , "super empty" case else end select next i wend data "mmmmmmmmmmm" data "m@.......@m" data "m.mmmmmmm.m" data "m.m.....m.m" data "m.m.mmm.m.m" data "m.........m" data "m.m.mmm.m.m" data "m.m.....m.m" data "m.mmmmmmm.m" data "m@.......@m" data "mmmmmmmmmmm" data "end"
#m "when characterInput [key]" #m "setfocus"
timer 250 , [timer] wait [timer] scan select case key$ case chr$( _VK_UP ) if maze$( p.x , p.z + 1 ) <> "m" then s.z( 0 ) = s.z( 0 ) + 60 p.z = p.z + 1 end if case chr$( _VK_DOWN ) if maze$( p.x , p.z - 1 ) <> "m" then s.z( 0 ) = s.z( 0 ) - 60 p.z = p.z - 1 end if case chr$( _VK_LEFT ) if maze$( p.x - 1 , p.z ) <> "m" then s.x( 0 ) = s.x( 0 ) - 60 p.x = p.x - 1 end if case chr$( _VK_RIGHT ) if maze$( p.x + 1 , p.z ) <> "m" then s.x( 0 ) = s.x( 0 ) + 60 p.x = p.x + 1 end if case else end select '' for i = 0 to 4 '' dx = rand.int( 2 ) - 1 '' dz = rand.int( 2 ) - 1 '' while maze$( g.x( i ) + dx _ '' , g.z( i ) + dz ) = "#" '' dx = rand.int( 2 ) - 1 '' dz = rand.int( 2 ) - 1 '' wend '' g.x( i ) = g.x( i ) + dx '' g.z( i ) = g.z( i ) + dz '' s.x( i + 1 ) = s.x( i + 1 ) + dx * 60 '' s.z( i + 1 ) = s.z( i + 1 ) + dz * 60 '' next i key$ = "" #m "spritecollides spr0 list$" i = 1 while word$( list$ , i ) <> "" q$ = word$( list$ , i ) q = val( right$( q$ , len( q$ ) - 3 ) ) if ( s.name$( q ) = "pil" _ or s.name$( q ) = "super" ) _ and s.state$( q ) = "on" then '' #m "spriteimage spr" ; q ; " empty" '' s.state$( q ) = "off" end if if s.name$( q ) = "hunt" _ and s.state$( q ) = "hunt" then '' timer 0 '' notice "GAME OVER" end if i = i + 1 wend ''sort atom's for high = 1 to s.tel - 1 for low = 0 to high - 1 if s.z( ry( high ) ) < s.z( ry( low ) ) then help = ry( high ) ry( high ) = ry( low ) ry( low ) = help end if next low next high ''draw world for i = 0 to s.tel - 1 #m "spritetoback spr" ; ry( i ) #m "spritexy spr" ; ry( i ) ; " " _ ; winx / 2 + s.x( ry( i ) ) ; " " _ ; winy / 2 - s.y( ry( i ) ) _ - s.z( ry( i ) ) / 2 next i #m "drawsprites" wait [key] key$ = right$( Inkey$ , 1 ) if key$ <> chr$( _VK_ESCAPE ) then wait [quit] close #m end ''bluatigro 21 apr 2017 ''sprite module [sprite] global sprite.width , sprite.height return sub sprite.clear w , h #m "fill white" #m "goto 0 " ; h #m "size 1" #m "down" #m "color black" #m "backcolor black" #m "boxfilled " ; w ; " " ; h * 2 #m "up" sprite.width = w sprite.height = h end sub sub sprite.rectangle x1,y1,x2,y2,clr$ #m "goto " ; x1 ; " " ; y1 #m "size 1" #m "color black" #m "backcolor black" #m "down" #m "boxfilled " ; x2 ; " " ; y2 #m "up" #m "goto " ; x1 ; " " ; y1 + sprite.height #m "color " ; clr$ #m "backcolor " ; clr$ #m "down" #m "boxfilled " ; x2 ; " " ; y2 + 60 #m "up" end sub sub sprite.ellipse x,y,dx,dy,clr$,bclr$,size #m "goto " ; x ; " " ; y #m "size " ; size #m "down" #m "color black" #m "backcolor black" #m "ellipsefilled " ; dx ; " " ; dy #m "up" #m "goto " ; x ; " " ; y + sprite.height #m "down" #m "color " ; clr$ #m "backcolor " ; bclr$ #m "ellipsefilled " ; dx ; " " ; dy #m "up" end sub sub sprite.pie x,y,dx,dy,a,b,clr$,bclr$,size #m "goto " ; x ; " " ; y #m "size " ; size #m "down" #m "color black" #m "backcolor black" #m "piefilled " ; dx ; " " ; dy _ ; " " ; a ; " " ; b #m "up" #m "goto " ; x ; " " ; y + sprite.height #m "down" #m "color " ; clr$ #m "backcolor " ; bclr$ #m "piefilled " ; dx ; " " ; dy _ ; " " ; a ; " " ; b #m "up" end sub sub sprite.line x1,y1 , x2,y2 , clr$ , size #m "color black" #m "size " ; size #m "down" #m "line " ; x1 ; " " ; y1 _ ; " " ; x2 ; " " ; y2 #m "up" #m "color " ; clr$ #m "down" #m "line " ; x1 ; " " ; y1 + sprite.height _ ; " " ; x2 ; " " ; y2 + sprite.height #m "up" end sub sub sprite.getbmp bmp$ #m "getbmp " ; bmp$ ; " 0 0 " _ ; sprite.width ; " " ; sprite.height * 2 end sub ''end sprite_draw module function rand.int( h ) dice = int( rnd(0) * ( h + 1 ) ) end function sub add.atom x , y , z , i$ #m "addsprite spr" ; s.tel ; " " ; i$ s.x( s.tel ) = x s.y( s.tel ) = y s.z( s.tel ) = z s.name$( s.tel ) = word$( i$ , 1 ) s.tel = s.tel + 1 end sub function rad( deg ) rad = deg * pi / 180 end function function rgb$( r , g , b ) r = int( r ) and 255 g = int( g ) and 255 b = int( b ) and 255 rgb$ = str$( r ) ; " " ; g ; " " ; b end function function rainbow$( deg ) r = sin( rad( deg ) ) * 127 + 128 g = sin( rad( deg - 120 ) ) * 127 + 128 b = sin( rad( deg + 120 ) ) * 127 + 128 rainbow$ = rgb$( r , g , b ) end function
|
|
|
Post by tsh73 on Apr 22, 2018 20:41:30 GMT
I found error in random generator - it does not set return value. Error I get is "out of bounds", have to check...
|
|
|
Post by tsh73 on Apr 23, 2018 7:08:04 GMT
Ok I found another error - it checks for wall as "#" but in code it is "m"
Out of bounds fixed with that, ghost runs OK
But now something is wrong with collision - sprites too big?
Here's version with mainwin ON that shows collision list
- from the start player collides with cells around him! That could not be good.
(And I turned running hunters off with
for i = 0 to -1'4 - set it back to 4 to run. (that will make 5 hunters, 0..4 - actual Pacman had only 4!) )
'bluatigro 22 apr 2018 ''pac man whit 3d world JB VESION
WindowWidth = 800'DisplayWidth WindowHeight = 600'DisplayHeight global winx , winy , pi , s.max , s.tel , key$ global p.x , p.y , p.z dim g.x( 4 ) , g.y( 4 ) , g.z( 4 ) p.x = 6 p.y = 0 p.z = 6 for i = 0 to 4 g.x( i ) = 2 g.y( i ) = 0 g.z( i ) = 2 next i winx = WindowWidth winy = WindowHeight pi = atn( 1 ) * 4 s.max = 600 dim s.x( s.max ) , s.y( s.max ) , s.z( s.max ) dim s.name$( s.max ) , ry( s.max ) dim maze$( 20 , 20 ) , s.state$( s.max ) 'nomainwin gosub [sprite] UpperLeftX=1 UpperLeftY=1 open "isometric game demo" for graphics_nsb_nf as #m #m "trapclose [quit]" call sprite.clear 60 , 60 call sprite.getbmp "empty" call sprite.clear 60 , 60 call sprite.pie 30 , 30 , 25 , 25 , 45 , 315 _ , "black" , "yellow" , 1 call sprite.ellipse 30 , 20 , 10 , 10 _ , "black" , "white" , 1 call sprite.ellipse 30 , 20 , 5 , 5 _ , "black" , "black" , 1 call sprite.getbmp "player" call sprite.clear 60 , 60 call sprite.ellipse 30 , 30 , 25 , 25 _ , "black" , "Red" , 1 call sprite.ellipse 25 , 30 , 10 , 10 _ , "black" , "white" , 1 call sprite.ellipse 25 , 30 , 7 , 7 _ , "black" , "black" , 1 call sprite.ellipse 35 , 30 , 10 , 10 _ , "black" , "white" , 1 call sprite.ellipse 35 , 30 , 7 , 7 _ , "black" , "black" , 1 call sprite.getbmp "hunt" call sprite.clear 60 , 60 call sprite.rectangle 10 , 10 , 50 , 20 _ , "255 127 0" call sprite.rectangle 10 , 20 , 50 , 50 _ , "127 63 0" call sprite.getbmp "wall" call sprite.clear 60 , 60 call sprite.ellipse 30 , 30 , 10 , 10 _ , "blue" , "blue" , 5 call sprite.getbmp "pil" call sprite.clear 60 , 60 call sprite.ellipse 30 , 30 , 15 , 15 _ , "cyan" , "cyan" , 5 #m "getbmp super 0 0 60 120" for i = 0 to s.max ry( i ) = i s.state$( i ) = "on" next i s.tel = 0 call add.atom 0 , 0 , 28 , "player" for i = 0 to 4 call add.atom -60*4 , 0 , 29-60*4 , "hunt" s.state$( i + 1 ) = "hunt" next i j = 0 while maze$ <> "end" j = j + 1 read maze$ l = len( maze$ ) for i = 1 to l maze$( i , j ) = mid$( maze$ , i , 1 ) select case mid$( maze$ , i , 1 ) case "m" call add.atom _ ( i - .5 - l / 2 ) * 60 _ , 0 , ( j - 5.5 ) * 60 , "wall" case "." call add.atom _ ( i - .5 - l / 2 ) * 60 _ , 0 , ( j - 5.5 ) * 60 , "pil empty" case "@" call add.atom _ ( i - .5 - l / 2 ) * 60 _ , 0 , ( j - 5.5 ) * 60 , "super empty" case else end select next i wend data "mmmmmmmmmmm" data "m@.......@m" data "m.mmmmmmm.m" data "m.m.....m.m" data "m.m.mmm.m.m" data "m.........m" data "m.m.mmm.m.m" data "m.m.....m.m" data "m.mmmmmmm.m" data "m@.......@m" data "mmmmmmmmmmm" data "end"
#m "when characterInput [key]" #m "setfocus"
timer 250 , [timer] wait [timer] scan select case key$ case chr$( _VK_UP ) if maze$( p.x , p.z + 1 ) <> "m" then s.z( 0 ) = s.z( 0 ) + 60 p.z = p.z + 1 end if case chr$( _VK_DOWN ) if maze$( p.x , p.z - 1 ) <> "m" then s.z( 0 ) = s.z( 0 ) - 60 p.z = p.z - 1 end if case chr$( _VK_LEFT ) if maze$( p.x - 1 , p.z ) <> "m" then s.x( 0 ) = s.x( 0 ) - 60 p.x = p.x - 1 end if case chr$( _VK_RIGHT ) if maze$( p.x + 1 , p.z ) <> "m" then s.x( 0 ) = s.x( 0 ) + 60 p.x = p.x + 1 end if case else end select for i = 0 to -1'4 'print i, g.x(i),g.z(i) dx = rand.int( 2 ) - 1 dz = rand.int( 2 ) - 1 while maze$( g.x( i ) + dx _ , g.z( i ) + dz ) = "m" dx = rand.int( 2 ) - 1 dz = rand.int( 2 ) - 1 wend g.x( i ) = g.x( i ) + dx g.z( i ) = g.z( i ) + dz s.x( i + 1 ) = s.x( i + 1 ) + dx * 60 s.z( i + 1 ) = s.z( i + 1 ) + dz * 60 next i key$ = "" #m "spritecollides spr0 list$" print list$ i = 1 while word$( list$ , i ) <> "" q$ = word$( list$ , i ) q = val( right$( q$ , len( q$ ) - 3 ) ) print q$, q, s.name$( q ) if ( s.name$( q ) = "pil" _ or s.name$( q ) = "super" ) _ and s.state$( q ) = "on" then '' #m "spriteimage spr" ; q ; " empty" '' s.state$( q ) = "off" end if if s.name$( q ) = "hunt" _ and s.state$( q ) = "hunt" then '' timer 0 '' notice "GAME OVER" end if i = i + 1 wend ''sort atom's for high = 1 to s.tel - 1 for low = 0 to high - 1 if s.z( ry( high ) ) < s.z( ry( low ) ) then help = ry( high ) ry( high ) = ry( low ) ry( low ) = help end if next low next high ''draw world for i = 0 to s.tel - 1 #m "spritetoback spr" ; ry( i ) #m "spritexy spr" ; ry( i ) ; " " _ ; winx / 2 + s.x( ry( i ) ) ; " " _ ; winy / 2 - s.y( ry( i ) ) _ - s.z( ry( i ) ) / 2 next i #m "drawsprites" wait [key] key$ = right$( Inkey$ , 1 ) if key$ <> chr$( _VK_ESCAPE ) then wait [quit] close #m end ''bluatigro 21 apr 2017 ''sprite module [sprite] global sprite.width , sprite.height return sub sprite.clear w , h #m "fill white" #m "goto 0 " ; h #m "size 1" #m "down" #m "color black" #m "backcolor black" #m "boxfilled " ; w ; " " ; h * 2 #m "up" sprite.width = w sprite.height = h end sub sub sprite.rectangle x1,y1,x2,y2,clr$ #m "goto " ; x1 ; " " ; y1 #m "size 1" #m "color black" #m "backcolor black" #m "down" #m "boxfilled " ; x2 ; " " ; y2 #m "up" #m "goto " ; x1 ; " " ; y1 + sprite.height #m "color " ; clr$ #m "backcolor " ; clr$ #m "down" #m "boxfilled " ; x2 ; " " ; y2 + 60 #m "up" end sub sub sprite.ellipse x,y,dx,dy,clr$,bclr$,size #m "goto " ; x ; " " ; y #m "size " ; size #m "down" #m "color black" #m "backcolor black" #m "ellipsefilled " ; dx ; " " ; dy #m "up" #m "goto " ; x ; " " ; y + sprite.height #m "down" #m "color " ; clr$ #m "backcolor " ; bclr$ #m "ellipsefilled " ; dx ; " " ; dy #m "up" end sub sub sprite.pie x,y,dx,dy,a,b,clr$,bclr$,size #m "goto " ; x ; " " ; y #m "size " ; size #m "down" #m "color black" #m "backcolor black" #m "piefilled " ; dx ; " " ; dy _ ; " " ; a ; " " ; b #m "up" #m "goto " ; x ; " " ; y + sprite.height #m "down" #m "color " ; clr$ #m "backcolor " ; bclr$ #m "piefilled " ; dx ; " " ; dy _ ; " " ; a ; " " ; b #m "up" end sub sub sprite.line x1,y1 , x2,y2 , clr$ , size #m "color black" #m "size " ; size #m "down" #m "line " ; x1 ; " " ; y1 _ ; " " ; x2 ; " " ; y2 #m "up" #m "color " ; clr$ #m "down" #m "line " ; x1 ; " " ; y1 + sprite.height _ ; " " ; x2 ; " " ; y2 + sprite.height #m "up" end sub sub sprite.getbmp bmp$ #m "getbmp " ; bmp$ ; " 0 0 " _ ; sprite.width ; " " ; sprite.height * 2 end sub ''end sprite_draw module function rand.int( h ) rand.int = int( rnd(0) * ( h + 1 ) ) end function sub add.atom x , y , z , i$ #m "addsprite spr" ; s.tel ; " " ; i$ 'print "addsprite spr" ; s.tel ; " " ; i$ s.x( s.tel ) = x s.y( s.tel ) = y s.z( s.tel ) = z s.name$( s.tel ) = word$( i$ , 1 ) 'print s.name$( s.tel ) s.tel = s.tel + 1 end sub function rad( deg ) rad = deg * pi / 180 end function function rgb$( r , g , b ) r = int( r ) and 255 g = int( g ) and 255 b = int( b ) and 255 rgb$ = str$( r ) ; " " ; g ; " " ; b end function function rainbow$( deg ) r = sin( rad( deg ) ) * 127 + 128 g = sin( rad( deg - 120 ) ) * 127 + 128 b = sin( rad( deg + 120 ) ) * 127 + 128 rainbow$ = rgb$( r , g , b ) end function
|
|
|
Post by tsh73 on Apr 23, 2018 7:31:06 GMT
I found why it clears all pils
On the start, all sprites are created on same place (actual cords are set later, in ''draw world block ) So collision list list then all - and delete them all.
The fix is to skip collision check for first turn
if notFirstTime then #m "spritecollides spr0 list$" end if notFirstTime=1
Whole program
'bluatigro 22 apr 2018 ''pac man whit 3d world JB VESION
WindowWidth = 800'DisplayWidth WindowHeight = 600'DisplayHeight global winx , winy , pi , s.max , s.tel , key$ global p.x , p.y , p.z dim g.x( 4 ) , g.y( 4 ) , g.z( 4 ) p.x = 6 p.y = 0 p.z = 6 for i = 0 to 4 g.x( i ) = 2 g.y( i ) = 0 g.z( i ) = 2 next i winx = WindowWidth winy = WindowHeight pi = atn( 1 ) * 4 s.max = 600 dim s.x( s.max ) , s.y( s.max ) , s.z( s.max ) dim s.name$( s.max ) , ry( s.max ) dim maze$( 20 , 20 ) , s.state$( s.max ) 'nomainwin gosub [sprite] UpperLeftX=1 UpperLeftY=1 open "isometric game demo" for graphics_nsb_nf as #m #m "trapclose [quit]" call sprite.clear 60 , 60 call sprite.getbmp "empty" call sprite.clear 60 , 60 call sprite.pie 30 , 30 , 25 , 25 , 45 , 315 _ , "black" , "yellow" , 1 call sprite.ellipse 30 , 20 , 10 , 10 _ , "black" , "white" , 1 call sprite.ellipse 30 , 20 , 5 , 5 _ , "black" , "black" , 1 call sprite.getbmp "player" call sprite.clear 60 , 60 call sprite.ellipse 30 , 30 , 25 , 25 _ , "black" , "Red" , 1 call sprite.ellipse 25 , 30 , 10 , 10 _ , "black" , "white" , 1 call sprite.ellipse 25 , 30 , 7 , 7 _ , "black" , "black" , 1 call sprite.ellipse 35 , 30 , 10 , 10 _ , "black" , "white" , 1 call sprite.ellipse 35 , 30 , 7 , 7 _ , "black" , "black" , 1 call sprite.getbmp "hunt" call sprite.clear 60 , 60 call sprite.rectangle 10 , 10 , 50 , 20 _ , "255 127 0" call sprite.rectangle 10 , 20 , 50 , 50 _ , "127 63 0" call sprite.getbmp "wall" call sprite.clear 60 , 60 call sprite.ellipse 30 , 30 , 10 , 10 _ , "blue" , "blue" , 5 call sprite.getbmp "pil" call sprite.clear 60 , 60 call sprite.ellipse 30 , 30 , 15 , 15 _ , "cyan" , "cyan" , 5 #m "getbmp super 0 0 60 120" for i = 0 to s.max ry( i ) = i s.state$( i ) = "on" next i s.tel = 0 call add.atom 0 , 0 , 28 , "player" for i = 0 to 4 call add.atom -60*4 , 0 , 29-60*4 , "hunt" s.state$( i + 1 ) = "hunt" next i j = 0 while maze$ <> "end" j = j + 1 read maze$ l = len( maze$ ) for i = 1 to l maze$( i , j ) = mid$( maze$ , i , 1 ) select case mid$( maze$ , i , 1 ) case "m" call add.atom _ ( i - .5 - l / 2 ) * 60 _ , 0 , ( j - 5.5 ) * 60 , "wall" case "." call add.atom _ ( i - .5 - l / 2 ) * 60 _ , 0 , ( j - 5.5 ) * 60 , "pil empty" case "@" call add.atom _ ( i - .5 - l / 2 ) * 60 _ , 0 , ( j - 5.5 ) * 60 , "super empty" case else end select next i wend data "mmmmmmmmmmm" data "m@.......@m" data "m.mmmmmmm.m" data "m.m.....m.m" data "m.m.mmm.m.m" data "m.........m" data "m.m.mmm.m.m" data "m.m.....m.m" data "m.mmmmmmm.m" data "m@.......@m" data "mmmmmmmmmmm" data "end"
#m "when characterInput [key]" #m "setfocus"
timer 250 , [timer] wait [timer] scan select case key$ case chr$( _VK_UP ) if maze$( p.x , p.z + 1 ) <> "m" then s.z( 0 ) = s.z( 0 ) + 60 p.z = p.z + 1 end if case chr$( _VK_DOWN ) if maze$( p.x , p.z - 1 ) <> "m" then s.z( 0 ) = s.z( 0 ) - 60 p.z = p.z - 1 end if case chr$( _VK_LEFT ) if maze$( p.x - 1 , p.z ) <> "m" then s.x( 0 ) = s.x( 0 ) - 60 p.x = p.x - 1 end if case chr$( _VK_RIGHT ) if maze$( p.x + 1 , p.z ) <> "m" then s.x( 0 ) = s.x( 0 ) + 60 p.x = p.x + 1 end if case else end select for i = 0 to -1'4 'print i, g.x(i),g.z(i) dx = rand.int( 2 ) - 1 dz = rand.int( 2 ) - 1 while maze$( g.x( i ) + dx _ , g.z( i ) + dz ) = "m" dx = rand.int( 2 ) - 1 dz = rand.int( 2 ) - 1 wend g.x( i ) = g.x( i ) + dx g.z( i ) = g.z( i ) + dz s.x( i + 1 ) = s.x( i + 1 ) + dx * 60 s.z( i + 1 ) = s.z( i + 1 ) + dz * 60 next i key$ = "" if notFirstTime then #m "spritecollides spr0 list$" end if notFirstTime=1 print list$ i = 1 while word$( list$ , i ) <> "" q$ = word$( list$ , i ) q = val( right$( q$ , len( q$ ) - 3 ) ) print q$, q, s.name$( q ) if ( s.name$( q ) = "pil" _ or s.name$( q ) = "super" ) _ and s.state$( q ) = "on" then #m "spriteimage spr" ; q ; " empty" print "spriteimage spr" ; q ; " empty" s.state$( q ) = "off" end if if s.name$( q ) = "hunt" _ and s.state$( q ) = "hunt" then '' timer 0 '' notice "GAME OVER" end if i = i + 1 wend ''sort atom's for high = 1 to s.tel - 1 for low = 0 to high - 1 if s.z( ry( high ) ) < s.z( ry( low ) ) then help = ry( high ) ry( high ) = ry( low ) ry( low ) = help end if next low next high ''draw world for i = 0 to s.tel - 1 #m "spritetoback spr" ; ry( i ) #m "spritexy spr" ; ry( i ) ; " " _ ; winx / 2 + s.x( ry( i ) ) ; " " _ ; winy / 2 - s.y( ry( i ) ) _ - s.z( ry( i ) ) / 2 next i #m "drawsprites" wait [key] key$ = right$( Inkey$ , 1 ) if key$ <> chr$( _VK_ESCAPE ) then wait [quit] close #m end ''bluatigro 21 apr 2017 ''sprite module [sprite] global sprite.width , sprite.height return sub sprite.clear w , h #m "fill white" #m "goto 0 " ; h #m "size 1" #m "down" #m "color black" #m "backcolor black" #m "boxfilled " ; w ; " " ; h * 2 #m "up" sprite.width = w sprite.height = h end sub sub sprite.rectangle x1,y1,x2,y2,clr$ #m "goto " ; x1 ; " " ; y1 #m "size 1" #m "color black" #m "backcolor black" #m "down" #m "boxfilled " ; x2 ; " " ; y2 #m "up" #m "goto " ; x1 ; " " ; y1 + sprite.height #m "color " ; clr$ #m "backcolor " ; clr$ #m "down" #m "boxfilled " ; x2 ; " " ; y2 + 60 #m "up" end sub sub sprite.ellipse x,y,dx,dy,clr$,bclr$,size #m "goto " ; x ; " " ; y #m "size " ; size #m "down" #m "color black" #m "backcolor black" #m "ellipsefilled " ; dx ; " " ; dy #m "up" #m "goto " ; x ; " " ; y + sprite.height #m "down" #m "color " ; clr$ #m "backcolor " ; bclr$ #m "ellipsefilled " ; dx ; " " ; dy #m "up" end sub sub sprite.pie x,y,dx,dy,a,b,clr$,bclr$,size #m "goto " ; x ; " " ; y #m "size " ; size #m "down" #m "color black" #m "backcolor black" #m "piefilled " ; dx ; " " ; dy _ ; " " ; a ; " " ; b #m "up" #m "goto " ; x ; " " ; y + sprite.height #m "down" #m "color " ; clr$ #m "backcolor " ; bclr$ #m "piefilled " ; dx ; " " ; dy _ ; " " ; a ; " " ; b #m "up" end sub sub sprite.line x1,y1 , x2,y2 , clr$ , size #m "color black" #m "size " ; size #m "down" #m "line " ; x1 ; " " ; y1 _ ; " " ; x2 ; " " ; y2 #m "up" #m "color " ; clr$ #m "down" #m "line " ; x1 ; " " ; y1 + sprite.height _ ; " " ; x2 ; " " ; y2 + sprite.height #m "up" end sub sub sprite.getbmp bmp$ #m "getbmp " ; bmp$ ; " 0 0 " _ ; sprite.width ; " " ; sprite.height * 2 end sub ''end sprite_draw module function rand.int( h ) rand.int = int( rnd(0) * ( h + 1 ) ) end function sub add.atom x , y , z , i$ #m "addsprite spr" ; s.tel ; " " ; i$ 'print "addsprite spr" ; s.tel ; " " ; i$ s.x( s.tel ) = x s.y( s.tel ) = y s.z( s.tel ) = z s.name$( s.tel ) = word$( i$ , 1 ) 'print s.name$( s.tel ) s.tel = s.tel + 1 end sub function rad( deg ) rad = deg * pi / 180 end function function rgb$( r , g , b ) r = int( r ) and 255 g = int( g ) and 255 b = int( b ) and 255 rgb$ = str$( r ) ; " " ; g ; " " ; b end function function rainbow$( deg ) r = sin( rad( deg ) ) * 127 + 128 g = sin( rad( deg - 120 ) ) * 127 + 128 b = sin( rad( deg + 120 ) ) * 127 + 128 rainbow$ = rgb$( r , g , b ) end function
|
|
|
Post by bluatigro on May 13, 2018 10:23:35 GMT
name the chemical | molecule works !!
''bluatigro 16 apr 2018 ''name the chemical | molecule : whit 3d sprites
WindowWidth = DisplayWidth WindowHeight = DisplayHeight global winx , winy , angle , pi global s.max , s.tel , state , key$ winx = WindowWidth winy = WindowHeight pi = atn( 1 ) * 4 s.max = 40 dim s.x( s.max ) , s.y( s.max ) , s.z( s.max ) , ry( s.max ) nomainwin open "isometric game demo" for graphics as #m #m "trapclose [quit]" #m "goto 0 60" #m "size 1" #m "down" #m "color black" #m "backcolor black" #m "boxfilled 60 120" #m "up" #m "getbmp empty 0 0 60 120" for i = 1 to 9 read name$ , clr$ , d #m "goto 30 30" #m "size 5" #m "down" #m "color black" #m "backcolor black" #m "circlefilled " ; d #m "up" #m "goto 0 60" #m "size 1" #m "down" #m "color black" #m "backcolor black" #m "boxfilled 60 120" #m "up" #m "goto 30 90" #m "size 5" #m "down" #m "color black" #m "backcolor " ; clr$ #m "circlefilled " ; d #m "up" #m "getbmp " ; name$ _ ; " 0 0 60 120" next i for i = 0 to s.max ry( i ) = i next i data "H" , "white" , 15 data "C" , "black" , 20 data "N" , "blue" , 20 data "O" , "red" , 20 data "F" , "green" , 20 data "P" , "pink" , 25 data "S" , "yellow" , 25 data "Cl" , "darkgreen" , 25 data "end" , "white" , 1
#m "font 30 bold" #m "fill lightgray" call text 100 , 40 , "name the chemical | molecule ." _ , "black" , "lightgray" call text 10 , 100 , "H" , "black" , "white" call text 50 , 100 , "C" , "white" , "black" call text 90 , 100 , "N" , "white" , "blue" call text 130 , 100 , "O" , "white" , "red" call text 10 , 170 , "F" , "black" , "green" call text 50 , 170 , "P" , "white" , "pink" call text 90 , 170 , "S" , "black" , "yellow" call text 130 , 170 , "Cl" , "white" , "darkgreen" for i = 0 to s.max #m "addsprite spr" ; i _ ; " H C N O F P S Cl empty" next i #m "getbmp screen 0 0 " ; winx ; " " ; winy #m "background screen" #m "when characterInput [key]" #m "setfocus" timer 40 , [timer] wait [timer] if key$ = " " then state = state + 1 if state >= 13 then state = 0 end if end if key$ = "" for i = 0 to s.max call add.atom i , 0,0,0 , "empty" next i select case state ''air chemical's case 0 ''O2 call add.atom 0 , -40 , 0 , 0 , "O" call add.atom 1 , 40 , 0 , 0 , "O" case 1 ''N2 call add.atom 0 , -40 , 0 , 0 , "N" call add.atom 1 , 40 , 0 , 0 , "N" case 2 ''CO2 call add.atom 0 , 0 , 0 , 0 , "C" call add.atom 1 , -60 , 0 , 0 , "O" call add.atom 2 , 60 , 0 , 0 , "O" case 3 ''O3" call add.atom 0 , 0 , 0 , 0 , "O" call add.atom 1 , -40 , -20 , 0 , "O" call add.atom 2 , 40 , -20 , 0 , "O" case 4 ''H2O call add.atom 0 , 0 , 0 , 0 , "O" call add.atom 1 , -40 , -20 , 0 , "H" call add.atom 2 , 40 , -20 , 0 , "H" case 5 ''NH3 call add.atom 0 , 0 , 0 , 0 , "N" call add.atom 1 , -40 , -20 , 0 , "H" call add.atom 2 , 40 , -20 , 0 , "H" call add.atom 3 , 0 , 40 , 0 , "H" case 6 ''SO2 call add.atom 0 , 0 , 0 , 0 , "S" call add.atom 1 , -50 , -25 , 0 , "O" call add.atom 2 , 50 , -25 , 0 , "O" case 7 ''SO3 call add.atom 0 , 0 , 0 , 0 , "S" call add.atom 1 , -50 , -25 , 0 , "O" call add.atom 2 , 50 , -25 , 0 , "O" call add.atom 3 , 0 , 50 , 0 , "O" case 8 ''SO4 call add.atom 0 , 0 , 0 , 0 , "S" call add.atom 1, 40 , 40 , 40 , "O" call add.atom 2 , -40 , -40 , 40 , "O" call add.atom 3 , -40 , 40 , -40 , "O" call add.atom 4 , 40 , -40 , -40 , "O" case 9 ''NO call add.atom 0 , -40 , 0 , 0 , "N" call add.atom 1 , 40 , 0 , 0 , "O" case 10 ''NO2 call add.atom 0 , 0 , 0 , 0 , "N" call add.atom 1 , -40 , -20 , 0 , "O" call add.atom 2 , 40 , -20 , 0 , "O" case 11 ''NHO3 call add.atom 0 , 0 , 0 , 0 , "N" call add.atom 1 , -40 , -20 , 0 , "O" call add.atom 2 , 40 , -20 , 0 , "O" call add.atom 3 , 0 , 40 , 0 , "O" call add.atom 4 , 40 , 60 , 0 , "H" case 12 ''H2O2 call add.atom 0 , 0 , 40 , 0 , "O" call add.atom 1 , 0 , -40 , 0 , "O" call add.atom 2 , -40 , 60 , 0 , "H" call add.atom 3 , 40 , -60 , 0 , "H" case 13 ''C2H3O5N case else end select ''rotate molecule s = sin( rad( angle ) ) c = cos( rad( angle ) ) for i = 0 to s.max x = s.x( i ) * c - s.z( i ) * s z = s.x( i ) * s + s.z( i ) * c s.x( i ) = x s.z( i ) = z next i ''sort atom's for high = 1 to s.max for low = 0 to high - 1 if s.z( ry( high ) ) < s.z( ry( low ) ) then help = ry( high ) ry( high ) = ry( low ) ry( low ) = help end if next low next high ''draw molecule for i = 0 to s.max #m "spritetoback spr" ; ry( i ) #m "spritexy spr" ; ry( i ) ; " " _ ; winx / 2 + s.x( ry( i ) ) ; " " _ ; winy / 2 - s.y( ry( i ) ) _ - s.z( ry( i ) ) / 4 next i #m "drawsprites" angle = angle + 5 wait [key] key$ = Inkey$ if key$ <> chr$( _VK_ESCAPE ) then wait [quit] close #m end sub text x , y , txt$ , l$ , b$ #m "goto " ; x ; " " ; y #m "color " ; l$ #m "backcolor " ; b$ #m "down" #m "\" ; txt$ #m "up" end sub sub add.atom no , x , y , z , i$ #m "spriteimage spr" ; no ; " " ; i$ s.x( no ) = x s.y( no ) = y s.z( no ) = z end sub function rad( deg ) rad = deg * pi / 180 end function function rgb$( r , g , b ) r = int( r ) and 255 g = int( g ) and 255 b = int( b ) and 255 rgb$ = str$( r ) ; " " ; g ; " " ; b end function function rainbow$( deg ) r = sin( rad( deg ) ) * 127 + 128 g = sin( rad( deg - 120 ) ) * 127 + 128 b = sin( rad( deg + 120 ) ) * 127 + 128 rainbow$ = rgb$( r , g , b ) end function
|
|
|
Post by bluatigro on May 13, 2018 10:35:35 GMT
tsh73 : i changed the code so that only the sameplace pils are eaten
'bluatigro 22 apr 2018 ''pac man whit 3d world JB VESION
WindowWidth = DisplayWidth WindowHeight = DisplayHeight global winx , winy , pi , s.max , s.tel , key$ global p.x , p.y , p.z dim g.x( 4 ) , g.y( 4 ) , g.z( 4 ) p.x = 6 p.y = 0 p.z = 6 for i = 0 to 4 g.x( i ) = 2 g.y( i ) = 0 g.z( i ) = 2 next i winx = WindowWidth winy = WindowHeight pi = atn( 1 ) * 4 s.max = 600 dim s.x( s.max ) , s.y( s.max ) , s.z( s.max ) dim s.name$( s.max ) , ry( s.max ) dim maze$( 20 , 20 ) , s.state$( s.max ) 'nomainwin gosub [sprite] UpperLeftX=1 UpperLeftY=1 open "isometric game demo" for graphics_nsb_nf as #m #m "trapclose [quit]" call sprite.clear 60 , 60 call sprite.getbmp "empty" call sprite.clear 60 , 60 call sprite.pie 30 , 30 , 25 , 25 , 45 , 315 _ , "black" , "yellow" , 1 call sprite.ellipse 30 , 20 , 10 , 10 _ , "black" , "white" , 1 call sprite.ellipse 30 , 20 , 5 , 5 _ , "black" , "black" , 1 call sprite.getbmp "player" call sprite.clear 60 , 60 call sprite.ellipse 30 , 30 , 25 , 25 _ , "black" , "Red" , 1 call sprite.ellipse 25 , 30 , 10 , 10 _ , "black" , "white" , 1 call sprite.ellipse 25 , 30 , 7 , 7 _ , "black" , "black" , 1 call sprite.ellipse 35 , 30 , 10 , 10 _ , "black" , "white" , 1 call sprite.ellipse 35 , 30 , 7 , 7 _ , "black" , "black" , 1 call sprite.getbmp "hunt" call sprite.clear 60 , 60 call sprite.rectangle 10 , 10 , 50 , 20 _ , "255 127 0" call sprite.rectangle 10 , 20 , 50 , 50 _ , "127 63 0" call sprite.getbmp "wall" call sprite.clear 60 , 60 call sprite.ellipse 30 , 30 , 10 , 10 _ , "blue" , "blue" , 5 call sprite.getbmp "pil" call sprite.clear 60 , 60 call sprite.ellipse 30 , 30 , 15 , 15 _ , "cyan" , "cyan" , 5 #m "getbmp super 0 0 60 120" for i = 0 to s.max ry( i ) = i s.state$( i ) = "on" next i s.tel = 0 call add.atom 0 , 0 , 28 , "player" for i = 0 to 4 call add.atom -60*4 , 0 , 29-60*4 , "hunt" s.state$( i + 1 ) = "hunt" next i j = 0 while maze$ <> "end" j = j + 1 read maze$ l = len( maze$ ) for i = 1 to l maze$( i , j ) = mid$( maze$ , i , 1 ) select case mid$( maze$ , i , 1 ) case "m" call add.atom _ ( i - .5 - l / 2 ) * 60 _ , 0 , ( j - 5.5 ) * 60 , "wall" case "." call add.atom _ ( i - .5 - l / 2 ) * 60 _ , 0 , ( j - 5.5 ) * 60 , "pil empty" case "@" call add.atom _ ( i - .5 - l / 2 ) * 60 _ , 0 , ( j - 5.5 ) * 60 , "super empty" case else end select next i wend data "mmmmmmmmmmm" data "m@.......@m" data "m.mmmmmmm.m" data "m.m.....m.m" data "m.m.mmm.m.m" data "m.........m" data "m.m.mmm.m.m" data "m.m.....m.m" data "m.mmmmmmm.m" data "m@.......@m" data "mmmmmmmmmmm" data "end"
#m "when characterInput [key]" #m "setfocus"
timer 250 , [timer] wait [timer] scan select case key$ case chr$( _VK_UP ) if maze$( p.x , p.z + 1 ) <> "m" then s.z( 0 ) = s.z( 0 ) + 60 p.z = p.z + 1 end if case chr$( _VK_DOWN ) if maze$( p.x , p.z - 1 ) <> "m" then s.z( 0 ) = s.z( 0 ) - 60 p.z = p.z - 1 end if case chr$( _VK_LEFT ) if maze$( p.x - 1 , p.z ) <> "m" then s.x( 0 ) = s.x( 0 ) - 60 p.x = p.x - 1 end if case chr$( _VK_RIGHT ) if maze$( p.x + 1 , p.z ) <> "m" then s.x( 0 ) = s.x( 0 ) + 60 p.x = p.x + 1 end if case else end select for i = 0 to -1'4 'print i, g.x(i),g.z(i) dx = rand.int( 2 ) - 1 dz = rand.int( 2 ) - 1 while maze$( g.x( i ) + dx _ , g.z( i ) + dz ) = "m" dx = rand.int( 2 ) - 1 dz = rand.int( 2 ) - 1 wend g.x( i ) = g.x( i ) + dx g.z( i ) = g.z( i ) + dz s.x( i + 1 ) = s.x( i + 1 ) + dx * 60 s.z( i + 1 ) = s.z( i + 1 ) + dz * 60 next i key$ = "" if notFirstTime then #m "spritecollides spr0 list$" end if notFirstTime=1 print list$ i = 1 while word$( list$ , i ) <> "" q$ = word$( list$ , i ) q = val( right$( q$ , len( q$ ) - 3 ) ) '' print q$, q, s.name$( q ) if ( s.name$( q ) = "pil" _ or s.name$( q ) = "super" ) _ and s.state$( q ) = "on" _ and abs( s.x( q ) - s.x( 0 ) ) < 10 _ and abs( s.z( q ) - s.z( 0 ) ) < 10 then #m "spriteimage spr" ; q ; " empty" '' print "spriteimage spr" ; q ; " empty" s.state$( q ) = "off" end if if s.name$( q ) = "hunt" _ and s.state$( q ) = "hunt" then '' timer 0 '' notice "GAME OVER" end if i = i + 1 wend ''sort atom's for high = 1 to s.tel - 1 for low = 0 to high - 1 if s.z( ry( high ) ) < s.z( ry( low ) ) then help = ry( high ) ry( high ) = ry( low ) ry( low ) = help end if next low next high ''draw world for i = 0 to s.tel - 1 #m "spritetoback spr" ; ry( i ) #m "spritexy spr" ; ry( i ) ; " " _ ; winx / 2 + s.x( ry( i ) ) ; " " _ ; winy / 2 - s.y( ry( i ) ) _ - s.z( ry( i ) ) / 2 next i #m "drawsprites" wait [key] key$ = right$( Inkey$ , 1 ) if key$ <> chr$( _VK_ESCAPE ) then wait [quit] close #m end ''bluatigro 21 apr 2017 ''sprite module [sprite] global sprite.width , sprite.height return sub sprite.clear w , h #m "fill white" #m "goto 0 " ; h #m "size 1" #m "down" #m "color black" #m "backcolor black" #m "boxfilled " ; w ; " " ; h * 2 #m "up" sprite.width = w sprite.height = h end sub sub sprite.rectangle x1,y1,x2,y2,clr$ #m "goto " ; x1 ; " " ; y1 #m "size 1" #m "color black" #m "backcolor black" #m "down" #m "boxfilled " ; x2 ; " " ; y2 #m "up" #m "goto " ; x1 ; " " ; y1 + sprite.height #m "color " ; clr$ #m "backcolor " ; clr$ #m "down" #m "boxfilled " ; x2 ; " " ; y2 + 60 #m "up" end sub sub sprite.ellipse x,y,dx,dy,clr$,bclr$,size #m "goto " ; x ; " " ; y #m "size " ; size #m "down" #m "color black" #m "backcolor black" #m "ellipsefilled " ; dx ; " " ; dy #m "up" #m "goto " ; x ; " " ; y + sprite.height #m "down" #m "color " ; clr$ #m "backcolor " ; bclr$ #m "ellipsefilled " ; dx ; " " ; dy #m "up" end sub sub sprite.pie x,y,dx,dy,a,b,clr$,bclr$,size #m "goto " ; x ; " " ; y #m "size " ; size #m "down" #m "color black" #m "backcolor black" #m "piefilled " ; dx ; " " ; dy _ ; " " ; a ; " " ; b #m "up" #m "goto " ; x ; " " ; y + sprite.height #m "down" #m "color " ; clr$ #m "backcolor " ; bclr$ #m "piefilled " ; dx ; " " ; dy _ ; " " ; a ; " " ; b #m "up" end sub sub sprite.line x1,y1 , x2,y2 , clr$ , size #m "color black" #m "size " ; size #m "down" #m "line " ; x1 ; " " ; y1 _ ; " " ; x2 ; " " ; y2 #m "up" #m "color " ; clr$ #m "down" #m "line " ; x1 ; " " ; y1 + sprite.height _ ; " " ; x2 ; " " ; y2 + sprite.height #m "up" end sub sub sprite.getbmp bmp$ #m "getbmp " ; bmp$ ; " 0 0 " _ ; sprite.width ; " " ; sprite.height * 2 end sub ''end sprite_draw module function rand.int( h ) rand.int = int( rnd(0) * ( h + 1 ) ) end function sub add.atom x , y , z , i$ #m "addsprite spr" ; s.tel ; " " ; i$ 'print "addsprite spr" ; s.tel ; " " ; i$ s.x( s.tel ) = x s.y( s.tel ) = y s.z( s.tel ) = z s.name$( s.tel ) = word$( i$ , 1 ) 'print s.name$( s.tel ) s.tel = s.tel + 1 end sub function rad( deg ) rad = deg * pi / 180 end function function rgb$( r , g , b ) r = int( r ) and 255 g = int( g ) and 255 b = int( b ) and 255 rgb$ = str$( r ) ; " " ; g ; " " ; b end function function rainbow$( deg ) r = sin( rad( deg ) ) * 127 + 128 g = sin( rad( deg - 120 ) ) * 127 + 128 b = sin( rad( deg + 120 ) ) * 127 + 128 rainbow$ = rgb$( r , g , b ) end function
|
|
|
Post by bluatigro on May 17, 2018 12:01:50 GMT
i tryed to standerize my sprite3d code in iso pacman
error : JB2 kick's me out of code
'' bluatigro 17 may 2018 '' pac man whit 3d world JB VESION
WindowWidth = DisplayWidth WindowHeight = DisplayHeight global winx , winy , pi , s.max , s.tel , key$ global p.x , p.y , p.z , ghost.timer dim g.x( 4 ) , g.y( 4 ) , g.z( 4 ) p.x = 6 p.y = 0 p.z = 6 for i = 0 to 4 g.x( i ) = 2 g.y( i ) = 0 g.z( i ) = 2 next i winx = WindowWidth winy = WindowHeight pi = atn( 1 ) * 4 s.max = 400 dim s.x( s.max ) , s.y( s.max ) , s.z( s.max ) dim s.name$( s.max ) , ry( s.max ) dim maze$( 20 , 20 ) , s.state$( s.max ) nomainwin gosub [sprite] UpperLeftX=1 UpperLeftY=1 open "isometric game demo" for graphics_nsb_nf as #m #m "trapclose [quit]" call sprite.clear 60 , 60 call sprite.getbmp "empty" call sprite.clear 60 , 60 call sprite.pie 30 , 30 , 25 , 25 , 45 , 315 _ , "black" , "yellow" , 1 call sprite.ellipse 30 , 20 , 10 , 10 _ , "black" , "white" , 1 call sprite.ellipse 30 , 20 , 5 , 5 _ , "black" , "black" , 1 call sprite.getbmp "player" call sprite.clear 60 , 60 call sprite.ellipse 30 , 30 , 25 , 25 _ , "black" , "red" , 1 call sprite.ellipse 25 , 30 , 10 , 10 _ , "black" , "white" , 1 call sprite.ellipse 25 , 30 , 7 , 7 _ , "black" , "black" , 1 call sprite.ellipse 35 , 30 , 10 , 10 _ , "black" , "white" , 1 call sprite.ellipse 35 , 30 , 7 , 7 _ , "black" , "black" , 1 call sprite.getbmp "hunt" call sprite.clear 60 , 60 call sprite.ellipse 30 , 30 , 25 , 25 _ , "black" , "green" , 1 call sprite.ellipse 25 , 30 , 10 , 10 _ , "black" , "white" , 1 call sprite.ellipse 25 , 30 , 7 , 7 _ , "black" , "black" , 1 call sprite.ellipse 35 , 30 , 10 , 10 _ , "black" , "white" , 1 call sprite.ellipse 35 , 30 , 7 , 7 _ , "black" , "black" , 1 call sprite.getbmp "flee" call sprite.clear 60 , 60 call sprite.ellipse 30 , 30 , 25 , 25 _ , "black" , "red" , 1 call sprite.getbmp "warning" call sprite.clear 60 , 60 call sprite.ellipse 30 , 30 , 25 , 25 _ , "black" , "lightgray" , 1 call sprite.getbmp "caught"
call sprite.clear 60 , 60 call sprite.rectangle 10 , 10 , 50 , 20 _ , "255 127 0" call sprite.rectangle 10 , 20 , 50 , 50 _ , "127 63 0" call sprite.getbmp "wall" call sprite.clear 60 , 60 call sprite.ellipse 30 , 30 , 10 , 10 _ , "black" , "blue" , 5 call sprite.getbmp "pil" call sprite.clear 60 , 60 call sprite.ellipse 30 , 30 , 15 , 15 _ , "black" , "cyan" , 5 call sprite.getbmp "super" for i = 0 to s.max ry( i ) = i s.state$( i ) = "on" next i call sprite3d.xyz 0 , 0 , 0 , 28 call sprite3d.add 0 , "player" for i = 1 to 4 call sprite3d.xyz i , -60*4 , 0 , 29-60*4 call sprite3d.add i , "hunt flee warning caught" call sprite3d.image i , "hunt" next i j = 0 tel = 5 while maze$ <> "end" j = j + 1 read maze$ l = len( maze$ ) for i = 1 to l maze$( i , j ) = mid$( maze$ , i , 1 ) select case mid$( maze$ , i , 1 ) case "m" call sprite3d.xyz tel _ , ( i - .5 - l / 2 ) * 60 _ , 0 , ( j - 5.5 ) * 60 call sprite3d.add tel , "wall" call sprite3d.image tel , "wall" case "." call sprite3d.xyz tel _ , ( i - .5 - l / 2 ) * 60 _ , 0 , ( j - 5.5 ) * 60 call sprite3d.add tel , "pil empty" call sprite3d.image tel , "pil" case "@" call sprite3d.xyz tel _ , ( i - .5 - l / 2 ) * 60 _ , 0 , ( j - 5.5 ) * 60 call sprite3d.add tel , "super empty" call sprite3d.image tel , "super" case else end select tel = tel + 1 next i wend data "mmmmmmmmmmm" data "m@.......@m" data "m.mmmmmmm.m" data "m.m.....m.m" data "m.m.mmm.m.m" data "m.........m" data "m.m.mmm.m.m" data "m.m.....m.m" data "m.mmmmmmm.m" data "m@.......@m" data "mmmmmmmmmmm" data "end"
#m "when characterInput [key]" #m "setfocus"
timer 250 , [timer] wait [timer] scan select case key$ case chr$( _VK_UP ) if maze$( p.x , p.z + 1 ) <> "m" then s.z( 0 ) = s.z( 0 ) + 60 p.z = p.z + 1 end if case chr$( _VK_DOWN ) if maze$( p.x , p.z - 1 ) <> "m" then s.z( 0 ) = s.z( 0 ) - 60 p.z = p.z - 1 end if case chr$( _VK_LEFT ) #m "spriteorient spr0 mirror" if maze$( p.x - 1 , p.z ) <> "m" then s.x( 0 ) = s.x( 0 ) - 60 p.x = p.x - 1 end if case chr$( _VK_RIGHT ) #m "spriteorient spr0 normal" if maze$( p.x + 1 , p.z ) <> "m" then s.x( 0 ) = s.x( 0 ) + 60 p.x = p.x + 1 end if case else end select for i = 0 to 3 'print i, g.x(i),g.z(i) dx = rand.int( 2 ) - 1 dz = rand.int( 2 ) - 1 while maze$( g.x( i ) + dx _ , g.z( i ) + dz ) = "m" dx = rand.int( 2 ) - 1 dz = rand.int( 2 ) - 1 wend g.x( i ) = g.x( i ) + dx g.z( i ) = g.z( i ) + dz s.x( i + 1 ) = s.x( i + 1 ) + dx * 60 s.z( i + 1 ) = s.z( i + 1 ) + dz * 60 next i key$ = "" if notFirstTime then #m "spritecollides spr0 list$" end if notFirstTime=1 print list$ i = 1 ghost.timer = ghost.timer - 1 while word$( list$ , i ) <> "" q$ = word$( list$ , i ) q = val( right$( q$ , len( q$ ) - 3 ) ) '' print q$, q, s.name$( q ) if ( sprite3d.image$( q ) = "pil" _ or sprite3d.image$( q ) = "super" ) _ and abs( s.x( q ) - s.x( 0 ) ) < 10 _ and abs( s.z( q ) - s.z( 0 ) ) < 10 then call sprite3d.image q , "empty" ''todo : points end if if sprite3d.image$( q ) = "super" then ghost.timer = 100 for s = 1 to 4 call sprite3d.image s , "flee" next s end if if sprite3d.image$( q ) = "hunt" then '' timer 0 '' notice "GAME OVER" end if if sprite3d.image$( q ) = "flee" then call sprite3d.image q , "caught" ''todo : points end if image$ = sprite3d.image$( q ) if ( image$ = "flee" or image$ = "caught" ) _ and ghost.timer < 30 then call sprite3d.image q , "warning" end if if image$ = "warning" and ghost.timer < 0 then ghost.timer = 0 call sprite3d.image q , "hunt" end if i = i + 1 wend ''sort atom's for high = 1 to s.max for low = 0 to high - 1 if s.z( ry( high ) ) < s.z( ry( low ) ) then help = ry( high ) ry( high ) = ry( low ) ry( low ) = help end if next low next high ''draw world for i = 0 to s.max #m "spritetoback spr" ; ry( i ) #m "spritexy spr" ; ry( i ) ; " " _ ; winx / 2 + s.x( ry( i ) ) ; " " _ ; winy / 2 - s.y( ry( i ) ) _ - s.z( ry( i ) ) / 2 next i #m "drawsprites" wait [key] key$ = right$( Inkey$ , 1 ) if key$ <> chr$( _VK_ESCAPE ) then wait [quit] close #m end ''bluatigro 21 apr 2017 ''sprite module [sprite] global sprite.width , sprite.height return sub sprite.clear w , h #m "fill white" #m "goto 0 " ; h #m "size 1" #m "down" #m "color black" #m "backcolor black" #m "boxfilled " ; w ; " " ; h * 2 #m "up" sprite.width = w sprite.height = h end sub sub sprite.rectangle x1,y1,x2,y2,clr$ #m "goto " ; x1 ; " " ; y1 #m "size 1" #m "color black" #m "backcolor black" #m "down" #m "boxfilled " ; x2 ; " " ; y2 #m "up" #m "goto " ; x1 ; " " ; y1 + sprite.height #m "color " ; clr$ #m "backcolor " ; clr$ #m "down" #m "boxfilled " ; x2 ; " " ; y2 + 60 #m "up" end sub sub sprite.ellipse x,y,dx,dy,clr$,bclr$,size #m "goto " ; x ; " " ; y #m "size " ; size #m "down" #m "color black" #m "backcolor black" #m "ellipsefilled " ; dx ; " " ; dy #m "up" #m "goto " ; x ; " " ; y + sprite.height #m "down" #m "color " ; clr$ #m "backcolor " ; bclr$ #m "ellipsefilled " ; dx ; " " ; dy #m "up" end sub sub sprite.pie x,y,dx,dy,a,b,clr$,bclr$,size #m "goto " ; x ; " " ; y #m "size " ; size #m "down" #m "color black" #m "backcolor black" #m "piefilled " ; dx ; " " ; dy _ ; " " ; a ; " " ; b #m "up" #m "goto " ; x ; " " ; y + sprite.height #m "down" #m "color " ; clr$ #m "backcolor " ; bclr$ #m "piefilled " ; dx ; " " ; dy _ ; " " ; a ; " " ; b #m "up" end sub sub sprite.line x1,y1 , x2,y2 , clr$ , size #m "color black" #m "size " ; size #m "down" #m "line " ; x1 ; " " ; y1 _ ; " " ; x2 ; " " ; y2 #m "up" #m "color " ; clr$ #m "down" #m "line " ; x1 ; " " ; y1 + sprite.height _ ; " " ; x2 ; " " ; y2 + sprite.height #m "up" end sub sub sprite.getbmp bmp$ #m "getbmp " ; bmp$ ; " 0 0 " _ ; sprite.width ; " " ; sprite.height * 2 end sub ''end sprite_draw module function rand.int( h ) rand.int = int( rnd(0) * ( h + 1 ) ) end function sub sprite3d.add no , bmp$ #m "addsprite spr" ; no ; " " ; bmp$ end sub sub sprite3d.xyz no , x , y , z s.x( no ) = x s.y( no ) = y s.z( no ) = z end sub function sprite3d.image$( no ) sprite3d.image$ = s.state$( no ) end function sub sprite3d.image no , bmp$ s.state$( no ) = bmp$ end sub function rad( deg ) rad = deg * pi / 180 end function function rgb$( r , g , b ) r = int( r ) and 255 g = int( g ) and 255 b = int( b ) and 255 rgb$ = str$( r ) ; " " ; g ; " " ; b end function function rainbow$( deg ) r = sin( rad( deg ) ) * 127 + 128 g = sin( rad( deg - 120 ) ) * 127 + 128 b = sin( rad( deg + 120 ) ) * 127 + 128 rainbow$ = rgb$( r , g , b ) end function
what is the error i make ?
|
|
|
Post by tsh73 on May 17, 2018 21:24:11 GMT
It dies with error
in
block. Adding PRINT in addSprites I see that there are 125 sprites But s.max is 400 Changing s.max in sort loop and draw loop to 125 made thing run.
|
|
|
Post by bluatigro on Aug 9, 2019 12:09:56 GMT
i m trying to use the inbuild sort function it dit not work
error : bmp 'red' not there my ellipse looks strange
rem : this only wil work in 2.0
WindowWidth = DisplayWidth WindowHeight = DisplayHeight global winx , winy , pi winx = WindowWidth winy = WindowHeight pi = atn( 1 ) * 4 global sprite.width , sprite.height , sprite.max global spr.x , spr.y , spr.z , spr.img spr.x = 0 spr.y = 1 spr.z = 2 spr.img = 3 sprite.max = 20 dim spr( sprite.max , 3 ) global anim$ anim$ = "black red green yellow blue pink cyan white" open "sprite 3d 2.0" for graphics as #m #m "trapclose [quit]" for i = 0 to sprite.max call sprite.clear 100 , 100 kl$ = word$( anim$ , ( i and 7 ) + 1 ) call sprite.ellipse 50 , 50 , 25 , 25 , "black" , kl$ , 5 #m "getbmp " ; kl$ ; " 0 0 " ; sprite.width ; " " ; sprite.height x = r( 0 - winx / 3 , winx / 3 ) y = r( 0 - winy / 3 , winy / 3 ) z = r( 0 - winx / 3 , winx / 3 ) call sprite3d.xyz i , x , y , z spr( i , spr.img ) = ( i and 7 ) + 1 #m "addsprite spr" ; i ; " " ; anim$ next i timer 40 , [timer.tick] wait [timer.tick] scan for i = 0 to sprite.max call get.sprite3d.xyz i , x , y , z call rotate x , z , 5 call sprite3d.xyz i , x , y , z next i call drawallsprites3d wait [quit] close #m end function rad( deg ) rad = deg * pi / 180 end function sub rotate byref k , byref l , deg s = sin( rad( deg ) ) c = cos( rad( deg ) ) hk = k * c - l * s hl = k * s + l * c k = hk l = hl end sub function r( l , h ) r = int( rnd(0) * ( h - l + 1 ) ) + l end function sub drawallsprites3d sort spr() , 0 , sprite.max , spr.z for i = 0 to sprite.max #m "spriteimage spr" ; i ; " " ; word$( anim$ , spr( i , spr.img ) ) #m "spritexy spr" ; i _ ; " " ; int( winx / 2 + spr( i , spr.x ) ) _ ; " " ; int( winy / 2 - spr( i , spr.y ) ) next i #m "drawsprites" end sub sub sprite3d.xyz no , x , y , z spr( no , spr.x ) = x spr( no , spr.y ) = y spr( no , spr.z ) = z end sub sub get.sprite3d.xyz no , byref x , byref y , byref z x = spr( no , spr.x ) y = spr( no , spr.y ) z = spr( no , spr.z ) end sub sub sprite.clear x , y #m "fill white" #m "goto 0 " ; y + 1 #m "color black" #m "backcolor black" #m "down" #m "boxfilled " ; x ; " " ; y * 2 #m "up" sprite.width = x sprite.height = y end sub sub sprite.ellipse x , y , rx , ry , kl$ , bkl$ , size #m "goto " ; x ; " " ; y #m "color black" #m "backcolor black" #m "size " ; size #m "down" #m "ellipsefilled " ; rx ; " " ; ry #m "up" #m "color " ; kl$ #m "backcolor " ; bkl$ #m "down" #m "ellipsefilled " ; rx ; " " ; ry + sprite.height #m "up" end sub
|
|
|
Post by Rod on Aug 9, 2019 12:41:53 GMT
I changes anim$ to kl$ in the addsprite line and I added a timer 0. I also added print to show that the sort seems to be working.
WindowWidth = DisplayWidth WindowHeight = DisplayHeight global winx , winy , pi winx = WindowWidth winy = WindowHeight pi = atn( 1 ) * 4 global sprite.width , sprite.height , sprite.max global spr.x , spr.y , spr.z , spr.img spr.x = 0 spr.y = 1 spr.z = 2 spr.img = 3 sprite.max = 20 dim spr( sprite.max , 3 ) global anim$ anim$ = "black red green yellow blue pink cyan white" open "sprite 3d 2.0" for graphics as #m #m "trapclose [quit]" for i = 0 to sprite.max call sprite.clear 100 , 100 kl$ = word$( anim$ , ( i and 7 ) + 1 ) call sprite.ellipse 50 , 50 , 25 , 25 , "black" , kl$ , 5 #m "getbmp " ; kl$ ; " 0 0 " ; sprite.width ; " " ; sprite.height x = r( 0 - winx / 3 , winx / 3 ) y = r( 0 - winy / 3 , winy / 3 ) z = r( 0 - winx / 3 , winx / 3 ) call sprite3d.xyz i , x , y , z spr( i , spr.img ) = ( i and 7 ) + 1 #m "addsprite spr" ; i ; " " ; kl$ next i timer 40 , [timer.tick] wait [timer.tick] timer 0 scan for i = 0 to sprite.max call get.sprite3d.xyz i , x , y , z call rotate x , z , 5 call sprite3d.xyz i , x , y , z next i call drawallsprites3d wait [quit] close #m end function rad( deg ) rad = deg * pi / 180 end function sub rotate byref k , byref l , deg s = sin( rad( deg ) ) c = cos( rad( deg ) ) hk = k * c - l * s hl = k * s + l * c k = hk l = hl end sub function r( l , h ) r = int( rnd(0) * ( h - l + 1 ) ) + l end function sub drawallsprites3d for i=0 to sprite.max print i,spr(i,spr.z) next print sort spr() , 0 , sprite.max , spr.z for i=0 to sprite.max print i,spr(i,spr.z) next for i = 0 to sprite.max #m "spriteimage spr" ; i ; " " ; word$( anim$ , spr( i , spr.img ) ) #m "spritexy spr" ; i _ ; " " ; int( winx / 2 + spr( i , spr.x ) ) _ ; " " ; int( winy / 2 - spr( i , spr.y ) ) next i #m "drawsprites" end sub sub sprite3d.xyz no , x , y , z spr( no , spr.x ) = x spr( no , spr.y ) = y spr( no , spr.z ) = z end sub sub get.sprite3d.xyz no , byref x , byref y , byref z x = spr( no , spr.x ) y = spr( no , spr.y ) z = spr( no , spr.z ) end sub sub sprite.clear x , y #m "fill white" #m "goto 0 " ; y + 1 #m "color black" #m "backcolor black" #m "down" #m "boxfilled " ; x ; " " ; y * 2 #m "up" sprite.width = x sprite.height = y end sub sub sprite.ellipse x , y , rx , ry , kl$ , bkl$ , size #m "goto " ; x ; " " ; y #m "color black" #m "backcolor black" #m "size " ; size #m "down" #m "ellipsefilled " ; rx ; " " ; ry #m "up" #m "color " ; kl$ #m "backcolor " ; bkl$ #m "down" #m "ellipsefilled " ; rx ; " " ; ry + sprite.height #m "up" end sub
|
|
|
Post by bluatigro on Aug 14, 2019 10:20:28 GMT
update : got it good now
WindowWidth = DisplayWidth WindowHeight = DisplayHeight global winx , winy , pi winx = WindowWidth winy = WindowHeight pi = atn( 1 ) * 4 global sprite.width , sprite.height , sprite.max global spr.x , spr.y , spr.z , spr.img spr.x = 0 spr.y = 1 spr.z = 2 spr.img = 3 sprite.max = 20 dim spr( sprite.max , 3 ) global anim$ anim$ = "black red green yellow blue pink cyan white" nomainwin open "sprite 3d 2.0" for graphics as #m #m "trapclose [quit]" for i = 1 to 8 call sprite.clear 100 , 100 kl$ = word$( anim$ , i ) call sprite.ellipse 50 , 50 , 90 , 90 , "black" , kl$ , 5 #m "getbmp " ; kl$ ; " 0 0 " ; sprite.width ; " " ; sprite.height * 2 next i for i = 0 to sprite.max x = r( 0 - winx / 3 , winx / 3 ) y = r( 0 - winy / 3 , winy / 3 ) z = r( 0 - winx / 3 , winx / 3 ) call sprite3d.xyz i , x , y , z spr( i , spr.img ) = r( 2 , 8 ) #m "addsprite spr" ; i ; " " ; anim$ next i #m "fill lightgray" #m "getbmp bmp 0 0 1 1" #m "background bmp" timer 40 , [timer.tick] wait [timer.tick] scan for i = 0 to sprite.max call get.sprite3d.xyz i , x , y , z call rotate x , z , 1 call sprite3d.xyz i , x , y , z next i call drawallsprites3d wait [quit] close #m end function rad( deg ) rad = deg * pi / 180 end function sub rotate byref k , byref l , deg s = sin( rad( deg ) ) c = cos( rad( deg ) ) hk = k * c - l * s hl = k * s + l * c k = hk l = hl end sub function r( l , h ) r = int( rnd(0) * ( h - l + 1 ) ) + l end function sub drawallsprites3d sort spr() , 0 , sprite.max , spr.z for i = 0 to sprite.max #m "spriteimage spr" ; i ; " " ; word$( anim$ , spr( i , spr.img ) ) #m "spritexy spr" ; i _ ; " " ; int( winx / 2 + spr( i , spr.x ) ) _ ; " " ; int( winy / 2 - spr( i , spr.y ) ) next i #m "drawsprites" end sub sub sprite3d.xyz no , x , y , z spr( no , spr.x ) = x spr( no , spr.y ) = y spr( no , spr.z ) = z end sub sub get.sprite3d.xyz no , byref x , byref y , byref z x = spr( no , spr.x ) y = spr( no , spr.y ) z = spr( no , spr.z ) end sub sub sprite.clear x , y #m "fill white" #m "goto 0 " ; y + 2 #m "color black" #m "backcolor black" #m "down" #m "boxfilled " ; x ; " " ; y * 2 #m "up" sprite.width = x sprite.height = y end sub sub sprite.ellipse x , y , rx , ry , kl$ , bkl$ , size #m "goto " ; x ; " " ; y #m "color black" #m "backcolor black" #m "size " ; size #m "down" #m "ellipsefilled " ; rx ; " " ; ry #m "up" #m "goto " ; x ; " " ; y + sprite.height #m "color " ; kl$ #m "backcolor " ; bkl$ #m "down" #m "ellipsefilled " ; rx ; " " ; ry #m "up" end sub
|
|
|
Post by bluatigro on Aug 14, 2019 10:42:00 GMT
update : now in perspective
WindowWidth = DisplayWidth WindowHeight = DisplayHeight global winx , winy , pi winx = WindowWidth winy = WindowHeight pi = atn( 1 ) * 4 global sprite.width , sprite.height , sprite.max global spr.x , spr.y , spr.z , spr.img spr.x = 0 spr.y = 1 spr.z = 2 spr.img = 3 sprite.max = 30 dim spr( sprite.max , 3 ) global anim$ anim$ = "black red green yellow blue pink cyan white" nomainwin open "sprite 3d 2.0" for graphics as #m #m "trapclose [quit]" for i = 1 to 8 call sprite.clear 100 , 100 kl$ = word$( anim$ , i ) call sprite.ellipse 50 , 50 , 90 , 90 , "black" , kl$ , 5 #m "getbmp " ; kl$ ; " 0 0 " ; sprite.width ; " " ; sprite.height * 2 next i for i = 0 to sprite.max x = r( 0 - winx / 3 , winx / 3 ) y = r( 0 - winy / 3 , winy / 3 ) z = r( 0 - winx / 3 , winx / 3 ) call sprite3d.xyz i , x , y , z spr( i , spr.img ) = r( 2 , 8 ) #m "addsprite spr" ; i ; " " ; anim$ next i #m "fill lightgray" #m "getbmp bmp 0 0 1 1" #m "background bmp" timer 40 , [timer.tick] wait [timer.tick] scan for i = 0 to sprite.max call get.sprite3d.xyz i , x , y , z call rotate x , z , 1 call sprite3d.xyz i , x , y , z next i call drawallsprites3d wait [quit] close #m end function rad( deg ) rad = deg * pi / 180 end function sub rotate byref k , byref l , deg s = sin( rad( deg ) ) c = cos( rad( deg ) ) hk = k * c - l * s hl = k * s + l * c k = hk l = hl end sub function r( l , h ) r = int( rnd(0) * ( h - l + 1 ) ) + l end function sub drawallsprites3d sort spr() , 0 , sprite.max , spr.z for i = 0 to sprite.max #m "spriteimage spr" ; i ; " " ; word$( anim$ , spr( i , spr.img ) ) call get.sprite3d.xyz i , x , y , z sx = winx / 2 + x / ( z + 1000 ) * 1000 sy = winy / 2 - y / ( z + 1000 ) * 1000 d = 100 / 2 / ( z + 1000 ) * 1000 #m "spritetoback spr" ; i #m "spritescale spr" ; i ; " " ; int( d ) #m "spritexy spr" ; i ; " " ; int( sx - d ) ; " " ; int( sy - d ) next i #m "drawsprites" end sub sub sprite3d.xyz no , x , y , z spr( no , spr.x ) = x spr( no , spr.y ) = y spr( no , spr.z ) = z end sub sub get.sprite3d.xyz no , byref x , byref y , byref z x = spr( no , spr.x ) y = spr( no , spr.y ) z = spr( no , spr.z ) end sub sub sprite.clear x , y #m "fill white" #m "goto 0 " ; y + 2 #m "color black" #m "backcolor black" #m "down" #m "boxfilled " ; x ; " " ; y * 2 #m "up" sprite.width = x sprite.height = y end sub sub sprite.ellipse x , y , rx , ry , kl$ , bkl$ , size #m "goto " ; x ; " " ; y #m "color black" #m "backcolor black" #m "size " ; size #m "down" #m "ellipsefilled " ; rx ; " " ; ry #m "up" #m "goto " ; x ; " " ; y + sprite.height #m "color " ; kl$ #m "backcolor " ; bkl$ #m "down" #m "ellipsefilled " ; rx ; " " ; ry #m "up" end sub
|
|
|
Post by tsh73 on Aug 14, 2019 11:07:55 GMT
Great job. Perspective effect is nice.
|
|
|
Post by bluatigro on Aug 16, 2019 7:57:30 GMT
try at boids
error : the parts fly away
WindowWidth = DisplayWidth WindowHeight = DisplayHeight global winx , winy , pi winx = WindowWidth winy = WindowHeight pi = atn( 1 ) * 4 global sprite.width , sprite.height , sprite.max global spr.x , spr.y , spr.z , spr.img global spr.xas , spr.yas , spr.zas global spr.tel , spr.state , frame spr.x = 0 spr.y = 1 spr.z = 2 spr.img = 3 spr.xas = 4 spr.yas = 5 spr.zas = 6 spr.state = 7 spr.tel = 8 sprite.max = 20 dim spr( sprite.max , 8 ) global anim$ , qd$ anim$ = "lightgray black red green yellow blue pink cyan white" qd$ = "90 10 10 10 10 10 10 10 10 10 10" nomainwin open "sprite 3d 2.0" for graphics as #m #m "trapclose [quit]" for i = 1 to 9 call sprite.clear 100 , 100 kl$ = word$( anim$ , i ) d = val( word$( qd$ , i ) ) call sprite.ellipse 50 , 50 , d , d , kl$ , kl$ , 5 #m "getbmp " ; kl$ ; " 0 0 " ; sprite.width ; " " ; sprite.height * 2 next i for i = 0 to sprite.max spr( i , spr.img ) = ( 1 mod 10 ) + 1 #m "addsprite spr" ; i ; " " ; anim$ next i #m "fill blue" #m "getbmp bmp 0 0 1 1" #m "background bmp" timer 40 , [timer.tick] wait [timer.tick] scan for i = 0 to sprite.max - 10 step 10 call sprite3d.angles i , 0 , frame , 0 call sprite3d.link i + 1 , 100 , 0 , 0 , i , 3 call sprite3d.link i + 2 , 0 , 100 , 0 , i , 4 call sprite3d.link i + 3 , 0 , 0 , 100 , i , 5 call sprite3d.link i + 4 , 0 , 10 , 110 , i , 5 call sprite3d.link i + 5 , 0 , -10 , 110 , i , 5 call sprite3d.link i + 6 , -100 , 0 , 0 , i , 6 call sprite3d.link i + 7 , 0 , -100 , 0 , i , 7 call sprite3d.link i + 8 , -10 , 0 , -100 , i , 2 call sprite3d.link i + 9 , 10 , 0 , -100 , i , 2 next i call drawallsprites3d frame = frame + 1 wait [quit] close #m end function rad( deg ) rad = deg * pi / 180 end function sub rotate byref k , byref l , deg s = sin( rad( deg ) ) c = cos( rad( deg ) ) hk = k * c - l * s hl = k * s + l * c k = hk l = hl end sub function r( l , h ) r = int( rnd(0) * ( h - l + 1 ) ) + l end function sub drawallsprites3d sort spr() , 0 , sprite.max , spr.z for i = 0 to sprite.max #m "spriteimage spr" ; i ; " " ; word$( anim$ , spr( i , spr.img ) ) call get.sprite3d.xyz i , x , y , z sx = winx / 2 + x / ( z + 1000 ) * 1000 sy = winy / 2 - y / ( z + 1000 ) * 1000 d = 100 / 2 / ( z + 1000 ) * 1000 #m "spritetofront spr" ; i #m "spritescale spr" ; i ; " " ; int( d ) #m "spritexy spr" ; i ; " " ; sx - d ; " " ; sy - d next i #m "drawsprites" end sub sub sprite3d.xyz no , x , y , z spr( no , spr.x ) = x spr( no , spr.y ) = y spr( no , spr.z ) = z end sub sub get.sprite3d.xyz no , byref x , byref y , byref z x = spr( no , spr.x ) y = spr( no , spr.y ) z = spr( no , spr.z ) end sub sub sprite3d.angles no , x , y , z spr( no , spr.xas ) = x spr( no , spr.yas ) = y spr( no , spr.zas ) = z end sub sub get.sprite3d.angles no , byref x , byref y , byref z x = spr( no , spr.xas ) y = spr( no , spr.yas ) z = spr( no , spr.zas ) end sub sub sprite3d.link no , dx , dy , dz , p , kl if no = p then exit sub call get.sprite3d.xyz p , x , y , z call get.sprite3d.angles p , xas , yas , zas call rotate dx , dz , yas call rotate dy , dz , xas call rotate dx , dy , zas call sprite3d.xyz no , x + dx , y + dy , z + dz spr( no , spr.img ) = kl end sub sub boid3d.move no , dx , dy , dz call get.sprite3d.xyz no , x , y , z call get.sprite3d.angles no , xas , yas , zas call rotate dx , dz , yas call rotate dy , dz , xas call rotate dx , dy , zas call sprite3d.xyz no , x + dx , y + dy , z + dz end sub sub sprite.clear x , y #m "fill white" #m "goto 0 " ; y + 2 #m "color black" #m "backcolor black" #m "down" #m "boxfilled " ; x ; " " ; y * 2 #m "up" sprite.width = x sprite.height = y end sub sub sprite.ellipse x , y , rx , ry , kl$ , bkl$ , size #m "goto " ; x ; " " ; y #m "color black" #m "backcolor black" #m "size " ; size #m "down" #m "ellipsefilled " ; rx ; " " ; ry #m "up" #m "goto " ; x ; " " ; y + sprite.height #m "color " ; kl$ #m "backcolor " ; bkl$ #m "down" #m "ellipsefilled " ; rx ; " " ; ry #m "up" end sub
|
|
|
Post by bluatigro on Aug 16, 2019 10:41:09 GMT
update : 1 BOID !!
WindowWidth = DisplayWidth WindowHeight = DisplayHeight global winx , winy , pi winx = WindowWidth winy = WindowHeight pi = atn( 1 ) * 4 global sprite.width , sprite.height , sprite.max global spr.x , spr.y , spr.z , spr.img global spr.xas , spr.yas , spr.zas global spr.tel , spr.state , frame spr.x = 0 spr.y = 1 spr.z = 2 spr.img = 3 spr.xas = 4 spr.yas = 5 spr.zas = 6 spr.state = 7 spr.tel = 8 sprite.max = 20 dim spr( sprite.max , 8 ) global anim$ , qd$ anim$ = "darkgray lightgray black red green yellow blue pink cyan white" qd$ = "0 80 20 20 20 20 20 20 20 20 20 20" nomainwin open "sprite 3d 2.0" for graphics as #m #m "trapclose [quit]" for i = 1 to 10 call sprite.clear 100 , 100 kl$ = word$( anim$ , i ) d = val( word$( qd$ , i ) ) call sprite.ellipse 50 , 50 , d , d , "black" , kl$ , 5 #m "getbmp " ; kl$ ; " 0 0 " ; sprite.width ; " " ; sprite.height * 2 next i for i = 0 to sprite.max spr( i , spr.img ) = ( 1 mod 10 ) + 1 #m "addsprite spr" ; i ; " " ; anim$ next i #m "fill blue" #m "getbmp bmp 0 0 1 1" #m "background bmp" timer 40 , [timer.tick] wait [timer.tick] scan for i = 0 to sprite.max - 9 step 10 call sprite3d.angles i , 0 , frame , 0 call sprite3d.xyz i , 0 , 0 , 0 spr( i , spr.img ) = 2 call sprite3d.link i + 1 , 30 , 0 , 0 , i , 4 call sprite3d.link i + 2 , 0 , 30 , 0 , i , 5 call sprite3d.link i + 3 , 0 , 0 , 30 , i , 6 call sprite3d.link i + 4 , 0 , 5 , 33 , i , 6 call sprite3d.link i + 5 , 0 , -5 , 33 , i , 6 call sprite3d.link i + 6 , -30 , 0 , 0 , i , 7 call sprite3d.link i + 7 , 0 , -30 , 0 , i , 8 call sprite3d.link i + 8 , -6 , 0 , -30 , i , 3 call sprite3d.link i + 9 , 6 , 0 , -30 , i , 3 next i call drawallsprites3d frame = frame + 1 wait [quit] close #m end function rad( deg ) rad = deg * pi / 180 end function sub rotate byref k , byref l , deg s = sin( rad( deg ) ) c = cos( rad( deg ) ) hk = k * c - l * s hl = k * s + l * c k = hk l = hl end sub function r( l , h ) r = int( rnd(0) * ( h - l + 1 ) ) + l end function sub drawallsprites3d sort spr() , 0 , sprite.max , spr.z for i = 0 to sprite.max #m "spriteimage spr" ; i ; " " ; word$( anim$ , spr( i , spr.img ) ) call get.sprite3d.xyz i , x , y , z sx = winx / 2 + x / ( z + 1000 ) * 1000 sy = winy / 2 - y / ( z + 1000 ) * 1000 d = 100 / 2 / ( z + 1000 ) * 1000 #m "spritetofront spr" ; i #m "spritescale spr" ; i ; " " ; int( d ) #m "spritexy spr" ; i ; " " _ ; int( sx - d ) ; " " ; int( sy - d ) next i #m "drawsprites" end sub sub sprite3d.xyz no , x , y , z spr( no , spr.x ) = x spr( no , spr.y ) = y spr( no , spr.z ) = z end sub sub get.sprite3d.xyz no , byref x , byref y , byref z x = spr( no , spr.x ) y = spr( no , spr.y ) z = spr( no , spr.z ) end sub sub sprite3d.angles no , x , y , z spr( no , spr.xas ) = x spr( no , spr.yas ) = y spr( no , spr.zas ) = z end sub sub get.sprite3d.angles no , byref x , byref y , byref z x = spr( no , spr.xas ) y = spr( no , spr.yas ) z = spr( no , spr.zas ) end sub sub sprite3d.link no , dx , dy , dz , p , kl if no = p then exit sub call get.sprite3d.xyz p , x , y , z call get.sprite3d.angles p , xas , yas , zas call rotate dx , dz , yas call rotate dy , dz , xas call rotate dx , dy , zas call sprite3d.xyz no , x + dx , y + dy , z + dz spr( no , spr.img ) = kl end sub sub boid3d.move no , dx , dy , dz call get.sprite3d.xyz no , x , y , z call get.sprite3d.angles no , xas , yas , zas call rotate dx , dz , yas call rotate dy , dz , xas call rotate dx , dy , zas call sprite3d.xyz no , x + dx , y + dy , z + dz end sub sub sprite.clear x , y #m "fill white" #m "goto 0 " ; y + 2 #m "color black" #m "backcolor black" #m "down" #m "boxfilled " ; x ; " " ; y * 2 #m "up" sprite.width = x sprite.height = y end sub sub sprite.ellipse x , y , rx , ry , kl$ , bkl$ , size #m "goto " ; x ; " " ; y #m "color black" #m "backcolor black" #m "size " ; size #m "down" #m "ellipsefilled " ; rx ; " " ; ry #m "up" #m "goto " ; x ; " " ; y + sprite.height #m "color " ; kl$ #m "backcolor " ; bkl$ #m "down" #m "ellipsefilled " ; rx ; " " ; ry #m "up" end sub
|
|