У командующего римскими войсками тоже не все ладилось. Осада Утики затянулась. На ее спасение выдвинулись войска Сифакса и Гасдрубала, сына Гисгона. Римляне отступили в лагерь, устроенный на мысе, выступавшем далеко в море. Здесь было легко обороняться от превосходящих сил противника, насчитывающих около 80 тысяч пехотинцев. Карфагенская армия, ожидая прибытия Ганнибала, не решалась напасть и располагалась в деревянных и тростниковых хижинах. Это позволило римским лазутчикам поджечь лагерь карфагенян. Спасаясь от огня, солдаты попадали на мечи римлян. Войска Карфагена тогда потеряли более тысячи солдат. Гасдрубал и Сифакс позорно бежали в ночь пожара. Им удалось наспех набрать еще одну армию, но и она была разбита, а большинство рекрутов разбежались. Этот разгром заставил многих карфагенских олигархов заговорить о том, что надо заключить с римлянами мир.
Когда Ганнибал прибыл в Африку, он вскоре организовал встречу с римским полководцем. Последовало следующее предложение: карфагеняне покидают Корсику, Сардинию, Сицилию и Испанию в обмен на мирный договор. Однако Сципион отказался принимать такие условия, заявив, что республика и так уже фактически контролирует все эти земли. Он предложил свой вариант соглашения.
Но здесь произошло событие, которое все испортило. Вдохновленная приездом Ганнибала карфагенская элита санкционировала разбойное нападение на римские торговые корабли и тем самым нарушила условия перемирия. Суть события состоит в том, что для снабжения римской армии продовольствием к берегам Африки направлялись два крупных каравана из двухсот кораблей. Разыгрался шторм, и 50 кораблей оказалась возле Карфагена. Оголодавшему населению показалась заманчивой идея воспользоваться содержимым пострадавших судов, хотя все, разумеется, понимали, что этим нарушат условия перемирия с Римом. В конце концов жадность поборола здравомыслие. Несколько военных судов под предводительством Гасдрубала двинулись к пострадавшим от бури римским кораблям, захватили их и привели в карфагенский порт.
Публий Сципион (в свои 32 года) был возмущен таким коварством и выставил неприемлемый ультиматум Карфагену. Теперь и Ганнибал ничего не мог сделать, а ведь была возможность прекратить войну. Кровопролитие стало неизбежно. Судьба двух полководцев должна была решиться в очном противостоянии армий. Сражение между противоборствующими сторонами произошло при Заме 19 октября через два года после высадки римлян в Африке.
Первую карфагенскую атаку слонов армия Публия Корнелия Сципиона встретила организованно. Пехота расступилась перед животными. Те на большой скорости пронеслись по образованным коридорам, никого не задев. В тылу их ждали многочисленные лучники, которые плотным огнем заставили животных развернуться и броситься на собственное войско, принося большой ущерб. Решающую роль сыграла римская кавалерия. Сначала она разгромила карфагенскую конницу, а потом ударила в тыл пехотинцам. Ряды пунийцев дрогнули, и бежали. Ганнибал пытался их остановить, но Сципион Африканский, однако, добился чего хотел. Он оказался победителем. Карфаген признал поражение. Сам Ганнибал вместе с одним из приближенных сумел бежать в Хадрумет, что в 200 км от поля битвы. Вплоть до ворот города его преследовал Масинисса, мечтавший взять великого полководца в плен. Более подробно сраженые было описано выше.