Hannibal was handicapped by his army at Zama: he had relatively few of his veterans left, it was hastily recruited and many of his troops were fairly "green", i.e. not battle tested.
Having said that: he almost won it...
We have to remember that the last phase of the battle was a slogging match that could have gone either way. The final decision was made by the return of the Roman/ Numidian cavalry taking Hannibal's veterans in the rear and rolling them up.
In my opinion the better general did not win :)
Bookmarks