Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
My own try at A*
#55
here's mine again, but with open/closed lists... hopefully this time it's easier to read :lol: :wink:

Code:
#include once "crt.bi"

type coord
    x as ubyte
    y as ubyte
end type
type node
    x as ubyte
    y as ubyte
    g as integer
    f as integer
    p as integer
end type

declare function timesvisited( byval x as integer, byval y as integer ) as byte
declare function outofbounds( byval x as integer, byval y as integer ) as byte
declare function onclosedlist( byref what as coord ) as byte
declare function removefromopenlist( byval idx as integer ) as byte
declare function addtopath( byval s as integer, byval x as ubyte, byval y as ubyte ) as byte
declare function onopenlist( byref what as coord ) as byte

redim preserve shared openlist( 0 ) as node, closedlist( 1 ) as coord, path( 1 ) as coord
dim as integer rx, ry, cx, cy, ex, ey, i

cls
dim shared as integer mx, my
read mx
read my
dim as ubyte room( mx * my )
for ry = 0 to my - 1
    for rx = 0 to mx - 1
        read room( rx + ry * mx )
        select case room( rx + ry * mx )
        case 1
            ? "|";
        case 2
            ? "@";
            cx = rx
            cy = ry
            path( 0 ).x = rx
            path( 0 ).y = ry
            closedlist( 0 ).x = rx
            closedlist( 0 ).y = ry
        case 3
            ? "*";
            ex = rx
            ey = ry
        case else
            ? " ";
        end select
    next
    ?
next

sleep

while cx <> ex or cy <> ey
    
    dim as integer max = 100, aye, x, y
    
    aye = 0
    
    for x = -1 to 1
        for y = -1 to 1 step 1 - ( x = 0 )
            
            dim as coord working
            working.x = cx + x
            working.y = cy + y
            
            if onclosedlist( working ) = 0 and onopenlist( working ) = 0 and room( cx + x + ( cy + y ) * mx ) <> 1 and room( cx + ( cy + y ) * mx ) <> 1 and room( cx + x + cy * mx ) <> 1 and outofbounds( cx + x, cy + y ) = 0 then
                
                openlist( ubound( openlist ) ).x = working.x
                openlist( ubound( openlist ) ).y = working.y
                
                openlist( ubound( openlist ) ).f = 10 * sqr( abs( x ) + abs( y ) ) + 10 * sqr( ( cx + x - ex ) ^ 2 + ( cy + y - ey ) ^ 2 )
                if openlist( ubound( openlist ) ).f > max then max = openlist( ubound( openlist ) ).f
                openlist( ubound( openlist ) ).p = ubound( path ) - 1
                
                redim preserve shared openlist( ubound( openlist ) + 1 )
                
            end if
            
        next
    next
    
    dim as integer lowest, lowestidx = 0
    lowest = max + 1
    for i = 0 to ubound( openlist ) - 1
        if openlist( i ).f < lowest and openlist( i ).f <> -1 then lowest = openlist( i ).f : lowestidx = i
    next
    
    locate cy + 1, cx + 1: ? " "
    
    addtopath( openlist( lowestidx ).p, openlist( lowestidx ).x, openlist( lowestidx ).y )
    
    if lowest <> max + 1 then
        cx = openlist( lowestidx ).x
        cy = openlist( lowestidx ).y
    end if
    
    locate cy + 1, cx + 1: ? "@"
    
    closedlist( ubound( closedlist ) ).x = cx
    closedlist( ubound( closedlist ) ).y = cy
    redim preserve shared closedlist( ubound( closedlist ) + 1 )
    
    removefromopenlist( lowestidx )
    
    if cx = ex and cy = ey then locate 9,9: ? "done!"
    
    sleep
    
wend

for i = 0 to ubound( path ) - 1
    locate path( i ).y + 1, path( i ).x + 1
    ? "*"
next

sleep

data 8,5
data 0,0,0,0,0,0,0,1
data 0,0,0,1,1,1,1,1
data 0,2,0,1,1,0,3,0
data 0,0,0,1,1,0,0,0
data 0,0,0,0,0,0,0,0

function outofbounds( byval x as integer, byval y as integer ) as byte
    
    return x < 0 or x > mx - 1 or y < 0 or y > my - 1
    
end function

