兩翼騎兵混戰的同時,中路的步兵大戰也正式打響。兩軍陣線前沿的輕步兵短暫交火以後迅速後撤,騰出戰場。羅馬軍團繼續穩步向前,一直逼近到距離迦太基陣線30米的距離停下來。兩軍將士近在咫尺互相對視,氣氛緊張得讓人窒息。

突然羅馬陣列爆發出驚天動地的戰吼,然後位於前排的步兵奮力投擲標槍,數千枝標槍騰空而起,飛向迦太基陣列。高盧、伊比利亞士兵毫不示弱,也投擲標槍還以顏色。高盧人身高臂長,投擲的標槍帶著可怖的三棱寬刃槍尖;伊比利亞步兵投出的標槍多種多樣,有鐵質標槍,也有點燃的火標槍。羅馬軍團的標槍齊射極具威力,通常能大量殺傷敵陣前排的士兵。然而此戰羅馬軍團的標槍攢射大多落空,因為漢尼拔精心部署的新月形戰陣裏,隻有最靠前的中央方陣承受打擊,兩側拖後的其他方陣都在標槍射程以外。

兩輪標槍齊射以後,前排的羅馬步兵側身怒吼衝向敵陣,以盾牌猛擊敵兵。後排的步兵緊跟其後,奮力向前推擠。迦太基中央方陣難以抗拒如此凶狠的衝擊,不得不且戰且退。羅馬步兵拿出招牌格鬥姿勢,上身伏低,左腿前跨,左手拎起盾牌架在肩上,右手緊握西班牙短劍,猛刺敵兵胸腹部位。高盧武士則左手以窄長的盾牌招架,右手揮舞長劍大力劈砍。這是一場你死我活的決鬥,雙方前排的士兵隻有兩條路,要麽殺死對手,要麽被對手殺死。即使最勇猛善戰的士兵,連續搏鬥幾十分鍾以後也會筋疲力盡。受傷倒地的士兵不可能被送下前線,因此不是被踩死,就是失血過多而死。

迦太基突前的中央方陣步步後退,兩側拖後的方陣陸續接敵,羅馬軍團推進的阻力越來越大。漢尼拔策馬在中路陣線後麵來回馳騁,大聲呼喊,鼓舞士氣。迦太基將領貫徹漢尼拔的戰役部署,竭力約束部下保持陣線完整,有條不紊地逐步後退。此刻漢尼拔麾下將士麵臨最嚴峻的考驗,隻要有一個士兵承受不了心理壓力轉身逃跑,恐慌就可能傳遍全軍,引發雪崩效應,導致整個陣線的崩潰。塞維利烏斯和亞第利烏斯眼見迦太基陣線不支後退,似乎看到了勝利的曙光,不斷督促士兵前進,並將後排預備隊全部增援中路,企圖一鼓作氣衝破敵陣。

隨著羅馬陣線的向心突擊越來越強勁,迦太基原本前凸的新月形陣式很快被壓縮成一條直線,然後逐漸向後彎曲,形成內凹的新月形。最早接敵的中央方陣遭受慘重傷亡,將士體力已經耗盡,陣型開始瓦解。終於,羅馬步兵如同決堤的洪水一般衝了出來。漢尼拔手中的預備隊隻有剛才撤下來的數千輕步兵,他們迎上前去暫時堵住缺口,但突破進來的羅馬步兵越來越多,缺乏盔甲防護的輕步兵漸漸抵擋不住。前鋒突破敵陣的消息很快傳遍全軍,原本秩序井然的羅馬戰陣到此已經亂成一團,方陣瓦解,戰線消失,將校找不到自己的百人隊長,百人隊長找不到自己的士兵。整個羅馬大軍匯集成一股巨大的人潮,由本能驅使著湧向突破口,每個人心中隻有一個念頭:向前衝,向前衝,衝破敵陣就是勝利。

就在這千鈞一發的生死關頭,漢尼拔的戰前部署開始發揮奇效。事先安排在兩側的利比亞步兵縱列投入戰鬥,他們迅速向前移動,占據羅馬兩翼騎兵先前的陣地,然後集體轉向,猛攻羅馬大軍的兩側。此時的羅馬戰陣已經完全失去了應變能力,加之部署在側翼的是戰鬥力最差的聯盟士兵,因此鮮見有組織的抵抗,隻有三五成群的士兵被動招架敵軍的攻擊。與此同時,7千迦太基騎兵擊潰羅馬左翼以後,運動到羅馬大軍的背後。這裏聚集著從前沿撤下來的15000人的輕步兵。他們裝備最差,年紀最輕,根本沒有抵抗重騎兵衝擊的能力。如狼似虎的高盧、伊比利亞騎兵找到了羅馬戰陣柔軟的腹部,他們揮舞長劍彎刀徑直衝進羅馬輕步兵行列中間,策馬踐踏,左右砍殺。

