Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
My own try at A*
#31
mua ha ha ha.... yours is really complicated. here's my modified a* algo, from the description i read the normal a* shouldn't be able to find its way through what i gave it without modification like i did...
Code:
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

cls
type coord
    x as ubyte
    y as ubyte
end type
redim preserve shared badnodes( 0 ) as coord
dim as integer working( 7 )
dim as integer x, y, cx, cy, ex, ey, i
dim shared as integer mx, my
read mx
read my
dim as ubyte room( mx * my )
for y = 0 to my - 1
    for x = 0 to mx - 1
        read room( x + y * mx )
        select case room( x + y * mx )
        case 1
            ? "|";
        case 2
            ? "@";
            cx = x
            cy = y
        case 3
            ? "*";
            ex = x
            ey = y
        case else
            ? " ";
        end select
    next
    ?
next

while cx <> ex or cy <> ey
    
    dim as integer max = 100
    
    working( 0 ) = 10 + sqr( ( cx - ex ) ^ 2 + ( cy - 1 - ey ) ^ 2 ) * 10 + timesvisited( cx, cy - 1 )
    if room( cx + ( cy - 1 ) * mx ) = 1 or outofbounds( cx, cy - 1 ) then working( 0 ) = -1
    max = working( 0 )
    
    working( 1 ) = 14 + sqr( ( cx + 1 - ex ) ^ 2 + ( cy - 1 - ey ) ^ 2 ) * 10 + timesvisited( cx + 1, cy - 1 )
    if room( cx + 1 + ( cy - 1 ) * mx ) = 1 or room( cx + ( cy - 1 ) * mx ) = 1 or room( cx + 1 + cy * mx ) = 1 or outofbounds( cx + 1, cy - 1 ) then working( 1 ) = -1
    if working( 1 ) > max then max = working( 1 )
    
    working( 2 ) = 10 + sqr( ( cx + 1 - ex ) ^ 2 + ( cy - ey ) ^ 2 ) * 10 + timesvisited( cx + 1, cy )
    if room( cx + 1 + cy * mx ) = 1 or outofbounds( cx + 1, cy ) then working( 2 ) = -1
    if working( 2 ) > max then max = working( 2 )
    
    working( 3 ) = 14 + sqr( ( cx + 1 - ex ) ^ 2 + ( cy + 1 - ey ) ^ 2 ) * 10 + timesvisited( cx + 1, cy + 1 )
    if room( cx + 1 + ( cy + 1 ) * mx ) = 1 or room( cx + ( cy + 1 ) * mx ) = 1 or room( cx + 1 + cy * mx ) = 1 or outofbounds( cx + 1, cy + 1 ) then working( 3 ) = -1
    if working( 3 ) > max then max = working( 3 )
    
    working( 4 ) = 10 + sqr( ( cx - ex ) ^ 2 + ( cy + 1 - ey ) ^ 2 ) * 10 + timesvisited( cx, cy + 1 )
    if room( cx + ( cy + 1 ) * mx ) = 1 or outofbounds( cx, cy + 1 ) then working( 4 ) = -1
    if working( 4 ) > max then max = working( 4 )
    
    working( 5 ) = 14 + sqr( ( cx - 1 - ex ) ^ 2 + ( cy + 1 - ey ) ^ 2 ) * 10 + timesvisited( cx - 1, cy + 1 )
    if room( cx - 1 + ( cy + 1 ) * mx ) = 1 or room( cx + ( cy + 1 ) * mx ) = 1 or room( cx - 1 + cy * mx ) = 1 or outofbounds( cx - 1, cy + 1 ) then working( 5 ) = -1
    if working( 5 ) > max then max = working( 5 )
    
    working( 6 ) = 10 + sqr( ( cx - 1 - ex ) ^ 2 + ( cy - ey ) ^ 2 ) * 10 + timesvisited( cx - 1, cy )
    if room( cx - 1 + cy * mx ) = 1 or outofbounds( cx - 1, cy ) then working( 6 ) = -1
    if working( 6 ) > max then max = working( 6 )
    
    working( 7 ) = 14 + sqr( ( cx - 1 - ex ) ^ 2 + ( cy - 1 - ey ) ^ 2 ) * 10 + timesvisited( cx - 1, cy - 1 )
    if room( cx - 1 + ( cy - 1 ) * mx ) = 1 or room( cx + ( cy - 1 ) * mx ) = 1 or room( cx - 1 + cy * mx ) = 1 or outofbounds( cx - 1, cy - 1 ) then working( 7 ) = -1
    if working( 7 ) > max then max = working( 7 )
    
    dim as integer lowest, lowestidx = 0
    lowest = max + 1
    for i = 0 to 7
        if working( i ) < lowest and working( i ) <> -1 then lowest = working( i ) : lowestidx = i
    next
    
    locate cy + 1, cx + 1: ? " "
    
    if lowest <> max + 1 then
        select case lowestidx
        case 0
            cy -= 1
        case 1
            cx += 1
            cy -= 1
        case 2
            cx += 1
        case 3
            cx += 1
            cy += 1
        case 4
            cy += 1
        case 5
            cx -= 1
            cy += 1
        case 6
            cx -= 1
        case 7
            cx -= 1
            cy -= 1
        case else
            ? "error":sleep:end
        end select
    end if
    
    locate cy + 1, cx + 1: ? "!"
    
    badnodes( ubound( badnodes ) ).x = cx
    badnodes( ubound( badnodes ) ).y = cy
    redim preserve shared badnodes( ubound( badnodes ) + 1 )
    
    if cx = ex and cy = ey then locate 9,9: ? "done!"
    
    sleep
    
wend

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 timesvisited( byval x as integer, byval y as integer ) as byte
    
    dim as integer i, num = 0
    for i = 0 to ubound( badnodes ) - 1
        if badnodes( i ).x = x and badnodes( i ).y = y then num += 1
    next
    return num * 10
    
end function

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

[edit] fixed a couple of dimensioning problems, should be good with any map now.
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: 4 Guest(s)