23 Replies Latest reply on Apr 11, 2008 6:42 AM by Newsgroup_User

    Bet'cha Can't (working with lists)

    Howard_Stern
      Bet you can't tell me how to do this:

      Here are my data sets:
      Catalog1 = 1 1 1

      Catalog2 = 1 1 0

      Do you see how in Catalog1, in the first, second and third position there are 1's?

      And do you see how in Catalog2, the first, second, but NOT third show 1's or "yeses"?

      Well, how do I get Director to look at both of these lists and tell me which of these two lists contain "yeses" in ALL THREE positions?

      The actual data lists I have are in the thousands, but if you can do this, I can expand on it to check for the yeses on all 10,000 thousand.

      Simple for you, impossible for me.
        • 1. Re: Bet'cha Can't (working with lists)
          Level 7
          First off, a list in Director looks like this [1,1,1] not 1 1 1.

          If you are going to have 10,000 catalogs, there is no way you will want
          to have each one stored in it's own variable. That would be a nightmare
          to code. So instead of

          Catalog1 = [1, 1, 1]
          Catalog2 = [1, 1, 0]
          ...
          Catalog10000 = [1,0,1]

          you need to create a list of lists stored in a single variable.
          Somewhere in your code you will initialize a global variable to the
          entire catalog list.

          gCatalogs = [[1,1,1],[1,1,0]]

          Can you see how this is a list of lists with each element in the list
          equating to one of your so-called 'catalogs'? The benefit of this is
          that you can easily write a handler to check for which catalogs have all
          ones, without having to be concerned about how many catalogs are in the
          list. Here is a handler which returns a list of indexes of all the
          catalogs that have all ones.

          -----------------------------
          on checkForAllTrue catalogs
          AllTrueCatalogs = []
          numCatalogs = catalogs.count
          repeat with k = 1 to numCatalogs
          if not catalogs[k].getPOS(0) then
          AllTrueCatalogs.add(k)
          end if
          end repeat
          return AllTrueCatalogs
          end
          -----------------------------

          Testing this in the message window with the small example of gCatalogs =
          [[1,1,1],[1,1,0]] gives this:

          put checkForAllTrue(gCatalogs)
          -- [1]

          meaning the first catalog has all ones. Some more example outputs

          If gCatalogs = [[1,1,1],[1,1,1],[1,1,0]] then

          put checkForAllTrue(gCatalogs)
          -- [1, 2]

          If gCatalogs = [[0,1,1],[1,0,1],[1,1,0]] then

          put checkForAllTrue(gCatalogs)
          -- []


          In other words, the handler will tell you exactly which catalogs (if
          any) have all 1's in them. You don't need to define 10,000 variables and
          you don't need to hard code the handler for a specific number of catalogs.










          • 2. Re: Bet'cha Can't (working with lists)
            Howard_Stern Level 1
            Dave,

            It looks like you may have been able to crack a code I have been looking for for like 20-30 postings in a different string.

            To ensure I don't mess this up somehow, can you tell me from the 5 year old point of view, how to put this into Director. I have never worked with lists before and thus, do not know if I need to create a Mouseup field or anything.

            If we approach this like I have never created a Movie, I might be able to get your code successfully into 8.5.

            Thanks,

            Andy
            • 3. Re: Bet'cha Can't (working with lists)
              Level 7
              The handler I wrote (checkForAllTrue) would probably best go in a movie
              script. If you put it in a movie script, then it can be called from any
              other script in your movie as needed. To open the script window, Select
              'Window' from the menu bar in Director and then select 'Script' from the
              pop up menu. Or you can use the shortcut Ctrl+0 (that's a zero, not the
              letter). Once the script window opens you can paste in the code I wrote,
              everything between the dashed lines.

              Once you do that, you now have a function that you can call from
              anywhere you need. For example, you can call the function in the message
              window by typing 'put checkForAllTrue([[1,1,1],[1,1,0]])' without the
              quotes and press enter. I would suggest that you play with it a bit in
              the message window (by supplying different sample 'catalogs') until you
              understand what it does.

              Ultimately you will call the function from another script in your
              program. I have no way of knowing where you need to call it from without
              a lot more information about the program you are writing.

              You stated 'The actual data lists I have are in the thousands'. Where
              are these data sets? Are they in one or more external files? A database?
              Or will you simply define them as a global variable the way I did in
              my previous post?

              If you can answer this question and supply me with a small subset of
              these catalogs (in what ever form you have them) then I will make you a
              small movie that includes the handler I wrote which demonstrates how to
              use it.
              • 4. Re: Bet'cha Can't (working with lists)
                Howard_Stern Level 1
                After experimenting with some of your code, I did get some handler error messages, but I'm sure it's only because I left something out.

                Number one: Should I begin with some sort of my_list? Or is the gCatalog method just as good for this purpose? I would rather avoid using the my_list anyhow.

                Second: I'm not sure how the message window works, do I X it out like I do with the script?

                Third: Taking into account my questions in this latest post, can you paste me exactly what I should be copying (and where,, what order) because I will truly mess this up?

                This is what will confuse me.. Do I need a mouse up?
                Do I put the code in the script or in the message window?
                • 5. Re: Bet'cha Can't (working with lists)
                  Howard_Stern Level 1
                  I did the put checkForAllTrue([[1,1,1],[1,1,0]]), but either a handler error popped up, or -and this is probably it, I still need to actually list my data somewhere in Director. But this is what I ask in my first question in the post above at 02:22:34 AM.

                  Absolutely, I will send you a sample data set to see your handling of my situation.

                  Here it is: (These are winning "combinations" if a player moves all of his 25 pieces randomly on a blank catalog and it happens to match up exactly with either catalog1 or catalog2, he wins)
                  (Catalog00001) "1","1",0,0,0,"1","1",0,0,0,0,0,"1",0,0,0,0,0,"1",0,0,0,0,0,"1"

                  (Catalog00002) 0,0,0,0,"1",0,0,0,"1",0,0,0,"1",0,0,"1","1",0,0,0,"1","1",0,0,0

                  I have the "1"'s in quotations because it is position dependent-meaning, if John guesses a "1" in every "slot" he wins, for he has actually guessed an algorithym that reads "if a player if Player Exists on "slot" 1,2,6,7,13,19 and 25, he wins the game. Now, the player has only Seven pieces to move around, so he cannot simply fill up all slots with a piece. Also, there are other ways to win, but this particular algorythm can serve as an example. The player can also play multiple BlankCatalog guesses, thereby improving his chances of hitting a winning algorythm, kinda like Lotto, in a way, but not at all.



                  Dave, you're gonna hate me, but what what I actually was trying to do was something a little different, but I knew I needed to understand even a very basic list code before building on whatever help I was able to find in the forum-and your aid has been spot on, Dave, lemme tell you.


                  [1,1,0,0,0],[1,1,0,0,0],[0,0,1,0,0],[0,0,0,1,0],[0,0,0,0,1]
                  [0,0,0,0,1],[0,0,0,1,0],[0,0,1,0,0],[1,1,0,0,0],[1,1,0,0,0]"

                  • 6. Re: Bet'cha Can't (working with lists)
                    Level 7
                    Download this zip file and extract the director movie from it. Then open
                    it with Director and run it. There are lots of comments to explain what
                    is going on in the file.

                    http://v-fort.org/director/hs.zip

                    • 7. Re: Bet'cha Can't (working with lists)
                      Howard_Stern Level 1
                      Will do Dave, thank you so much for even thinking of tackling my issue.

                      Andy.
                      • 8. Re: Bet'cha Can't (working with lists)
                        Howard_Stern Level 1
                        You did it! In THREE POSTS!!!!!

                        Thank you so much, Dave; it is imperative that I am able to create lists for this latest project.

                        I don't know if you have kids, but we just had our first on the 15th and I am really trying to get this movie up and running.

                        Here is a Flickr:
                        http://www.flickr.com/photos/24269890@N06/2347817605/

                        I will continue to toy with the movie you sent-I am sure it will open a lot of creative doors over here.

                        I fear losing contact with you though; can you please continue to subscribe to this topic or give me an email of yours so I don't lose you through inactivity?

                        Muchas Gracias,

                        Andy in Los Angeles.
                        • 9. Re: Bet'cha Can't (working with lists)
                          Howard_Stern Level 1
                          Well, the best I was able to do was go into the internal properties and add more catalogs, but as soon as I X it out, it disappears. It took me a while to find how to even get into the area where this was even possible.

                          First thing I will try to do when I am able to figure out how to do so, is add more catalogs and see if it'll still work. Then see if I can make the catalogs 25 numbers long.
                          • 10. Re: Bet'cha Can't (working with lists)
                            Howard_Stern Level 1
                            I got it!!!!! Global Script, right? I was able to add more three numbered catalogs. Now I will try to see if it will check for the longer data sets.
                            • 11. Re: Bet'cha Can't (working with lists)
                              Level 7
                              Here it is: (These are winning "combinations" if a player moves all of
                              his 25 pieces randomly on a blank catalog and it happens to match up
                              exactly with either catalog1 or catalog2, he wins)

                              (Catalog00001)
                              "1","1",0,0,0,"1","1",0,0,0,0,0,"1",0,0,0,0,0,"1",0,0,0,0,0,"1"

                              (Catalog00002)
                              0,0,0,0,"1",0,0,0,"1",0,0,0,"1",0,0,"1","1",0,0,0,"1","1",0,0,0

                              -------------------------------------------------------------------

                              So what does this have to do with checking if the list has all ones? It
                              seems like you just need to keep a list of where the players have moved
                              their pieces and see if it equals on of the 'winning' lists.
                              • 12. Re: Bet'cha Can't (working with lists)
                                Howard_Stern Level 1
                                Good question,

                                Well, what it has to do with it is that eventually I will have to build on what you've all ready been able to show me, but at the "end of this tunnel", the Holy Grail, as it were, is going to be the ability to "guess" or move one's pieces into these slots in a way that their "hit points map" layers right on top of the "1's" map.

                                Example Winning Hit Point Combination Total:
                                in slot one 9
                                slot two 5
                                three 7
                                four 14
                                five 3
                                29
                                27
                                23
                                30
                                26
                                41
                                36
                                slot thirteen can be any valid number of hit points greater than 0 and below 100 (99 max)
                                44
                                43
                                56
                                58
                                55
                                57
                                51
                                64
                                68
                                70
                                66
                                twenty-five 67

                                Player Moves all of his pieces around and in each of the slots, he happens to place all of the above values in all of the slots allotted, giving him hit point placement of:
                                9,5,7,14,3,29,27,23,30,26,41,36,slot thirteen 1-99,44,43,56,58,55,57,51,64,68,70,66,67
                                (and this is a simplified view)

                                Turns out, that the winning combination for defeating this enemy (enemy/catalog#9,999) is "Player MUST have 9 Hit Points in the first slot, 5 in the 2nd, 29 in the 6th, 27 in the 7th, he automatically gets the 13th slot (all players do, don;t even know if I should have it at all in Director), 57 in the 19th, and 67 in the last slot.

                                Player could completely Blow It in all the other slots, but in order to win, he MUST have these values in these slots (for this enemy).

                                I am not sure if it is a PosCheck or not, but I know this must be possible with 8.5.

                                For this proof of concept purpose, all data will be held internally.
                                • 13. Re: Bet'cha Can't (working with lists)
                                  Level 7
                                  As long as it makes sense to you. I have to admit I am a bit confused.

                                  As far as the capabilities of Director 8.5 go, more likely than not you
                                  can build your game with it. There isn't much you can't do if you can
                                  clearly define the logic.

                                  People have built some pretty cool games with Director. I myself use
                                  Director 8.5 to make my own game which you can check out if you like.

                                  http://v-fort.org
                                  • 14. Re: Bet'cha Can't (working with lists)
                                    Howard_Stern Level 1
                                    Dave,

                                    I really, really like that you had the foresight to create something that ALL RPGers can use across all platforms.

                                    I was a big D&Der myself. I really miss it-but I did develop a stuttering problem due to the competing for the DM's attention.

                                    There is no rolling for initiative in real life I suppose.

                                    Andy.

                                    • 15. Re: Bet'cha Can't (working with lists)
                                      Level 7
                                      "I really, really like that you had the foresight to create something
                                      that ALL RPGers can use across all platforms."

                                      My program only works under Windows. It is published only as a Windows
                                      executable (so no Mac support) and of course it will not work on Linux,
                                      Unix or anything else. It is NOT cross platform.

                                      Furthermore, it is amateurish to be honest, compared to most of the
                                      other Virtual Tabletops out there. There are some known bugs and anyone
                                      running the server behind a router has to configure the router for port
                                      forwarding, which is probably beyond the abilities of the average user.

                                      Now that I have thoroughly trashed my own program, I can say I did enjoy
                                      making it and learned a lot in the process. I am working on an update
                                      but there is so little time these days.
                                      • 16. Re: Bet'cha Can't (working with lists)
                                        Howard_Stern Level 1
                                        Dave,

                                        How do I get this Test to run through my two catalogs? (I don't know how to attach it in the body of this post, but it's the andytestmovie that was sent to me).

                                        It reads through 1 2 3 4 5 6 7 8 9 well enough, but I don't know how to get it to scan through, say 1 2 3 3 5 5 5 6 9 as well (which is a win) and 1 1 1 1 3 3 3 4 9 (which is a loss).
                                        • 17. Re: Bet'cha Can't (working with lists)
                                          Level 7
                                          I would prefer to let the person who provided you that code answer any
                                          questions about it.

                                          I will offer my own solution, however. I think I understand now what it
                                          is you are looking for, but please correct me if I am wrong. You want to
                                          be able to test is if one (or more) lists contain some required values
                                          in specific positions. Take a couple of simple examples:

                                          does [5,2,7] contain a 7 in the 3rd position? Yes it does!

                                          does [1,5,8] and [3,6,1] contain a 5 in the 2nd position? Well, list 1
                                          does but list 2 does not.

                                          What you need then is a general function which takes 2 parameters as
                                          input. The first parameter is a 'list or lists'. Each list which will be
                                          tested to see if it contains the 'required' values in specific
                                          positions. The second parameter is a list of the required values that
                                          each list must have. The function will return a list, reporting which
                                          lists passed the test and which did not.

                                          By the way, you will notice that I am using REAL list (as Director
                                          defines them) as opposed to a string like '1 2 3 3 4 5'. You have not
                                          provided any reason not to use actual lists. Manipulating actual lists
                                          is easier and more efficient. Even if you will ultimately be reading in
                                          these 'catalogs' from some external data source formatted as strings, I
                                          would think it better to convert those strings to actual lists first.

                                          So here is a handler that does what I have described.

                                          ---------------------------------------------------------
                                          on checkForListRequirements listsToCheck, requirementList
                                          results = []
                                          requirementListCount = requirementList.count
                                          repeat with k in ListsToCheck
                                          results.add(1)
                                          repeat with m = 1 to requirementListCount
                                          if requirementList[m] <> VOID then
                                          if k[m] <> requirementList[m] then
                                          results[results.count] = 0
                                          exit repeat
                                          end if
                                          end if
                                          end repeat
                                          end repeat
                                          return results
                                          end
                                          ------------------------------------------------------------

                                          Notice that it is not very long at all. It utilizes Directors list
                                          functions which as I said, makes coding easy. So how does one use such a
                                          handler?

                                          Well to start with it needs to be included in Movie Script cast member.
                                          This makes it globally available. You can test the handler in the
                                          Message Window (CTRL + M). The message window allows you to call the
                                          function and see the data that the function returns. This is quite
                                          useful when you are developing a program.

                                          Taking a simple example, suppose you want to check the list [1,4,5] to
                                          see if it contains a 4 in the second position. Type this line

                                          put checkForListRequirements([[1,4,5]],[void,4,void])

                                          then press Enter, you get

                                          -- [1]

                                          So what did we do here? Well we called the checkForListRequirements
                                          function and told it to check only 1 list [1,4,5] to see if it had a 4
                                          in the second position. I didn't care about what was in position 1 or 3,
                                          so I put the word void in those position. The handler I wrote ignores
                                          these positions, it doesn't care what is in these positions in the list
                                          it is testing. The [1] that the function returned tells you Yes, the
                                          list had a 4 in the 2nd position. Let's try another example, similar to
                                          the first (you should be doing these yourself in Director). Type this line

                                          put checkForListRequirements([[1,4,5]],[void,3,void])

                                          then press Enter, you get

                                          -- [0]

                                          No, there was not a 3 in the 2nd position. Now let's expand on it a
                                          little. Type this line

                                          put checkForListRequirements([[1,2,5]],[1,2,void])

                                          then press Enter, you get

                                          -- [1]

                                          Yes, the list had a 1 in the 1st position and a 2 in the second
                                          position. It didn't care what was in the 3rd position. OK, so what if we
                                          want to check more than one list? Type this line

                                          put checkForListRequirements([[1,2,5],[1,3,5]],[1,2,void])

                                          then press Enter, you get

                                          -- [1, 0]

                                          which means the first list [1,2,5] had 1 in the 1st position and 2 in
                                          the second position, but the second list did not!


                                          So now you have a handler that can test as many lists (or your catalogs)
                                          as you want. The catalogs can have as many values in them as you want.
                                          WARNING, you must make sure that the requirementList is not bigger than
                                          the Catalogs themselves or an error will occur. You COULD add code to
                                          handle this scenario, but I left it out for simplicity sake. As long as
                                          you don't break the rule, you wont have a problem. So here is one final
                                          example, using the data from your last post. Type this line

                                          put
                                          checkForListRequirements([[1,2,3,4,5,6,7,8,9],[1,2,3,3,5,5,5,6,9],[1,1,1,1,3,3,3,4,9]],[1 ,void,void,void,5,void,void,void,9])

                                          then press Enter, you get

                                          -- [1, 1, 0]

                                          The first two lists passed the test, the last one did not.

                                          I encourage you to put this handler in a movie script, and test it by
                                          using the message window as I described. Play with it, pass different
                                          parameters to the function and see what it returns. Once you do this,
                                          you should have an understanding of how you can use this handler in
                                          other scripts that you write, wherever it is needed.

                                          Ultimately you will want to understand the code of the handler itself,
                                          so that you understand how it works, what it's limitations are, and how
                                          you can adapt it as needed. It's not terribly difficult to understand.
                                          If you do have questions about it, please check the Director help file
                                          first. Every function the handler uses is documented in the help file.
                                          If it is still not clear afterwards, I will be glad to explain it to you.

                                          Regards, Dave

                                          (WHEW!)




















                                          • 18. Re: Bet'cha Can't (working with lists)
                                            Howard_Stern Level 1
                                            Dave,

                                            You have rolled a 100 on Damage Points with regard to my issue! You absolutely understand what it is I am trying to do--check multiple sets for the same pattern.

                                            I am sure this will put a huge nail in the coffin on this puppy.

                                            I will try to put this new code into the movie and I will let you know what happens.

                                            Now, you mentioned something like "why not just use a list?"--amazingly, I thought that what I was all ready doing was working with lists. ?? I suppose it's because I "Listed" the data. ?? Are you saying there is a better way? because remember-I will be calling on Director to replicate this function hundreds of times per game session.

                                            Thank you so much Dave,

                                            Andy.
                                            • 19. Re: Bet'cha Can't (working with lists)
                                              Level 7
                                              First you must understand that in Director this is a string

                                              "1 2 3 4 5 6 7 8 9"

                                              and this is a list

                                              [1,2,3,4,5,6,7,8,9]

                                              In some of your previous posts when you said something about needing to
                                              check 1 2 3 3 5 5 6 7 9 for a particular pattern, other forum users took
                                              this literally to mean you wanted to search a string for certain
                                              patterns. So they gave you suggestions on how to do it.

                                              That's why it is important to use the terminology correctly, as it
                                              avoids "kornfusion" ;-)

                                              While the other solutions were perfectly good ones, if you can define
                                              your catalogs as proper lists then you can take advantage of Director's
                                              list handling capabilities which are relatively efficient.

                                              Once you have gone through the exercises I suggested in my previous
                                              post, then you can expand on it by passing catalogs stored as a global
                                              variables to the function. Start by adding a prepareMovie handler to a
                                              movie script. For example

                                              -------------------------
                                              global gCatalogs

                                              on prepareMovie
                                              gCatalogs = []
                                              gCatalogs.add([9,1,4])
                                              gCatalogs.add([6,7,2])
                                              gCatalogs.add([2,1,1])
                                              gCatalogs.add([8,8,3])
                                              end
                                              -------------------------

                                              You will have to run the movie, so that the prepareMovie handler will
                                              execute and set the global variable. Afterwards you can call the
                                              checkForListRequirements function in the message window much like you
                                              did before. Except this time you will type

                                              put
                                              checkForListRequirements([gCatalogs[1],gCatalogs[2],gCatalogs[3]],[void,1,void])

                                              and press Enter which will return

                                              -- [1, 0, 1]

                                              Do you understand what this is doing? It is telling you that catalogs 1
                                              and 3 have a 1 in the second position, but Catalog 2 does not. I would
                                              suggest that you again experiment with this. Make the catalog lists
                                              longer and add more of them. Don't forget that if you change the global
                                              variable you will have to run the movie again to trigger the
                                              prepareMovie handler (which set the variable). Then call the function in
                                              the message window checking different catalogs for a variety of patterns.

                                              If you can get through these exercises, then you should be able to see
                                              how easily you can use the checkForListRequirements function anywhere in
                                              your program as needed. The code will work no matter how long the
                                              catalog lists are, how many catalogs there are, how many of them you
                                              pass to the function, or how many times you call the function. Of course
                                              if the catalogs are 634 billion items long, or you have 15 gazillion of
                                              them, Director will run out of memory.
                                              • 20. Re: Bet'cha Can't (working with lists)
                                                Howard_Stern Level 1
                                                http://www.flickr.com/photos/24269890@N06/2372186691/

                                                Dave,

                                                I am not sure just where exactly to press "paste" with the code you have provided. I am wondering if you meant to have me create a whole new movie, which I am cool with as you seem to fully understand my pattern issue.

                                                The movie I think you are talking about is andytest.

                                                This is the screen (link above) where I ran into trouble and thought, well, do I delete that first "global gCatalogs" I see when getting to the top of the script?

                                                global gCatalogs

                                                on prepareMovie
                                                gCatalogs = []
                                                gCatalogs.add([9,1,4])
                                                gCatalogs.add([6,7,2])
                                                gCatalogs.add([2,1,1])
                                                gCatalogs.add([8,8,3])
                                                end
                                                • 21. Re: Bet'cha Can't (working with lists)
                                                  Level 7
                                                  I would recommend that you paste the 2 scripts (reposted below) in a
                                                  brand new movie and follow the suggestions I detailed previously for
                                                  learning how to work with them in the message window. Once you
                                                  understand how the function is called and what it returns, you can paste
                                                  it into any movie you want (such as your game demo) and make use of the
                                                  function as needed.

                                                  ---------------------------------------------------------
                                                  global gCatalogs

                                                  on prepareMovie
                                                  gCatalogs = []
                                                  gCatalogs.add([9,1,4])
                                                  gCatalogs.add([6,7,2])
                                                  gCatalogs.add([2,1,1])
                                                  gCatalogs.add([8,8,3])
                                                  end


                                                  on checkForListRequirements listsToCheck, requirementList
                                                  results = []
                                                  requirementListCount = requirementList.count
                                                  repeat with k in ListsToCheck
                                                  results.add(1)
                                                  repeat with m = 1 to requirementListCount
                                                  if requirementList[m] <> VOID then
                                                  if k[m] <> requirementList[m] then
                                                  results[results.count] = 0
                                                  exit repeat
                                                  end if
                                                  end if
                                                  end repeat
                                                  end repeat
                                                  return results
                                                  end
                                                  ------------------------------------------------------------
                                                  • 22. Re: Bet'cha Can't (working with lists)
                                                    Howard_Stern Level 1
                                                    Dave,

                                                    I think you've done man! We are now able to see your clear thought process on this monster of a question. Soon we will be able to play much more efficiently and process many many more players' moves per man-hour.

                                                    We are eternally thankful for your patience on this issue, man. You are truly a Director Superstar. We all want to know what book to order that you have found most helpful in your List usage.

                                                    Thanks again dude,

                                                    Andy and the team.
                                                    • 23. Re: Bet'cha Can't (working with lists)
                                                      Level 7
                                                      Andy, I am happy to hear it is going well for you. I don't consider
                                                      myself a superstar, but thank you for the compliment.

                                                      I had experience programming in other languages before using Director
                                                      and a lot of concepts and techniques are relevant regardless of which
                                                      environment you are programming in. You can learn Director at the same
                                                      time you are learning the fundamentals of programming, but you should be
                                                      realistic about how quickly you will progress.

                                                      To learn Director first and foremost I utilize the online help that
                                                      comes with it. While it certainly falls short in many areas, I consider
                                                      it to be the best starting point.

                                                      Next I study the examples of code/design of other developers; the ones
                                                      included with the Director CD, downloaded from Macromedia/Adobe's webite
                                                      and from the website of the real Director 'Superstars' who have
                                                      generously provided some fantastic open files. This is no trivial task
                                                      though. You cannot simply browse through the examples. You must examine
                                                      them closely and thoroughly understand how and why they work.

                                                      This and other Director forums are yet another excellent source of
                                                      learning. If you don't know, Google provides an archive of years worth
                                                      of this forum. Any question you have has a good chance of already having
                                                      been answered many times. Before coming here and asking a question, I
                                                      typically search the archives because that is the quickest way of seeing
                                                      one or more solutions to a problem. I suggest adding these links to your
                                                      browser's favorites list:

                                                      http://groups.google.com/group/macromedia.director.lingo/topics
                                                      http://groups.google.com/group/macromedia.director.basics/topics

                                                      Finally, it is my firm belief that there is no better way to learn than
                                                      by doing. You try to build something, it doesn't work so you do a bit of
                                                      research and try again. With each mistake, something new should be
                                                      learned. Through persistence and determination, eventually you achieve
                                                      success. Then you go back and investigate how to make it even better. ;-)

                                                      Any way this is only how I have come to know Director as I do (which in
                                                      my opinion is only at an intermediate level). There are many styles of
                                                      learning though.

                                                      There are some good articles at Director Online
                                                      http://director-online.com/ and Lingo Workshop
                                                      http://www.lingoworkshop.com/. I have never read any books though. I
                                                      have heard several users recommend a book called Using Director by Gary
                                                      Rosenzweig. Did you say you were currently using version 8.5? If so you
                                                      are in luck as there is currently an ebay auction where you can pick up
                                                      this book for the ridiculously low price of $2.44 US with only $3.75
                                                      shipping to the US. The seller also ships world wide. This is a real
                                                      bargain since this book probably sold for nearly $50 originally.

                                                      http://cgi.ebay.com/Using-Director-8-5-by-Gary-Rosenzweig-2001_W0QQitemZ190204824718QQihZ0 09QQcategoryZ2228QQrdZ1QQssPageNameZWD1VQQ_trksidZp1638.m118.l1247QQcmdZViewItem

                                                      I wish you great success in your endeavors with Director.

                                                      -- Dave