劉邦首戰項羽失利後,又逐漸聚集士卒,重整軍馬。劉邦派使者去九江王黥布那裡遊說,希望黥布能發兵反楚,這樣項羽一定會暫停留在那裡攻擊黥布。只要牽制項羽幾個月,劉邦的勢力就可以恢復,贏得天下。使者的遊說果然奏效,黥布起兵反楚。項羽就派龍且前去攻打他。但是九江王黥布作戰失利,歸附了劉邦。劉邦又漸漸收集士兵,跟各路將領頻頻出動,聲威大振於滎陽,終於在京、索之間擊敗了楚軍。隨後劉邦派韓信擊敗了魏王豹,平定了魏地。
兵敗滎陽
劉邦在滎陽跟項羽互相對峙,持續了一年多。項羽包圍了劉邦,此時漢軍糧食缺乏。劉邦見勝利無望,就請求講和,條件是把滎陽以西的地方劃歸劉邦。項羽的亞父范增勸項羽務必攻下滎陽,項王因此沒有答應劉邦的請求。劉邦十分擔憂,謀士陳平就向劉邦建議說:「項羽不贊成講和,肯定是聽從了范增的讒言,如果離間他們二人的關係,事情就好辦了。」劉邦於是就用陳平的計策,給了陳平黃金四萬斤,用以離間項羽和范增君臣之間的關係。項羽果然對范增產生了懷疑。范增遭到項羽猜疑後,非常憤怒,就托辭年老,希望項羽准許他乞身告退回鄉為民,項羽答應了,范增就返回家鄉了。結果在途中病亡。
劉邦下令趁夜色把兩千多名身披鎧甲的女子放出東門,楚軍從四面追趕圍打。這時將軍紀信乘著劉邦的車駕,假扮成劉邦的樣子誑騙楚軍。楚軍一起高呼萬歲,都到城東去觀看,劉邦借此機會才得以帶著幾十名隨從騎兵從西門逃出。
劉邦逃出滎陽後進入關中,收集士兵準備再次東進。謀士袁生勸說劉邦道:「您如果出兵武關,項羽一定率軍南下,那時大王加高壁壘,拒不出戰,這樣就可以讓滎陽、成皋一帶得以休息。您再派韓信等去安撫河北趙地,把燕國、齊國連接起來,那時大王再兵進滎陽也不晚。這樣楚軍就要多方防備,力量分散,而漢軍得到了休整,再跟楚軍作戰,就必勝無疑了。」劉邦聽從了他的計策,出兵武關。項羽聽說劉邦在宛縣,果然率軍南下。劉邦加固壁壘,不跟他交戰。這時候,彭越又趁機大敗楚軍。於是項羽就率軍東進去攻打彭越。劉邦藉機率軍北進,駐紮在成皋。但項羽仍然勢不可當,先後將彭越和劉邦打得一敗塗地。
重整旗鼓
劉邦兵敗後,只和滕公共乘一車從成皋北門倉皇逃去。他自稱是使者,衝入張耳、韓信的軍營,奪取了他們的軍權。他又派張耳往北到趙地去收集兵卒,派韓信東進攻打齊國。劉邦取得了韓信的軍隊後,重新振作起來,率軍南進黃河,想要跟項羽再戰。郎中鄭忠勸他說:「現在楚兵兵強馬壯,士氣正盛,而我軍與敵人相比勢單力薄,現在作戰勝算不大,不如加深壕溝,增高壁壘堅守,不要跟楚軍作戰。」劉邦聽從了他的計謀,暫時進行休整。等休整完畢以後,派人率兵進入楚地,跟彭越的軍隊一起打敗了楚軍,接著又攻下了梁地的十多座城池。
韓信受命東進伐齊,還沒有渡過平原津,劉邦就暗中派酈食其前去遊說齊王田廣,田廣於是叛楚,與漢和好,答應共同進攻項羽。韓信知道這件事之後,就想停止攻齊,但蒯通勸他還是要攻下齊國,於是韓信聽從蒯通的主意,襲擊了齊軍。齊王氣得暴跳如雷,用大鼎把酈食其煮了,然後向東逃到高密。項羽聽說韓信將要進攻楚國,就派兵攻打韓信,反而被韓信打敗。這時,彭越駐兵梁地,往來襲擊騷擾楚軍,斷絕了楚軍的糧食供給。
項羽為解除後顧之憂,決定先除掉梁地的彭越。他臨行前囑咐部下曹咎說:「你們謹慎守住成皋。如果漢軍挑戰,千萬不要應戰,只要別讓他們東進就可以了。我在十五天之內一定能平定梁地,回來再跟你們會合。」項羽帶兵走後,漢軍果然多次向楚軍挑戰,但楚軍堅壁不出。劉邦派人天天辱罵他們。曹咎氣憤之極,忍無可忍,終於將項羽的囑咐拋至腦後,領兵橫渡汜水(位於今河南滎陽地區)與漢軍決戰。士兵剛剛渡過一半,漢軍奮力出擊,楚軍猝不及防,紛紛掉進河裡而大敗。楚軍將領曹咎、司馬欣都在汜水上自刎了。項羽到達睢陽,聽說曹咎被打敗,就率軍趕回來,但漢軍隨即全部跑到深山險阻地帶去了。