Из 70 пушек у шведов осталась всего одна. В этой крайности Петр предложил коменданту Горну сдаться, но тот прислал гордый и обидный отказ. Петр велел прочесть его перед войском. Озлобленные солдаты требовали, чтоб их вели на приступ. Военный совет определил приступу быть. 9 августа начался штурм. Шведы открыли огонь, осыпали русских бревнами, бочками и камнями. Но те, не смущаясь этим, в три четверти часа со всех сторон взошли на стены и погнали шведов до самого Старого города, куда Горн скрылся вместе с остатками гарнизона. Он запер ворота и в знак сдачи повелел ударить в барабаны. Однако солдаты резали на улицах всех, кто им попадался, не слушая начальников. Петр кинулся между ними с обнаженной шпагой и заколол двух ослушников. Потом, сев на коня, обскакал нарвские улицы, грозно повелевая прекратить убийства и грабежи, расставил повсюду караулы и прибыл к ратуше, наполненной трепещущими гражданами. Между ними Петр увидел и Горна, в жару своем он дал ему пощечину и сказал гневно: «Не ты ли всему виной?» Потом, показывая шпагу, обагренную кровью, добавил: «Смотри — эта кровь не шведская, а русская. Я своих заколол, чтобы удержать бешенство, до которого ты довел моих солдат своим упрямством».
В последующие годы война велась не так интенсивно. Карл сумел наконец победить Августа и заставил его отречься от престола. Из Польши военные действия переместились в Белоруссию, а потом на Украину. В июле 1708 г. Карл занял Могилев и засел здесь надолго: он дожидался прихода генерала Левенгаупта из Лифляндии с 16 000 войска, артиллерией и провиантом; дожидался еще вестей об обещанном ему гетманом Мазепой восстании в Малороссии против царя. Вследствие скудости продовольствия шведы очень страдали от голода. Положение мог бы исправить Левенгаупт с его транспортом, но тот продвигался чрезвычайно медленно. В начале августа, так и не дождавшись его, Карл выступил из Могилева и направился на юго-восток. Поход был очень тяжел для голодного войска по опустошенной стране. Солдаты сами должны были снимать с поля колосья и молоть их между камнями. Из-за непрерывных дождей всюду была распутица и грязь.
Петр не преследовал его и обратил все силы на Левенгаупта. 27 сентября он настиг шведов недалеко от Пропойска у деревни Лесной. Упорный бой продолжался пять часов. Наконец русские ударили в штыки, овладели всей артиллерией и почти всем обозом. Ночь и вьюга спасли остатки шведского войска. Бегущие шведы вплавь переправились через Сож, бросив те телеги, которые еще оставались у них. Левенгаупту, впрочем, удалось собрать еще около 6 тысяч человек, с которыми он прибыл в лагерь Карла. Однако шведский король лишился провианта, на который так рассчитывал.
Весной 1709 г. Петр ездил в Азов. Здесь к нему пришло известие, что Полтава осаждена, что Карл несколько раз приступал к городу и держит его в сильной блокаде. 27 мая Петр выехал из Азова через степь на Харьков. 4 июня он был уже при армии. С этого момента заговорили о генеральном сражении. 20 июня русская армия переправилась через Ворсклу, расположилась лагерем и стала укреплять его шанцами. Петр оттягивал начало сражения, дожидаясь прибытия 20 тысяч калмыков, но Карл, узнав об этом, приказал двинуть войско в битву. Рано утром 27 июня еще до восхода солнца шведы пошли в атаку с намерением опрокинуть русскую конницу, стоявшую перед лагерем. Для этого им пришлось пройти сквозь редуты под сильным огнем русской артиллерии. Русская конница отошла, и шведы угодили под еще более убийственный огонь из лагеря. Господство русской артиллерии было подавляющим. Левенгаупт должен был прекратить преследование и отступил в лес.
Воспользовавшись затишьем, Шереметьев вывел пехоту из лагеря и построил ее в две линии против шведов. На флангах поставлена была кавалерия.
Петр объехал с генералами всю армию, ободряя солдат и офицеров. «Вы сражаетесь не за Петра, а за государство Петру порученное, — говорил он, — а о Петре ведайте, что ему жизнь не дорога, только бы жила Россия, слава, честь и благосостояние ее!» В 9 часов битва возобновилась. Армии сошлись вплотную, и начался рукопашный бой. Петр распоряжался в самой гуще, не избегая опасности: одна пуля прострелила ему шляпу, другая попала в седло, а третья повредила крест, висевший у него на груди. Через два часа шведы дрогнули по всему фронту. Карла с больной ногой возили между солдатскими рядами, как вдруг пушечное ядро ударило в коляску, и король очутился на земле. Солдаты, находившиеся вблизи, подумали, что Карл убит, и ужас овладел полками.