В следующем году Сципион одержал победу в полномасштабном сражении. Несмотря на численное преимущество противника, он, используя блестящую тактику Ганнибала, сумел оттеснить вражеские фланги и окружить пехоту в центре. Затем согласовали условия прекращения войны. Карфаген должен был выдать всех пленных, вывести войска из Италии и Галлии, оставить Испанию и все острова между Италией и Карфагеном, передать весь свой флот (за исключением двадцати судов) и выплатить крупную компенсацию в пять тысяч талантов. Однако члены совета старейшин скрестили за спиной свои пальцы и послали за Ганнибалом, чтобы он со своей армией вернулся в Карфаген. Он с неохотой повиновался, но обвинил карфагенские власти в том, что в прошлом они не оказали ему необходимой поддержки. Если бы тогда он по-другому отнеслись к нему, то Карфаген не дошел бы до такого состояния.
Римляне, полные решимости победить в битве за благосклонность Юноны, распространили слух, что некоторые солдаты карфагенской армии — выходцы из Италии — отказались отправляться в Африку. Ганнибал призвал их собраться в храме мирной богини, который до сих пор являлся неприкосновенным местом в Бруттии, однако там их окружили и уничтожили верные ему войска. Так появилась еще одна черная метка в книге богини.
Теперь, когда 15 000 — 20 000 карфагенских воинов благополучно добрались до Северной Африки, совет старейшин решил отказаться от мирного договора и возобновить военные действия. С провокационной целью карфагеняне напали на колонну римских грузовых судов с провиантом. Сципион сильно разозлился, однако он вероятно подозревал, что враг постоянно тянул время. Он вызвал Масиниссу с большим конным отрядом и стал провоцировать Ганнибала на решающее сражение. Сципион начал безжалостно уничтожать и разорять плодородные районы, принадлежащие Карфагену. Он захватывал города, разрушал их, а жителей продавал в рабство.
Такие действия достигли цели. В конце октября 202 года карфагенская и римская армии встретились около Замы, города, который отстоял от моря на расстояние пяти дней пути. Ганнибал захотел увидеться со своим молодым соперником и попросил Сципиона встретиться с ним наедине. Полководцы встретились на одинаковом расстоянии от своих боевых порядков в сопровождении одних только переводчиков. Однако эта знаменательная встреча ничего не решила. Карфагенский полководец предложил заключить мир, но уверенный в победе Сципион отказался.
Следующим утром началась битва. В каком-то смысле ее исход не имел значения. Если бы судьба распорядилась так, что римляне потерпели поражение, то они просто вернулись бы с еще одной армией. Однако Карфаген находился уже на последнем издыхании. Ганнибал обычно сражался с большим количеством воинов, но на этот раз у него было немного конницы, а значительная часть пехотинцев представляла собой непроверенных новичков. Он разработал план сражения с учетом этих слабостей. Ганнибал знал, что конница Сципиона быстро рассеет его конницу и далеко ускачет, преследуя ее. Задача Ганнибала состояла в том, чтобы разбить римские легионы в центре и одержать победу прежде, чем римские всадники вернутся для нападения на его пехоту с тыла. Впереди он выставил восемьдесят боевых слонов. За ними карфагенский полководец в три линии выстроил своих пехотинцев, причем в первых двух рядах стояли менее опытные воины, а в последнем ряду он поставил проверенных ветеранов своей итальянской кампании.
Сражение развивалось почти так, как предполагал Ганнибал, однако успех не сопутствовал карфагенянам. Римляне быстро вывели конницу с поля боя. К сожалению, слоны оказались настоящим бедствием: одни быстро пробежали сквозь боевой порядок римлян по проходам, которые специально для этого создал Сципион (с этими животными потом разделались сзади), а другие в панике бросились назад на свои собственные войска. Первые две линии пехотинцев Ганнибала были сметены. Затем римские легионеры остановились и перестроились из свободной манипулы в тесную фалангу и только после этого вступили с бой с третьей линией противника. Некоторое время обе стороны отчаянно сражались, не достигая перевеса. Он наступил, только когда вернулась назад конница Сципиона и напала на карфагенян сзади, в точном соответствии с опасениями Ганнибала. В этих обстоятельствах он сделал все, что мог, но этого оказалось недостаточно. Игра закончилась. Шестнадцать лет крови и побед пропали впустую.