两军在湖中择日再战。朱元璋亲自布阵,利用小船灵活的优势围绕着汉军的巨舰进退自如,轮番进攻。汉军战死及溺毙者无算。同时,朱元璋军队的伤亡也很严重,例如院判张志雄因所乘的船只折断了桅杆而失控,他为了避免被手持铁钩攻到面前的汉军活捉,毅然自刎。最奇怪的是一位名叫丁普郎的将领,死时身上有数十个伤口,他那失去了脑袋的身体仍然扶持着兵器摆出战斗姿势,屹立不倒。一连数天,激烈的战斗一直在进行着。不知不觉间竟然吹起了东北风,朱元璋不失时机,指挥敢死队员,驾驶着七条装满火药与芦苇的船只(船中还放满了身披盔甲、插上兵器的稻草人,伪装成进攻的模样),闯进汉军的水寨,焚烧了数百艘首尾相连的舰只,还烧死了陈友谅的两个弟弟及一批将领,朱元璋军队乘胜追击,斩首2000余级。
就这样,鄱阳湖上杀声震天,双方全都打红了眼,尸浮水面,血染湖赤,便宜了水中的鱼虾鳖蟹。朱元璋的军队经常驾驶着白船,满载着铳炮弓弩、轮流仰射汉军高大而转动不便的红船。经过反复较量,汉军形势渐渐不利,欲退往鞋山(今大孤山),但遭到朱元璋水师的阻挡,陈友谅只得敛军自守,高挂免战牌,不想再战。
至此,战局逐渐明朗,朱元璋突然在夜间将水师移至左蠡(今江西都昌县西北),汉军发觉之后,也跟着将水师移泊潴矶(今星子南70里),双方相持数日。陈友谅军心不稳,两员得力大将在此期间投降了朱元璋,朱元璋乘机派军队加强封锁鄱阳湖至长江的出口,力图扼住陈友谅的归路,并出兵攻克了蕲州及兴国两地,俘获了数十艘巨舰。
成了瓮中之鳖的陈友谅,粮食基本已经吃完,只好出动五百艘舰只前往湖畔的都昌抢掠,刚抢了一点粮,还没来得及分吃,不巧又被洪都的朱文正秘密派出的军队放火烧光了。
穷途末路的汉军,只能孤注一掷,准备发起攻击,企图突出朱元璋军队封锁住的长江口。最后决战的时刻来临了,朱元璋下令将所有战舰的门钉死,楼船也要撤掉上下的梯子,使参战将士毫无退路,他又抢先发动攻势,命令士兵们顺着西风出力摇撸,使舰队好像山洪爆发一样飞速向汉军水师冲了过来。当朱元璋军队的白船距离汉军的红船300步左右时,便开始用远程兵器进行投射,越接近时火力越猛烈,各种火铳、将军筒、弓箭,甚至标叉等轮番交替而上。火力处于劣势的汉军,有的以板牌遮身,有的伏下,有的躲藏起来,有的转身逃跑,但是,在陈友谅的严厉监督下,有些人还是继续勉强支撑下去。