This is a cannon that I designed in Minecraft that shoots quite far. I has a condensing charge. For those who don't know what that means, a condensing charge is a charge that fires before the firing charge and removes the spaces between blocks (as seen in pic 2) of tnt increasing the firing range. I hope that wasn't to confusing.
The first step is to build the frame of the cannon. Make a shape like in pic 1 that is 15 x 3 wide. Then add 3 more layers on top of that with the middle hollowed out and the opening in the direction you want to shoot like in pic 2.
Step 2: Adding the Water
Place a half block at the end of the cannon. Then fill it up with water.
Step 3: Adding the Redstone
Add a button onto the back of the cannon like in pic 1. Then put redstone and repeaters where ever I placed them in pic 2 (and also add blocks next to the repeaters on the left side. Then fully charge 8 repeaters on the right side (feel free to experiment, but if you go much over that, you'll have a nice big crater in the ground). And also fully charge the first repeater on the left side of the cannon.
EDIT : If you charge 10 repeaters, it shoots really far in an arch.