Тем временем пунийская армия подошла к Тразименскому озеру и начала обходить его по северному берегу, неподалеку от города Кортоны. В этих местах горы подходят к самой воде, оставляя для прохода узкую долину, в которой Ганнибал и решил устроить засаду. Поскольку указания наших источников об особенностях местности довольно скупы, расположение карфагенской засады вызвало среди ученых долгие споры, породившие несколько не согласующихся между собой версий. Из них более предпочтительной кажется теория Коннолли, учитывающая произошедшие с того времени изменения уровня воды в озере и предлагающая в качестве места битвы серповидную долину между современными Туоро и Пассиньяно.
Пройти в нее можно было по узкой, зажатой между гор дороге, которая затем тянулась вдоль озера, а выход из долины прикрывал большой холм. На нем-то Ганнибал и устроил свой лагерь, а ночью стал расставлять армию для битвы. В лагере осталась только ливийская и иберийская пехота (около четырех и шести тысяч соответственно), балеарских пращников (около двух тысяч) и копейщиков (около восьми тысяч) он поставил также у выхода из ущелья, но ближе к озеру, с правой стороны от дороги, а кельтов (около двадцати пяти тысяч) и конницу (около десяти тысяч) расположил в отрогах гор, идущих вдоль озера, так что их правый фланг прикрывал вход в ущелье.
Утром 21 июня римская армия, всего около тридцати тысяч пехоты и трех тысяч конницы (Аппиан, Ганнибал, 8), не выслав разведки, начала втягиваться в долину. День был ненастный, с утра над озером повис густой туман, дававший лишнее преимущество карфагенянам, снизив и без того малую вероятность обнаружения их засад.
Римляне заметили противника только в тот момент, когда голова их колонны буквально натолкнулась на стоявших в боевом порядке пунийцев, перекрывших выход из долины. Сразу же за этим последовала команда Ганнибала атаковать всему войску. Ловушка захлопнулась. Римляне оказались под ударом с фронта, фланга и тыла. Туман мешал правильно оценить обстановку, и многие легионеры погибли, не успев ни толком построиться, ни даже изготовить оружие. Командиры, и в первую очередь сам Фламиний, пытались восстановить порядок, и Ливий пересказывает красивые слова, якобы произнесенные тогда консулом: «Мы спасемся не молитвами и обетами, а доблестью и силой. Пробьемся мечом через вражеские ряды: чем меньше страха, тем меньше опасности» (Ливий, XXII, 5, 2), однако все было напрасно, в рядах римской армии царил хаос: «Люди оборачивались на стоны раненых, на крики схватившихся врукопашную, на смешанный гул голосов, грозных и испуганных. Одни, убегая, наталкивались на сражающихся и присоединялись к ним; других, возвращавшихся на поле боя, увлекала за собой толпа бегущих. А бежать было некуда; справа и слева горы и озеро, спереди и сзади вражеский строй – вся надежда на себя и на свой меч. Каждый стал себе вождем и советчиком; …дрались, где кто оказался по воле случая или по собственному выбору – впереди или сзади, – и так были захвачены боем, что никто и не почувствовал землетрясения, которое сильно разрушило италийские города, изменило течение быстрых рек, погнало в них море, обрушило и сокрушило горы» (Ливий, XXII, 5, 4–8; о землетрясении упоминают также Плиний Старший и Цицерон).
Несмотря на практически безвыходное положение, римляне продолжали отчаянно сопротивляться и держались почти три часа. Фламиний сражался наравне со всеми, подавая пример своим воинам. Один из инсубрских всадников, Дукарий, ранее видевший консула, теперь узнал его в лицо и, горя желанием отомстить за нанесенное им за несколько лет до этого поражение, ринулся на Фламиния. Зарубив попытавшегося было остановить его консульского оруженосца, он добрался до Фламиния и пронзил его копьем.
После этого сопротивление прекратилось и римляне пытались найти спасение в бегстве. Из них немногим удалось выжить или избежать плена. Те, кто бросался в озеро и пытался плыть, тонули под тяжестью доспехов, другие останавливались, когда вода доходила им до горла, и гибли под мечами подъезжавших к ним пунийских всадников. Скрыться в окружающих горах тоже оказалось невозможно: их склоны были слишком круты, а в низинах были враги. Спастись из котла удалось части авангарда, насчитывавшей меньше шести тысяч человек. Они смогли прорваться вперед и, не зная из-за тумана общий характер битвы, остановились на вершине одного из холмов, чтобы подождать ее итога. Когда же масштабы разгрома стали ясны, они попытались уйти, но на следующий день были настигнуты у одной из деревень пунийской конницей во главе с Магарбалом, которой, не имея возможности сопротивляться, сдались под гарантии сохранения жизни.