Ганнибал вывел на поле сражения свою армию в шести колоннах. Две средних, общим числом 20 тыс., образовывались более слабой испанской и недавно навербованной галльской пехотой. Их окаймляли две колонны по 6 тыс. африканских испытанных ветеранов. Наконец, фланговые колонны были чисто кавалерийские - на левом фланге вся тяжело вооруженная конница - кирасиры Газдрубала, на правом - легкая, преимущественно нумидийская конница. Всего карфагенская конница насчитывала 10 тысяч коней. Равное с римлянами число легковооруженных маскировало фронт Ганнибала.
Стремясь к уничтожению врага, Ганнибал против могущественного римского фронта - 16 легионов - развернул только 20 тысяч человек своих средних колонн. Эти части должны были выдержать весь римский натиск; на них легли самые тяжелые потери. Большой соблазн был развернуть здесь самую надежную пехоту, так как оттого, выдержит ли она римский удар, зависела возможность выполнения плана Ганнибала - окружения неприятеля. Но Ганнибал не принес в жертву настоящему будущее и не развернул здесь своей африканской гвардии, потери в которой возместить было нельзя. Чтобы дать моральную упругость испанцам и галлам, Ганнибал со своим братом Маго и штабом расположился за ними, в центре: его сравнительно молодые солдаты дрались непосредственно на его глазах. Африканская пехота, предназначенная для удара на оба фланга неприятеля, осталась неразвернутой в колоннах за стыком между пехотой центра и кавалерийскими крыльями и приступила в выполнению маневра по особому приказанию Ганнибала. Левое кирасирское крыло предназначалось для производства решительного маневра; однако, если преждевременно побить и прогнать римскую конницу, когда римская пехота еще не ввязалась в бой, то этим неприятельскому полководцу была бы предоставлена возможность уклониться от боя и отступить. Конница должна была нанести удар в ту минуту, когда пехота уже настолько сблизится, что уклонение от боя станет невозможно.
Начался бой. Газдрубал с кирасирами опрокинул римских всадников, выслал отряд на помощь нумидийцам, которые вели бой с римскими всадниками левого крыла, и заставил и здесь римскую конницу бежать и предоставить легионы их участи. Главная же масса конницы Газдрубала бросилась на тыл римской фаланги и заставила сначала повернуться назад задние шеренги триариев, а потом остановиться и всю фалангу.
На фронте, после короткого боя легковооруженных, римляне решительно атаковали галлов и испанцев, нанесли им большие потери и заставили карфагенский центр попятиться. Личное присутствие здесь Ганнибала удержало галлов от разрыва фронта и бегства. В решительную минуту, под влиянием удара с тыла, римская фаланга остановилась.