The moves a Pokemon can learn, by either Level Up, TM, HM or Move Tutor. If the Pokémon has a good moveset then you will stand more of a chance of defeating the opponent as you have moves that will either cause a lot of damage or will raise your stats quite a bit. Some Pokémon are good HM Slaves as they can learn a decent amount of HM Moves and are easy to catch. Some examples that quite a few people use are:
HM Slaves will be the Pokémon that are with you to learn the HMs that you will need as you go through the game. The disadvantage of HM Slaves is that they take up room in your party so you can only have a few Pokémon that are good at attacking. HM Slaves are used to stop you from using up the move slots on your attacking Pokémon so on them you can have some good attacking moves. Many though, combine both HM's, TM's, and moves naturally known by a pokémon in their pokémons' move slots. This allows for all around good battlers and does not take up extra room in your party.