Here is something I wrote some time ago for another post, Thought it might be useful for you as well when it comes to organizing large projects or just project in general that I as least find useful.
[quote:2q4w5gpc]Here are some advise that might be useful.
1. Clean up
Objects that you don't need to be there from the start, by this I mean sprite objects that would be "Units", "Bullets" etc. you should destroy at the beginning of the game. This is simply to make sure that you don't have rogue objects in your program.
2. Precise functions
Make as small and precise functions as possible. Even though some of these functions might seem to simple for it to make much sense.
An example of why this is a good idea. Imagine you have a "Car" object and in you code you might change the speed to whatever you think is fine. like "Car.speed = 100". This would be fine until the point you decide that it could be fun to add something like, if the speed gets above a certain value the car should start loose control. If you add it in your code you would have to change/test for it every time you changed speed. But with a function you can simply add the test here and update it for the whole program at once. So using loads of functions is in my opinion one of the best ways to maintain an overview of your project, but they are very easy to replace, maintain and bug fix as you know what inputs and outputs they have.
3. Global constants
This can be very useful for reducing spelling errors, and to quickly change things in your game. Imagine in the above example, that you have several "Car" objects, which are categorized by a type, "Cheap car", "Normal car" and "Expensive car"
If you in your code manually add checks if ( Car.type = "Cheap car" ) and then do something, at some point you might figure out that the name "Cheap car" weren't that good an idea after all and something else would actually have been better, then instead of having to go through your whole code and replace "Cheap car", you can just update one global variable instant.
4. Use several event sheets
Don't be afraid of using event sheets even though you might not add a lot to them. It will really help you maintain an overview of your game.
5. Split events and functions
Unless you are 100% sure that an event sheet should only be used one place, its always a good idea to split events and functions, even though they work on the same object. So an event sheet called "Car events" and "Car functions" would be a good idea. You can always move functions later on, but think it good practice to just get used to splitting them. The reason for splitting them is that Functions wont execute without being called, so if you suddenly figure out that the functions in a event sheet could be useful in another, but have mixed a lot of events into it. You will have to move all the functions to a new event sheet to avoid unwanted problems of events suddenly executing when they shouldn't.
6. Requirements and returns
When making functions I find it very useful to add comments above them with requirements, and potential return values. This will make it very easy later on as you move along and might forget what a function actual does when you return to it.
An example could be like this:
7. Bug sheet
Make an empty event sheet, that you just use for comments. You don't include it in your program. But the purpose is that as you test your game and might be testing something, suddenly notice that something else is not working as intended. Then instead of fixing it straight away, you just in your "Bug event sheet" add a comment explaining what you noticed. And if possible the cause for it. Then you can always fix it later and you wont forget about it.
8. Quick reference function sheet.
This can be a bit time consuming but very useful. The idea is again to add an event sheet that you don't include in your program. But you simply add function calls to it, with the required amount of parameters.
This can speed things up quite a bit as you can just copy/paste function calls from this sheet to wherever you need them, and just update the parameters, and you don't have to remember the name or how you spelled the function name etc.