這一係列突如其來的變故在羅馬大軍中引起普遍的混亂和恐慌,向前的衝擊勢頭頓時衰竭。迦太基中路陣線趁機合攏缺口,反守為攻。羅馬大軍四麵受敵,隨著敵軍步步進逼,羅馬人的空間越來越小,最後士兵們摩肩接踵,擠得水泄不通,個個連短劍都已經舉不起來。史無前例的一支羅馬大軍,成了七萬頭待宰的羔羊;羅馬與迦太基間最引人矚目的大決戰,已經演變成一場屠殺。

這場屠殺持續了幾個小時。迦太基大軍經過苦戰,也已經精疲力竭,士兵的盾牌和戰袍上血跡斑斑,揮舞刀劍有氣無力,真是殺人殺到手軟。漢尼拔的包圍圈拉得太大,將士體力不支,羅馬官兵垂死掙紮,衝開多處缺口,陸續有數萬人奪路而逃,卻遭到外圍的奴米底亞騎兵四麵追殺,幸存者逃進羅馬大營。絕大多數官兵選擇死戰到底,揮灑一腔熱血,忠實履行了戰前的誓言。

傍晚時分,一切都結束了。在方圓不足一平方公裏的戰場上,橫屍五萬餘具。那裏躺著成千上萬的羅馬官兵,人馬的屍體相互疊壓,是時運將他們的歸宿安排在一起。堆積如山的屍體中間偶爾可見血淋淋的身影顫顫巍巍站立起來,那是在戰鬥中受傷昏迷的士兵,淩晨的冷風刺激了他們的傷口,劇痛讓他們蘇醒,但他們很快便被擄掠財物的敵兵隨手砍倒。還有一些倒臥在血泊中的羅馬人依然活著,他們的肌腱和腳筋被敵兵砍斷,一些人竭力伸著脖子,**咽喉,祈求征服者將他們剩下的血放幹;另一些人則掙紮著在地上刨坑,然後將頭埋進坑裏,試圖悶死自己。

羅馬參戰部隊八個軍團,總共陣亡步兵45000人,騎兵2700人;被俘官兵19300人,其中在戰場上被俘4500人,2000人衝破包圍圈逃到坎尼城被俘,另外兩個羅馬大營的12800守軍次日全部投降。八萬餘人的羅馬大軍,隻有14550人成功逃脫漢尼拔的包圍圈和奴米底亞騎兵的追殺。此役羅馬貴族的精英幾乎凋零殆盡。現任執政官艾彌利烏斯、前任執政官塞維利烏斯、前任騎兵統帥米努西烏斯都力戰身亡;參戰的48名羅馬將領陣亡29人;戰役以後,300個席位的羅馬元老院出現166個空缺。

漢尼拔損失4000高盧士兵,1500伊比利亞和利比亞士兵,以及200名騎兵。

坎尼慘敗的消息傳到羅馬,人民萬分悲痛,極度惶恐。至此為止,幾乎每個羅馬家庭至少已有一個壯年男子死於迦太基遠征軍的刀下。全羅馬十七歲以上的男子已有五分之一在一係列敗於漢尼拔的戰鬥中喪生。現在,加上坎尼戰役的大敗,羅馬人懼怕漢尼拔會趁機直取羅馬城。漢尼拔如此地令羅馬人畏懼以致於許多人懷疑羅馬城牆的堅固程度是否足以拒漢尼拔於城外。

曆史上有許多戰役是因為驚恐瓦解了鬥誌而失敗的。在羅馬,這樣的事情不會發生。根據法律建立起來的政府經過幾百年在戰爭與危機中行使職權,不斷得到完善。當此國難,它奮起應付局勢。負有支持軍隊之責的元老院立即開會討論能夠並必須采取什麽行動。為防止由驚恐導致投降。元老院通令禁止全城使用“和平”一詞。哀悼陣亡將士的活動必須在三十天內結束。禁止公開哭泣。

除了這些旨在提高士氣的措施以外,元老院還采取行動加固城防。馬爾可斯·尤尼烏斯·佩拉被指定為獨裁官,提比略·森普羅尼烏斯·格拉古被任命為騎兵統帥。十七歲以上男子全部入伍,由此使城防兵力增加了四個軍團與一千名騎兵。羅馬史上破天荒第一次,奴隸與囚犯也被準予武裝並得到給予自由或赦罪的許諾。然而元老院拒絕向漢尼拔支付贖金以換回他在坎尼俘獲的一萬名戰俘。那些傲慢的元老院議員們宣布,這些俘虜本來就絕不應該投降。為不放過一切機會爭取天佑人助,元老院派出一個代表團前往德爾法的神諭宣示所求神靈啟示羅馬如何才能平息眾神的憤怒,使國家消災除難。