漢尼拔率領9萬名步兵,1.2萬騎兵和幾十頭戰象,強渡希伯魯斯河,擊敗卡諾尼亞部落,越過庇里牛斯山,長途跋涉到阿爾卑斯山下。由於已是9月,山區已經降雪。山高坡陡,氣候惡劣,沿途又有土著部落不斷侵襲,行軍非常艱難。不少馬匹和將士滑落山谷,有的在戰鬥中犧牲。經過33天的艱苦努力,漢尼拔終於征服了阿爾卑斯山,到達義大利北部。此時,漢尼拔只剩下2萬名步兵、6000名沒馬的騎兵和一頭戰象了。
經過短暫的修整,漢尼拔的大軍主動出擊。羅馬人驚惶失措,以為漢尼拔是從天而降,倉促迎戰,結果被打得大敗。這一勝利使徘徊觀望的高盧人很多轉到了漢尼拔的部隊。
為打擊羅馬心臟地區,漢尼拔繞過敵人重兵布防的要塞,悄悄穿越托斯坎納沼澤。沼澤的毒氣,差點熏瞎了漢尼拔的眼睛。但他終於踏上了通向羅馬的大路,把羅馬大軍丟在了深谷。
漢尼拔料定敵軍必然追趕,就在特拉西美諾湖畔山谷布下了天羅地網,把羅馬4個軍團近3萬人的隊伍引進了三面環山,一面臨湖的峽谷中,不到3小時漢尼拔的軍隊結束了戰鬥。羅馬損失慘重,執政官戰死,1萬5千人陣亡,幾千人被俘,僅剩6千人衝出重圍,逃入附近的一個村莊。漢尼拔的士兵窮追不捨,在繳械留命的條件下羅馬士兵全部投降了。漢尼拔區別對待俘虜,命令給羅馬士兵全部帶上枷鎖,立即釋放了無羅馬公民權的義大利人。
羅馬被驍勇善戰的漢尼拔嚇破了膽,他們甚至不敢與漢尼拔正面交鋒。直到公元前216年,雙方才在康奈再次展開決戰。漢尼拔以4萬人對陣8萬人,他巧布口袋陣,把羅馬軍隊壓縮在一個狹小地帶,以6000人的代價,幾乎將敵軍全部殲滅。羅馬一時陷入極其危險的境地。
羅馬的危機使元老院異常震驚和憤怒。他們採取了最危險也最無奈的措施:年滿17歲的青年全部徵召入伍,並出錢贖買了8000個奴隸。這樣,羅馬軍隊再次被武裝了起來。新任獨裁官費邊不與漢尼拔直接交鋒,而是伺機打擊他的後衛部隊,攔截糧草、破壞兵源。隨著時間的推移,漢尼拔孤軍深入的弱點逐漸顯露出來,兵力和糧食的補給日益困難。不得已民,漢尼拔只好退兵回國。
公元前202年,漢尼拔率軍在迦太基的扎瑪與羅馬軍會戰。這一仗是漢尼拔第一次也是最後一次的敗仗。羅馬最終成了西地中海的霸主。
公元前196年,漢尼拔出任迦太基最高行政長官。實行了許多重大改革。但這些改革措施遭到貴族寡頭們的強烈反抗。他們向羅馬政府告密,誣陷漢尼拔準備發動新的反羅馬鬥爭。漢尼拔被迫逃亡在外。
漢尼拔先後到達敘利亞等地,想聯合西亞諸國打敗羅馬。他的努力非但沒有結果,反而給羅馬進攻亞洲提供了藉口。漢尼拔65歲那年的一天,他發覺自己的住所被人包圍,想到自己征服世界的美夢終將不會實現,他吞下了隨時攜帶的毒藥。