Poté, co Kartaginci odmítli nabízené mírové podmínky, obnovil Scipio svůj postup na Kartágo. Hannibalovo vojsko bylo početně silnější než římské, avšak jeho jízda byla slabší. Hannibal sám si nedělal žádné iluze. Dobře věděl, že šance zvítězit ve válce je pryč. Jediné, čeho mohl dosáhnout, bylo zmírnění mírových podmínek pro Kartágo. Když se obě nepřátelská vojska setkala u Zamy asi 200 km jižně od Kartága, pokusil se ještě jednou vyjednávat. V soukromé rozmluvě se Scipionem projevil ochotu k uzavření míru, pokud Římané upustí od požadovaného tributu a rozpuštění kartaginské válečné flotily. Když Scipio odmítl, nastal poslední rozhodující boj. V plánování a řízení bitvy a především v dodatečném nasazení veteránů, se ještě jednou projevila Hannibalova taktická genialita. V klíčovém momentě bitvy, kdy už se zdálo kartaginské vítězství na dosah, však vpadla Kartagincům do zad římská jízda, která předtím zdolala kartaginskou a rozhodla tak bitvu ve prospěch Římanů.