罗马的左翼600骑兵与汉尼拔的1000努米底亚骑兵相对抗,人数相当,所以他们在总指挥官老西庇阿的亲自带领下勇敢地向敌人发动了进攻。不过,努米底亚骑兵的战术与罗马骑兵完全不一样,他们根本没有下马作战的意思,在远距离投出标枪和弓箭后,便迅速脱离战线。
罗马骑兵见敌人杀来,就下马列阵,准备撕杀。可转眼见,努米底亚的骑兵有都掉头退了回去。于是又慌忙上马准备追击,这时敌人换了一个方向飞奔而来,又是一阵箭雨的袭击。一时间左来右往,双方僵持。
汉尼拔的中军在罗马军的猛烈攻击下,已经渐渐地由突起的弓形阵变成一条直线,进而又向后凹陷下去。那里的西班牙兵就象防弹玻璃中的高分子材料一样,吸收缓解冲击的能量,并将已经破碎的玻璃紧紧地粘合在一起,虽然那玻璃已经在枪弹的猛烈冲击下已经凹陷,却不会破裂。
副指挥官鲍鲁斯见中军就要得手而右翼的骑兵已经不支,他作出了可以决定胜负的关键决定,不去支援崩溃的骑兵轻装阵,而是亲自带领一部分侧翼将士突入中军援助,希望能够在汉尼拔的骑兵取得全面胜利之前将敌人的中心撕开一个缺口。这时两军都在与时间作战,看谁能够坚持的住,谁能够先达到战略目的。
哈士杜巴在击破罗马右翼骑兵后,只派少数骑兵继续追击溃逃的罗马兵,主力则从罗马阵后向罗马军左翼奔去,从背后向罗马军左翼骑兵发动突然袭击。在哈士杜巴骑兵和努米底亚骑兵的前后夹击之下,罗马左翼骑兵彻底崩溃,他们在老西庇阿的指挥下,拼死突围,狼狈地向西面退去。哈士杜巴见罗马骑兵已经完全溃败,就让努米底亚骑兵执行追击任务,自己则带领麾下骑兵开始从背后进攻罗马军。
此时,汉尼拔的中军已经退成一个巨大的凹字,形同一只大海碗,两侧的罗马军纷纷向中间靠拢,希望扩大战果,眼看就要支撑不住。这时在两侧一直不动如山的伊比利亚步兵在汉尼拔的号令之下开始前进,同时,等待在阵后的轻装兵向两翼分流,加入伊比利亚步兵的战阵,一同从两侧向中间进攻,将罗马军的两翼赶进“碗”里去了。
一切的时机都经过汉尼拔的准确计算,几乎分秒不差,恰恰在这个当口,哈士杜巴的骑兵返回,将“碗”口封闭,于是整个罗马军就被汉尼拔装进了他所设下的完美的包围圈。四面受敌的罗马军正面的突击能力顿时减小,整个战线被压缩,渐渐地士兵之间的空隙越来越小,罗马相继失去了特有的机动性和作战能力。虽然副指挥官鲍鲁斯拼命鼓励士气,可是他们哪里转动的开?
于是战斗的结局已定,虽然罗马将士个个奋勇异常,在失去队形没有机动力的情景下,被汉尼拔军从外围一点一点地切割,激烈的拼杀一直持续着。很快,没有面对过汉尼拔军团的,数量已经不足2000的希腊军团选择了逃跑。这让一直在希腊军团侧翼的狼之军团遭到了汉尼拔军团中的伊比利亚步兵的毁灭性打击;而希腊军团的残兵也在返回的努米底亚骑兵的追击下死伤殆尽。
惨烈的战斗直到黄昏时分才结束,七个罗马军团与一个希腊军团的联合大军被彻底摧毁!