秦朝滅亡後,先後起兵的劉邦和項羽基本上控製了全國的局勢,兩股勢力開始混戰。項羽覺得自己的勢力超過劉邦,想由自己來統治天下。他背叛了前約,首先改稱楚王為義帝,徹底剝奪了楚王的權力,接著又在手下將領的支持下著手封王。他封自己為西楚霸王,天下其他王都歸他管轄。為了削弱劉邦的勢力,項羽把當時最偏遠的巴、蜀、漢中一帶封給劉邦,並稱劉邦為漢王。
漢王劉邦前往封地,項羽分給他的三萬士卒跟從他,跟從他的還有楚軍和諸侯軍隊中仰慕漢王的將士。為了迷惑項羽,漢王的軍隊焚燒了東去的棧道,以向項羽表示漢王的軍隊沒有向東進攻的意思。其實,踞守封地的他正在蓄積力量,準備東伐。而這時的項羽因為殺了義帝楚王備受指責,屬下的諸侯互相之間也出現了紛爭。見時機有所成熟,劉邦聽從了韓信的建議,經過原先來漢中的棧道,進攻關中,擊敗了項羽屬下的幾個諸侯國。隨即,劉邦向東進軍,攻城略地,先後讓塞王司馬欣、翟王董翳(yì)、河南王申陽等歸順。韓王鄭昌不服漢王,劉邦便派韓信率兵打敗了他,改韓國太尉信為韓王。各個將領如果是率領了一支萬人軍隊,或以一郡之眾向漢王的軍隊投降的,都封為萬戶侯。民心越來越傾向於劉邦。
劉邦在臨晉縣(在今陝西省大荔縣東)渡過黃河,占領了河內地區,俘虜了殷王。隨後向南又渡過了平陽津,到達了洛陽。洛陽的三老董公攔住劉邦,向他訴說了義帝楚王被殺的經過。劉邦聽畢,袒露著左臂大哭,還為義帝發喪,親自主持了三天的祭奠。民心更加傾向於他了。劉邦派使者向各位諸侯王說:“天下諸侯當時共同擁立了義帝,我們都作為臣子而侍奉他。如今項羽把義帝流放到江南並殺害了他,實在大逆不道。因此,我要發動關內所有軍隊,會集河南、河東、河內三郡的士兵,坐著戰船順著長江、漢水南下,希望和各諸侯王一起征討殺害義帝的人。”
在以後的幾年中,項羽和劉邦兩股勢力征戰不休。由於項羽的實力較強,劉邦不得不經常遭受失敗。直到成皋(ɡāo)(在今河南省滎陽市境內)一戰,項羽大敗,劉邦與項羽便互相講和,劃定了楚漢邊界,它就是鴻溝,鴻溝以西歸劉邦,鴻溝以東歸項羽。在謀士張良、陳平的勸諫下,劉邦抓住項羽的弱點,漸漸擁有了大半個天下的土地。項羽卻顯出強弩之末的頹勢。公元前202年,劉邦率兵在垓(ɡāi)下(在今安徽省靈璧縣東南沱河北岸)把項羽最後一支強兵團團圍住。項羽見大勢已去,不得不敗退。劉邦派騎將灌嬰追趕項羽,並殺死了他。當項羽的首領展示給項羽手下的將士們看,他們才確信項羽已死,便都投降了。項羽埋葬在了穀城。
戰爭已經結束。就在這一年的正月裏,劉邦手下的大臣和將領們聚集在一起,共同請求劉邦登上皇帝寶座,君臨天下。劉邦卻說:“我聽說皇帝的稱號隻有具有賢德的人才能據有,沒有賢德而隻喜歡空談的人,是沒有資格據有的。我不敢擔當帝位。”群臣們便都勸他:“大王從最低微的平民崛起,誅除暴逆,平定四海,對於有功的人就分給土地,封為王侯。大王您如果不接受皇帝的尊號,那麼功臣們對大王的封賞就會懷疑。我們甘願冒死,也要堅持求您接受皇帝的尊號。”劉邦又推辭再三,見實在推辭不去了,才說:“各位如果一致認為我作為皇帝比較有利,那麼為了國家的利益,我就接受這個尊號吧。”就這樣,劉邦在汜(sì)水(在今河南省北部)北岸,登基成為皇帝,史稱漢高祖。