Сражение между римлянами и карфагенянами все же состоялось при Заме - Нараггаре 19 октября 202 года.
Римская армия имела 25-30 тысяч пехотинцев и 6-8 тысяч конников. Карфагенская армия насчитывала 35 тысяч пехотинцев, 2-3 тысячи конников и 80 слонов. Боевые слоны являлись грозной силой, но они были совсем недавно приведены из внутренней Африки и еще плохо обучены.
Таким образом, преимущества были на стороне римлян: в ее рядах сражались закаленные в боях ветераны, они имели в 3 раза больше конницы, их пехота превосходила карфагенскую.
Бой начали карфагеняне одновременной атакой кавалерии с флангов и слонов в центре. Римская кавалерия, более многочисленная и сильная, конечно, отбросила конницу карфагенян и бросилась в погоню, быстро исчезнув из поля зрения. Так расчет Ганнибала удался, численный перевес перешел к нему.
В это время в центре римлян атаковали слоны. Но Спицион назначал для борьбы с ними специальных метальщиков, которые метали в слонов дротики и производили сильный шум с помощью труб и рожков, пугая животных. В результате слоны повернули назад и стали топтать свою же пехоту.
Ганнибал продолжил атаку в центре своей пехотой. Но первую линию войск Ганнибала составляли многочисленные отряды наемников; они не сумели выдержать рукопашной борьбы с легионерами и быстро бежали, обтекая фланги двигавшейся вслед за ними второй линии карфагенской армии. Здесь стройными рядами шли хорошо вооруженные фаланги карфагенских граждан и македонян - союзников Карфагена. Копьеносцы второй линии армии Ганнибала разогнали бегущих перед ее фронтом наемников и нанесли сильный удар гастатам. Римская пехота приостановилась...
Воюющие были почти равны по численности и воодушевлению, а также по вооружению и храбрости, поэтому "исход битвы долгое время оставался неясным, ибо сражавшиеся считали своим долгом держаться на своих местах до последнего издыхания", - писал Полибий.
Но в этот момент после преследования противника вернулась римская конница. Римляне быстро сориентировались на поле боя и неожиданно ударили в тыл карфагенянам. Это решило исход сражения.
Поражение Ганнибала было полным. Карфагеняне потеряли 20 тысяч человек убитыми и 10 тысяч пленными, 133 знамени и 11 слонов. Римляне потеряли убитыми около 2 тысяч человек.
После сражения Ганнибал бежал в Гадрумет. Во время этого бегства нумидийцы устроили на него покушение, но он уничтожил их.
В сражении при Заме ярко проявилась новая роль второй линии войск, которая стала предпринимать самостоятельные движения, отбивая фланговые и тыловые атаки, даже самостоятельно наступать и наносить удары противнику.
Причины поражения Карфагена и гениального Ганнибала в этой войне были глубокими и разнообразными. Во-первых, Рим и римско-италийский союз обладал большим военно-экономическим потенциалом, чем Карфаген. Рим и его союзники, по данным Полибия, могли мобилизовать свыше 700 тысяч пехоты и 70 тысяч всадников.
Карфаген не мог набрать такое огромное наемное войско при всем своем богатстве. Ганнибалу не удалось разрушить римско-италийский союз, хотя он старался использовать существующие в нем противоречия. Кроме того, для римлян и их союзников война выглядела как отечественная: они воевали с вторгнувшимися на их территорию захватчиками. Римская армия набиралась в основном из собственных граждан; с военной точки зрения такая армия оказалась более действенной, ведь боеспособность наемной армии Ганнибала зачастую зависела от казны полководца. К тому же римские полководцы являлись консулами, то есть обладали гражданской властью, в то время как к Ганнибалу карфагенские политики относились ревниво и оказывали помощь мало и неохотно.