Сицилия и Иберия были потеряны карфагенянами, армия Ганнибала в Италии таяла. Римский полководец Публий Корнелий Сципион, победитель карфагенян в Иберии, предложил сенату перенести войну в Африку, справедливо полагая, что римская экспедиция в Карфаген заставит Ганнибала спешить из Италии на защиту родного города.
В 204 г. до н.э. римская экспедиционная армия во главе со Сципионом высадилась в Африке. Правители Карфагена немедленно отозвали Ганнибала из Италии, где он не потерпел ни одного поражения. В 202 г. римская армия и войска заключившего с Римом союз нумидийского царя Масинисы встретились в решающем сражении с войсками Ганнибала у Замы. Оно произошло 19 октября (по Корнелию Непоту — весной) на современной границе Туниса и Алжира близ Эль-Кеф, в четырёх переходах от Карфагена. Идеально ровная пустынная местность способствовала манёвренному бою, использованию всех родов войск.
Силы сторон были примерно равны.
Войска Ганнибала состояли из пехоты, конницы и 80 слонов. Лучшей частью армии были профессиональные наёмники, ветераны войны в Италии — 12–15 тыс. отборной пехоты. Примерно такое же количество составляли ливийские новобранцы и карфагенские ополченцы (исследователи прошлого века называли их «милицией») — 10–12 тыс. Особый контингент составляли отряды союзников, выведенные Магоном, братом Ганнибала, из Северной Италии (сам Магон к тому времени умер) — 5–6 тыс. пехоты. Отколовшиеся от своего царя Масинисы нумидийцы и союзные Карфагену мавретане составляли лёгкую пехоту — 3–4 тыс. Те же нумидийцы и мавретане составляли лёгкую конницу — 2–3 тыс. всадников. Карфагенские и ливийские всадники — тяжёлая кавалерия — насчитывали 2 тыс. бойцов.
Экспедиционная римская армия Сципиона состояла из регулярной римской пехоты (V и VI легионы) — 10–11 тыс. воинов; из пехоты союзников-италийцев — 12–13 тыс.; из нумидийской пехоты царя Масинисы — 5–6 тыс. бойцов; из нумидийцев состояла и лёгкая конница римской армии — 4600 всадников; римские и италийские всадники составляли тяжёлую кавалерию — 2 тыс.
Каждая из армий обладала рядом присущих лишь ей особенностей.
Армия Рима формировалась по милиционной системе, служба в ней рассматривалась как почётное право защищать отечество. Деление на конницу, тяжёлую и лёгкую пехоту происходило по имущественному принципу. Наиболее обеспеченные служили в коннице и тяжёлой пехоте, менее обеспеченные — в лёгкой пехоте, неимущие (пролетарии) выставляли всего одну сотню (центурию) лёгкой пехоты. Каждый включённый в ополчение гражданин должен был отслужить несколько кампаний, принять участие в определённом количестве походов. Оружие приобреталось воинами у государства за определённую плату.
Ещё по закону Сервия Туллия имущественные разряды римских граждан должны были выставлять 193 центурии (сотни) воинов. Основным воинским подразделением римской армии был легион, который после 2-й Самнитской войны (327–304 гг. до н.э.) римляне стали делить на 30 манипул из двух центурий каждая. Число воинов в легионе колебалось от 4200 до 6 тыс. человек. В зависимости от опыта и возраста воины легиона делились на следующие группы: велиты, лёгкие пехотинцы, вооружённые мечом, дротиками, луком со стрелами и пращой; гастаты, копейщики, имевшие меч, метательные копья — пилумы, а также защитное вооружение; принципы, «передовые», которые когда-то, задолго до описываемых времён, занимали, видимо, первую шеренгу, а затем сохранили традиционное название (вооружены и снаряжены они были так же, как и гастаты); триарии, ветераны, которые вместо пилума имели обыкновенное копьё, а в остальном не отличались от прочей массы тяжёлой пехоты. Манипулы гастатов и принципов состояли из 120 воинов, манипулы триариев — из 60. В каждом легионе было 10 «турм» конницы по 30 всадников в турме.
В бою легион обычно выстраивался в три линии по 10 манипул. Перед манипулами в рассыпном строю стояли велиты. В первой линии — манипулы гастатов. Каждая манипула имела 10 шеренг по 12 человек. Между манипулами были интервалы, равные протяжению фронта манипулы. Вторую линию составляли манипулы принципов, построенные по такому же методу. Третью — манипулы триариев. Манипулы разных линий могли стоять в шахматном порядке при дистанции между линиями в 15–25 метров, либо в затылок друг другу. Промежутки между манипулами могли быть использованы для отступления, в случае необходимости, велитов или гастатов, а если того требовали обстоятельства, промежутки закрывались путём выдвижения манипул из 2-й или 3-й линии или обычным выдвижением задних 5 шеренг (2-й центурии) одной и той же манипулы на фланг своего построения. Конница в бою обычно ставилась на флангах.