Programming C, C++, Java, PHP, Ruby, Turing, VB
Computer Science Canada 
Programming C, C++, Java, PHP, Ruby, Turing, VB  

Username:   Password: 
 RegisterRegister   
 Simple Pacman AI
Index -> Programming, Turing -> Turing Help
View previous topic Printable versionDownload TopicSubscribe to this topicPrivate MessagesRefresh page View next topic
Author Message
Artimes




PostPosted: Thu Nov 04, 2004 7:34 pm   Post subject: Simple Pacman AI

I'm making a Pac-Man game and I need some simple AI for my ghosts... This is what I have

code:

 if (superpacman = 0) then
        Pic.Draw (picBlinky1, xBlinky - 10, yBlinky - 10, picMerge)
        if (dirBlinky1 = 1) then
            Pic.Draw (picBlinky3, xBlinky - 5, yBlinky + 1, picMerge)
        elsif (dirBlinky1 = 2) then
            Pic.Draw (picBlinky4, xBlinky - 5, yBlinky + 1, picMerge)
        elsif (dirBlinky1 = 3) then
            Pic.Draw (picBlinky5, xBlinky - 5, yBlinky + 1, picMerge)
        elsif (dirBlinky1 = 4) then
            Pic.Draw (picBlinky6, xBlinky - 5, yBlinky + 1, picMerge)
        end if
    else
        Pic.Draw (picBlinky2, xBlinky - 10, yBlinky - 10, picMerge)
    end if

    if (dirBlinky1 = 1) and (findTile (xBlinky, yBlinky + 10) > 2) then
        dirBlinky1 := Rand.Int (1, 4)
    elsif (dirBlinky1 = 2) and (findTile (xBlinky + 10, yBlinky) > 2) then
        dirBlinky1 := Rand.Int (1, 4)
    elsif (dirBlinky1 = 3) and (findTile (xBlinky, yBlinky - 10) > 2) then
        dirBlinky1 := Rand.Int (1, 4)
    elsif (dirBlinky1 = 4) and (findTile (xBlinky - 10, yBlinky) > 2) then
        dirBlinky1 := Rand.Int (1, 4)
    elsif (dirBlinky1 = 5) then
        dirBlinky1 := Rand.Int (1, 4)
    end if

    dirBlinky2 := false
    if (disBlinky = 0) and (dirBlinky2 = false) then
        if (dirBlinky1 = 1) and (findTile (xBlinky + 20, yBlinky) <= 2) or (findTile (xBlinky + 20, yBlinky) = 12) then
            dirBlinky1 := Rand.Int (1, 2)
            if (dirBlinky1 = 2) then
                dirBlinky1 := 2
            else
                dirBlinky1 := 1
            end if
            dirBlinky2 := true
            disBlinky := 0
        elsif (dirBlinky1 = 1) and (findTile (xBlinky - 20, yBlinky) <= 2) or (findTile (xBlinky - 20, yBlinky) = 12) then
            dirBlinky1 := Rand.Int (1, 2)
            if (dirBlinky1 = 2) then
                dirBlinky1 := 4
            else
                dirBlinky1 := 1
            end if
            dirBlinky2 := true
            disBlinky := 0
        elsif (dirBlinky1 = 2) and (findTile (xBlinky, yBlinky + 20) <= 2) or (findTile (xBlinky, yBlinky + 20) = 12) then
            dirBlinky1 := Rand.Int (1, 2)
            if (dirBlinky1 = 2) then
                dirBlinky1 := 1
            else
                dirBlinky1 := 2
            end if
            dirBlinky2 := true
            disBlinky := 0
        elsif (dirBlinky1 = 2) and (findTile (xBlinky, yBlinky - 20) <= 2) or (findTile (xBlinky, yBlinky - 20) = 12) then
            dirBlinky1 := Rand.Int (1, 2)
            if (dirBlinky1 = 2) then
                dirBlinky1 := 3
            else
                dirBlinky1 := 2
            end if
            dirBlinky2 := true
            disBlinky := 0
        elsif (dirBlinky1 = 3) and (findTile (xBlinky + 20, yBlinky) <= 2) or (findTile (xBlinky + 20, yBlinky) = 12) then
            dirBlinky1 := Rand.Int (1, 2)
            if (dirBlinky1 = 2) then
                dirBlinky1 := 2
            else
                dirBlinky1 := 3
            end if
            dirBlinky2 := true
            disBlinky := 0
        elsif (dirBlinky1 = 3) and (findTile (xBlinky - 20, yBlinky) <= 2) or (findTile (xBlinky - 20, yBlinky) = 12) then
            dirBlinky1 := Rand.Int (1, 2)
            if (dirBlinky1 = 2) then
                dirBlinky1 := 4
            else
                dirBlinky1 := 3
            end if
            dirBlinky2 := true
            disBlinky := 0
        elsif (dirBlinky1 = 4) and (findTile (xBlinky, yBlinky + 20) <= 2) or (findTile (xBlinky, yBlinky + 20) = 12) then
            dirBlinky1 := Rand.Int (1, 2)
            if (dirBlinky1 = 2) then
                dirBlinky1 := 1
            else
                dirBlinky1 := 4
            end if
            dirBlinky2 := true
            disBlinky := 0
        elsif (dirBlinky1 = 4) and (findTile (xBlinky, yBlinky - 20) <= 2) or (findTile (xBlinky, yBlinky - 20) = 12) then
            dirBlinky1 := Rand.Int (1, 2)
            if (dirBlinky1 = 2) then
                dirBlinky1 := 3
            else
                dirBlinky1 := 4
            end if
            dirBlinky2 := true
            disBlinky := 0
        else
            if (dirBlinky1 = 1) and (findTile (xBlinky, yBlinky + 10) > 2) then
                dirBlinky1 := 5
            elsif (dirBlinky1 = 2) and (findTile (xBlinky + 10, yBlinky) > 2) then
                dirBlinky1 := 5
            elsif (dirBlinky1 = 3) and (findTile (xBlinky, yBlinky - 10) > 2) then
                dirBlinky1 := 5
            elsif (dirBlinky1 = 4) and (findTile (xBlinky - 10, yBlinky) > 2) then
                dirBlinky1 := 5
            end if
        end if
    end if

    if (yBlinky = 349) and (dirBlinky1 = 1) then
        yBlinky := 70
    elsif (xBlinky = 349) and (dirBlinky1 = 2) then
        xBlinky := 30
    elsif (yBlinky = 70) and (dirBlinky1 = 3) then
        yBlinky := 349
    elsif (xBlinky = 30) and (dirBlinky1 = 4) then
        xBlinky := 349
    end if

    if (dirBlinky1 = 5) then
        disBlinky := 0
        dirBlinky2 := true
    else
        disBlinky := disBlinky + 1
    end if
    if (disBlinky >= 20) then
        disBlinky := 0
    end if


That's just to make the AI pick a direction when he hits and intersection or a wall... But it glitches... There are too many variables to explain, if you would be kindest enough I would PM you the rest of the game and it might make some more sence. (Blinky is the name of the ghost)
Sponsor
Sponsor
Sponsor
sponsor
wtd




PostPosted: Thu Nov 04, 2004 8:24 pm   Post subject: (No subject)

It really looks like you need to refactor. Look up tutorials on functions and procedures.
Artimes




PostPosted: Thu Nov 04, 2004 8:35 pm   Post subject: (No subject)

I've tried a tonne of other methods... This one kinda works but the ghosts cut some corners short and overlap the wall.
Display posts from previous:   
   Index -> Programming, Turing -> Turing Help
View previous topic Tell A FriendPrintable versionDownload TopicSubscribe to this topicPrivate MessagesRefresh page View next topic

Page 1 of 1  [ 3 Posts ]
Jump to:   


Style:  
Search: