Den
romerske sejr syd for Utica i foråret 203 f.Kr. forfærdede
Karthagos rådsforsamling. Hannibal,
stadig i det sydlige Italien, blev kaldt tilbage til Afrika for at forsvare
sin hjemby. Til trods for det snævre hjørne romerne havde
klemt ham op i, slap Hannibal ud gennem havnebyen Croton i Tarranto-bugten
med størstedelen af hans hær på 12.000 mand i juni.
Han gik i land på den østlige kyst af det nuværende
Tunesien, omkring 130 km under Karthago, i oktober samme år. Hannibal
begyndte straks at smede en ny hær. Hans broder Mago,
som havde været i det nordvestlige Italien for foden af Alperne,
blev også kaldt tilbage til Karthago. En del af Magos tropper ankom
sikkert, men den unge Barca gik tabt til søs.
Vest for Karthago tilbød Publius
Cornelius Scipio, som havde kommandoen over den romerske hær,
Karthago fredsbetingelser. Da alle bestræbelser på at nå
en våbenhvile slog fejl, opgav Scipio belejringen af Utica og marcherede
op ad Bagradas-floden (Medjerda) i foråret 202 f.Kr., fast besluttet
på at trække Hannibal ind i kamp. Hans 6.000 numidiske kavalerister,
under Masinissa,
red frem netop som romerne kom ansigt til ansigt med Hannibals 37.000
tropper nær landsbyen Zama. Selvom Scipios hær ikke var større,
var hans mænd bedre trænede, specielt hans numidiske ryttere.
Som Hannibal slap sine 80 elefanter løs, holdt romerne stand og
spredte snart de store bæster. Derpå red det romerske kavaleri
frem mod det karthanske kavaleri på fløjene og da de fjendtlige
ryttere flygtede, fulgte de efter dem tværs over sletten. Det blev
nu et slag med infanteri – det romerske legioner angreb de tre separate
linjer som Hannibal havde organiseret. I en dødbringende styrkeprøve
knuste legionærerne den første linje af ligurianere og gallere
fra Magos gamle hær. Derpå rykkede de frem for at angribe
den anden linje, sammensat af afrikanere under kommando af Hannibals gamle
løjtnant Hanno.
Også denne linje blev brudt af den ubønhørlige romerske
fremrykning. Scipios næstede udmattede mænd omgrupperede sig
for at angribe den stadig friske tredje linje, som blev udgjort af veteraner
fra Italien anført af Hannibal selv. Men i det øjeblik vendte
det romerske kavalerivåben tilbage fra deres succesfulde forfølgelse
og gik til angreb på bagsiden af det karthanske infanteri. Det
kombinerede angreb knuste den sidste modstandslinje. Ved dagens slutning
lå 20.000 karthanere døde på slagmarken og et lignende
antal var taget til fange. Omkring 1.500 romere blev dræbt. Den
Anden Puniske Krig var slut.
Det svækkede Karthago afstod Spanien og sine Middelhavsøer
til Rom. Det overgav alle sine krigsskibe med undtagelse af ti og begyndte
at betale en krigsskadeserstatning på 200 talenter om året
i 50 år. Scipio fik fornavnet Africanus, den første romerske
leder som var blevet anerkendt med navnet af det land han erobrede. Hannibal,
som med nød og næppe havde undgået katastrofen ved
Zama, vendte tilbage til Karthago. Han hjalp til med at genoplive byen
indtil han blev tvunget i eksil i 195. Han allierede sig med Antiochus
III (den Store) af Syrien. Men den romerske sejr over Seleucid-dynastiet
ved Magnesia tvang ham til at flygte endnu en gang. I 183 tog han gift
for at undgå tilfangetagelse af Rom.