I did something similar to this once…
maybe a 64*64 square smoke-ish texture on black, textured onto a plane that is facing it’s positive X axis, drawn as a halo (face select [fkey], select in paint buttons), in add mode (also in paint buttons), with collisions turned off, and I think objcolor will need to be turned on. This object will need to be in a layer that is not visible when the game is run. Use an add object acuator to add this object (at the adding object’s center), and give it a long-ish lifespan. You will want to add this object multiple times to make good smoke. If you want the smoke to appear to shoot out of the cannon (in the direction of the cannon ball), and to billow out of the front (upwards) you may have to do some of this twice.
In the ipo window for the object set the colR, colG, colB curves to start at 1.0, and after a time (how fast do you want the ‘smoke’ to clear up), have them go to black. If they are all the same curve the smoke will not change color. In the game buttons make the object play this ipo, and also give it some upward motion. More realisim will be achieved if this object gets larger as it moves upwards, but blender’s implementation of halos makes this more difficult. I don’t want to explain how to here.
The lifespan for the object (set by the add actuator) should be as long or longer than it takes the object color ipo-s to reach black.
I hope that is enough information for now.