기원전 218년 한니발이 히스파니아의 사군툼을 공격함으로 전쟁은 시작되었다. 한니발은 많은 군사를 이끌고 갈리아 남부를 돌아 알프스를 넘었고 이 과정에서 상당한 병력과 전투 코끼리를 잃기도 했지만, 북부 이탈리아로 진입해서 기원전 216년의 칸나이 전투를 비롯한 여러 차례의 전투에서 로마군을 무찔렀다. 그러나 로마군은 파비우스 막시무스의 지연 전술로 만회할 시간을 벌었고 한니발은 이탈리아 전역을 손에 넣지 못했다. 이탈리아 외에 히스파니아, 시칠리아, 그리스에서도 로마군과 카르타고군은 격돌했으나 끝내는 로마군이 모두 승리하고 전장은 아프리카로 넘어가 기원전 202년 북아프리카의 카르타고 근처에서 벌어진 자마 전투에서 카르타고는 스키피오 아프리카누스에게 결정적으로 패하여 전쟁이 끝났다.