Here's how I beat Pokemon.
1) I always use the type advantages as best as I can. E.g. If I'm fighting Cynthia's Garchomp, then I'll switch to Electivire and use Ice Punch.
2) Before I even start the Elite 4 (take into account that Elite 4 Pokemon in Diamond/Pearl range from level 50 to 60), I make sure that all my Pokemon are levle 60+. That way, by the end of the league, I am a bit superior to the Champion.
3) I study each gym leader/boss and their Pokemon, making sure that my final team can take on any one of their Pokemon at any time. E.g. If the game has a great deal of bosses who use Grass Pokemon, I'm going to have at least 1 pure Fire-based Pokemon.
4) I use a pre-set team of types and moves that has never failed me. I make sure that I have: Grass type, Water type, Fire type, Ice (usually Ice Beam), Flying type, Electric type, Fighting, Psychic type, Normal and Ground (Earthquake). In some cases I have random "just in case" moves thrown in for good measure, e.g. Bite or Sleep Powder. My team tends to never have more than 3 of the HMs at once within it (Mainly Fly, Strength and Surf, as I find that they are the most combat effective).
5) When I'm prepared, I walk in there, and I don't stop hitting until they fall down. I don't use status moves, to me they are a waste of time. I hit them as hard as I can and as fast as I can.
So far, I have cleared Blue, Silver, Yellow, Fire Red, Ruby, Sapphire, Emerald and Platinum with this strategy.
So yes, I overtain, and I wish I didn't sometimes (in Pokemon, it takes a while), but I don't feel confident in my ability to win (I have never claimed to be good at video games) if I don't have that advantage. The less variables there are, the more confident I become about my chances of victory.