From your question, it sounds as though you have no problem designing/acquiring sound effects, and just need to understand implementation approaches.
How would you organize and use sound effects?
There's one major principle you need to understand when it comes to game audio which is obvious in hindsight, but not everyone gets on their first approach:
"Anyone who still thinks there's a 1:1 relationship between a sound
and a WAV file just doesn't get it." -Brian
When a post-production studio edits a film's soundtrack, they don't place little "SOUND EFFECT INSTANCE" cues all over the timeline. They take a few different sounds and balance them together, triggered at different sequence points to make the soundtrack as organic as possible. It's really hard (and sometimes not desirable, as your game's aesthetic dictates) to do this in games.
The systems you can build (or use) for getting the most flexibility out of your engines vary. One way you can get familiar with this is to download both FMOD and Wwise and start reading their documentation and trying to use the tools (Wwise's installer contains a document describing the interaction between programmer and sound designer that is especially good).
For example, you have 5 different character types and 3 different grounds — grass, mud, and wood, for example — would you create 5*3 footstep sounds?
If your characters' footsteps sound different enough, then yes. It's also common to split it up into small, medium, and large footstep sounds because, for example, are human and elf sounds really going to be that different? Save on the disk space and memory and reuse some sounds.
Is adding random pitch for variety to a sample a good idea?
Yes. Otherwise, you get the "machine gun" effect," which sounds like its name. It's especially bad with multiple impact sounds. For quick, repeated sounds, you typically grab a few different-enough samples and then trigger each of those with their pitch subtly adjusted on each instance of the SFX being triggered.
What about environment sounds — do you create a main loop you just launch on the background,
Many games have certainly taken this approach. The most recent example I can think of is Bastion. If you hang out in the Bastion for 2-3 minutes, you'll eventually hear the background track fade down then fade up again as the background loop restarts. This is kind of lame. It's possible to make your background loop more dynamic.
To make your background loop more dynamic, think about decomposing the loop into its elements. For a given basic outdoor background loop, you can probably put in these:
- A base, soft wind, or another sound that acts as the bed, or "room tone" if you've done film sound.
- Slightly louder continuous sounds highlighting a feature of the area (eg: babbling brook)
- Frequently-active sounds that are short, but may trigger frequently (birds tweeting)
- Sounds that are very few and far between, but add interest and mystery to the area (occasionally wolf growl, maybe?)
You can effectively think of these categories as all being on their own timeline. Each timeline here has a bank of sounds they can choose at random, and parameters for how frequently they trigger. Examples of parameters:
- Any required delay time between the end of the last sound triggered and the next one beginning in a single category.
- If a particular sound category is allowed to have multiple sounds being played from it at once (might be appropriate for tweeting birds, if it's tuned to happen infrequently)
or do you place real sounds (water, wind, tree barks moving, birds) all over the game level?
The placed-in-level sounds are sort of a special case since they act as your background loop in some instances, but you may also want some form of them in addition to a background loop.
What if a bird flew out of its nest as you approached it, but then you didn't hear a bird squawk until 12 seconds later in the background loop? That would be weird. Even if you have bird squawks in your background loop, it makes sense to also place a bird squawk here.