随着国家统治机构的完善,罗马变得日益强盛起来,先是占领了整个意大利半岛,随后又攻占了地中海地区。公元前3世纪中期至2世纪中期,罗马和非洲的迦太基之间发生了冲突,进行了长达119年的战争。迦太基是腓尼基人建立起来的,罗马人称腓尼基人为“布匿”,因此这场战争又称布匿战争。
公元前264年,罗马和迦太基为争夺西西里岛发生了第一次布匿战争,这场战争以迦太基的失败而告终。第一次布匿战争落败后,迦太基军队的统帅哈米尔卡·巴卡准备出兵征服伊比利亚半岛,他儿子汉尼拔央求与父亲同行。父亲把他带到柏尔摩洛克神殿的祭坛前,让他庄严宣誓:竭其一生,血战到底,击败罗马,为国为父报仇雪恨。
汉尼拔发下重誓,父亲才允许他随军出征。不幸的是,哈米尔卡在这次征战中阵亡。公元前221年,25岁的汉尼拔被任命为迦太基的军事统帅。第一次布匿战争后,战败的迦太基国势衰微,受条款所限,无法建立强大的海军,汉尼拔便着手训练出一支精锐的陆军。做好了战争准备后,汉尼拔出兵包围了与罗马结盟的西班牙城市萨贡托,用了八个月时间将其攻陷。罗马方面大为震怒,向迦太基发出通牒,要求将汉尼拔交付罗马人受审。迦太基政府拒绝了罗马人的要求,随后向其宣战,揭开了第二次布匿战争的序幕。
当时,罗马人完全掌握了地中海的制海权,于是他们把大部分兵力集中在意大利南部,准备直接攻打迦太基城。他们万万没有想到,汉尼拔居然率领38000名步兵,8000名骑兵以及37头战象,在冬季里成功地跨过阿尔卑斯山,直捣罗马的腹地。罗马执政官见势不妙,急忙回军尾追,却在意大利中部的特拉西米诺湖北岸落进迦太基军队的包围圈。在一条三面环山,背后临湖的狭道上,罗马四个军团3万多人被迦太基军队打得乱成一团,几乎全军覆灭,统帅弗拉米尼当场阵亡。
公元前216年春天,汉尼拔攻占了罗马人在普利亚平原的补给重地坎尼,截断了对罗马的粮食供应。罗马元老院新选出的两位执政官瓦罗和鲍路斯决心铲除汉尼拔这个心腹大患,便出动8万步兵、6千骑兵,前来与汉尼拔决战。当时汉尼拔只有4万步兵、1.4万骑兵,在数量上不占优势。但是汉尼拔懂得天文学,他观测到坎尼这一带中午时分常有猛烈的东风,于是就在罗马大军来到之前,抢先占据了东边的高地。有的将领提出疑问:“高地在海边,背后便是大海,这不是自绝后路了吗?”汉尼拔胸有成竹地回答:“你管它背后干什么,只要脸能看到敌人就行了。”
罗马军队一见迦太基军队全列在海边,就发起进攻,想一鼓作气把敌军赶进海里。汉尼拔指挥兵士沉着应战。仗打到中午时分,突然东风大作,飞沙走石,迎着海风的罗马士兵被尘沙眯住了眼睛,无法看到对面的敌人,而顺风作战的迦太基士兵毫不费力地就能冲到阵前,近处用标枪,远处用石块,打得罗马大军毫无还手之力。
在这次大战中汉尼拔还使用了举世闻名的新月形战术。战斗开始前,他将军队部署成中锋凸起的阵形,以引诱罗马军集中攻打其中锋。当罗马军涌入迦太基军阵形中部时,汉尼拔令旗一摇,阵形突然变成了凹陷的弦月状,将罗马主力包围在其中。
经过12个小时的鏖战,罗马大军5.4万人被歼灭,1.8万人成了俘虏,执政官鲍路斯、两位前任执政官、两位财务官、29名军团司令官、80位元老院议员全部阵亡,只有执政官瓦罗率残部得以逃脱。相传迦太基军队打扫战场时,光从战败的罗马士兵身上搜出的金戒指就装了三大筐。
坎尼战役表现出了汉尼拔卓越的军事指挥艺术,成为世界古代军事史上一个少有的以少胜多的光辉战例,后世的国外军事史家把汉尼拔称为“战略之父”,“坎尼”也成了包围并全歼敌军大会战的军事术语。
坎尼战役之后,罗马人再也不敢与汉尼拔正面交锋,任凭他在没有后方的情况下,在罗马的疆土上纵横驰骋了15年之久,先后占领了400多个城镇,一度还曾兵临罗马城下。直到公元前203年,汉尼拔才被迦太基政府召回北非,对抗由大西庇阿率领的罗马远征军。
公元前202年,在第二次布匿战争的最后一役扎马之战中,汉尼拔的军队被罗马人击溃。公元前196年,汉尼拔逃往叙利亚等地,投靠当时正与罗马盟国帕加马交战的比提尼亚国王普鲁西亚斯一世。迫于罗马方面的压力,普鲁西亚斯打算把汉尼拔交出去,汉尼拔决心不落入罗马人之手下,在小亚细亚的俾拉尼亚服毒自尽。