function onclosedlist( byref what as coord ) as byte
    
    dim as integer i
    for i = 0 to ubound( closedlist ) - 1
        if memcmp( @closedlist( i ), @what, len( coord ) ) = 0 then return -1
    next
    return 0
    
end function

function removefromopenlist( byval idx as integer ) as byte
    
    if idx > ubound( openlist ) then return 0
    for i = idx to ubound( openlist ) - 1
        openlist( i ) = openlist( i + 1 )
    next
    redim preserve openlist( ubound( openlist ) - 1 )
    
    return -1
    
end function

function addtopath( byval s as integer, byval x as ubyte, byval y as ubyte ) as byte
    
    path( s + 1 ).x = x
    path( s + 1 ).y = y
    
    redim preserve path( s + 2 )
    
    return -1
    
end function

function onopenlist( byref what as coord ) as byte
    
    dim as integer i
    for i = 0 to ubound( openlist ) - 1
        if memcmp( @openlist( i ), @what, len( coord ) ) = 0 then return -1
    next
    return 0
    
end function
ttp://m0n573r.afraid.org/
Quote:quote: "<+whtiger> you... you don't know which way the earth spins?" ... see... stupidity leads to reverence, reverence to shakiness, shakiness to... the dark side
...phear
Reply


Messages In This Thread
My own try at A* - by Torahteen - 06-28-2005, 07:55 AM
My own try at A* - by rpgfan3233 - 06-28-2005, 08:02 AM
My own try at A* - by Torahteen - 06-28-2005, 08:43 AM
My own try at A* - by Torahteen - 06-28-2005, 07:40 PM
My own try at A* - by Torahteen - 06-29-2005, 04:18 AM
My own try at A* - by Torahteen - 06-29-2005, 04:20 AM
My own try at A* - by Neo - 06-29-2005, 04:22 AM
My own try at A* - by Torahteen - 06-29-2005, 05:56 AM
My own try at A* - by TheBlueKeyboard - 06-29-2005, 06:14 PM
My own try at A* - by whitetiger0990 - 06-29-2005, 07:01 PM
My own try at A* - by Torahteen - 06-29-2005, 11:18 PM
My own try at A* - by Torahteen - 06-29-2005, 11:22 PM
My own try at A* - by DrV - 06-29-2005, 11:24 PM
My own try at A* - by Torahteen - 06-29-2005, 11:32 PM
My own try at A* - by DrV - 06-29-2005, 11:44 PM
My own try at A* - by Torahteen - 06-30-2005, 12:01 AM
My own try at A* - by DrV - 06-30-2005, 12:14 AM
My own try at A* - by Torahteen - 06-30-2005, 12:30 AM
My own try at A* - by DrV - 06-30-2005, 01:00 AM
My own try at A* - by Torahteen - 06-30-2005, 01:16 AM
My own try at A* - by DrV - 06-30-2005, 01:18 AM
My own try at A* - by Torahteen - 06-30-2005, 01:24 AM
My own try at A* - by DrV - 06-30-2005, 01:31 AM
My own try at A* - by rpgfan3233 - 06-30-2005, 02:28 AM
My own try at A* - by Torahteen - 06-30-2005, 02:53 AM
My own try at A* - by rpgfan3233 - 06-30-2005, 03:14 AM
My own try at A* - by Torahteen - 06-30-2005, 04:08 AM
My own try at A* - by Torahteen - 06-30-2005, 04:19 AM
My own try at A* - by Torahteen - 06-30-2005, 04:39 AM
My own try at A* - by Torahteen - 06-30-2005, 04:51 AM
My own try at A* - by dumbledore - 06-30-2005, 11:18 AM
My own try at A* - by rpgfan3233 - 06-30-2005, 11:41 AM
My own try at A* - by Torahteen - 06-30-2005, 07:29 PM
My own try at A* - by Torahteen - 06-30-2005, 07:39 PM
My own try at A* - by Torahteen - 06-30-2005, 08:23 PM
My own try at A* - by dumbledore - 06-30-2005, 11:46 PM
My own try at A* - by dumbledore - 07-01-2005, 01:13 AM
My own try at A* - by Torahteen - 07-01-2005, 01:15 AM
My own try at A* - by rpgfan3233 - 07-01-2005, 01:54 AM
My own try at A* - by Torahteen - 07-01-2005, 02:22 AM
My own try at A* - by Torahteen - 07-01-2005, 02:30 AM
My own try at A* - by dumbledore - 07-01-2005, 02:53 AM
My own try at A* - by Torahteen - 07-01-2005, 03:05 AM
My own try at A* - by rpgfan3233 - 07-01-2005, 03:12 AM
My own try at A* - by Torahteen - 07-01-2005, 03:59 AM
My own try at A* - by Neo - 07-01-2005, 03:59 AM
My own try at A* - by Torahteen - 07-01-2005, 04:17 AM
My own try at A* - by Torahteen - 07-01-2005, 09:19 PM
My own try at A* - by dumbledore - 07-02-2005, 01:07 AM
My own try at A* - by Torahteen - 07-02-2005, 01:21 AM
My own try at A* - by rpgfan3233 - 07-02-2005, 02:03 AM
My own try at A* - by dumbledore - 07-02-2005, 02:11 AM
My own try at A* - by dumbledore - 07-02-2005, 02:23 AM
My own try at A* - by Torahteen - 07-02-2005, 02:38 AM
My own try at A* - by dumbledore - 07-02-2005, 03:06 AM
My own try at A* - by dumbledore - 07-02-2005, 03:47 AM
My own try at A* - by Torahteen - 07-02-2005, 04:18 AM
My own try at A* - by rpgfan3233 - 07-02-2005, 04:25 AM
My own try at A* - by dumbledore - 07-02-2005, 04:33 AM
My own try at A* - by rpgfan3233 - 07-02-2005, 04:45 AM
My own try at A* - by Torahteen - 07-02-2005, 04:45 AM
My own try at A* - by rpgfan3233 - 07-02-2005, 04:46 AM
My own try at A* - by Dr_Davenstein - 07-02-2005, 05:05 AM
My own try at A* - by dumbledore - 07-02-2005, 06:31 AM
My own try at A* - by dumbledore - 07-02-2005, 06:42 AM
My own try at A* - by rpgfan3233 - 07-02-2005, 06:43 AM
My own try at A* - by dumbledore - 07-02-2005, 06:46 AM
My own try at A* - by rpgfan3233 - 07-02-2005, 06:49 AM
My own try at A* - by dumbledore - 07-02-2005, 06:58 AM
My own try at A* - by rpgfan3233 - 07-02-2005, 08:58 AM
My own try at A* - by Torahteen - 07-02-2005, 09:40 AM
My own try at A* - by rpgfan3233 - 07-03-2005, 02:09 AM
My own try at A* - by Torahteen - 07-03-2005, 02:25 AM
My own try at A* - by dumbledore - 07-03-2005, 04:44 AM
My own try at A* - by rpgfan3233 - 07-03-2005, 08:13 AM
My own try at A* - by dumbledore - 07-03-2005, 08:54 AM
My own try at A* - by Dr_Davenstein - 07-03-2005, 09:03 AM
My own try at A* - by Torahteen - 07-03-2005, 09:08 AM
My own try at A* - by rpgfan3233 - 07-03-2005, 09:36 AM
My own try at A* - by Torahteen - 07-03-2005, 09:43 AM
My own try at A* - by Dr_Davenstein - 07-03-2005, 10:23 AM
My own try at A* - by rpgfan3233 - 07-03-2005, 10:25 AM
My own try at A* - by rpgfan3233 - 07-03-2005, 10:30 AM
My own try at A* - by Dr_Davenstein - 07-03-2005, 10:42 AM
My own try at A* - by dumbledore - 07-03-2005, 11:29 AM
My own try at A* - by rpgfan3233 - 07-04-2005, 01:33 AM
My own try at A* - by Torahteen - 07-04-2005, 04:38 AM
My own try at A* - by dumbledore - 07-04-2005, 06:44 AM
My own try at A* - by dumbledore - 07-04-2005, 06:47 AM
My own try at A* - by rpgfan3233 - 07-04-2005, 08:58 AM
My own try at A* - by Torahteen - 07-05-2005, 06:22 AM
My own try at A* - by Torahteen - 07-05-2005, 06:36 PM
My own try at A* - by rpgfan3233 - 07-05-2005, 10:43 PM
My own try at A* - by Torahteen - 07-06-2005, 07:40 AM
My own try at A* - by dumbledore - 07-06-2005, 10:56 AM
My own try at A* - by rpgfan3233 - 07-06-2005, 11:19 AM

Forum Jump:


Users browsing this thread: 1 Guest(s)