项羽在巨鹿之战消灭秦军主力后,也率军向关中进发。公元前206年12月,听说刘邦已平定关中,刘邦的属下曹无伤对刘邦很不满,他暗地里派人向项羽挑拨说:沛公刘邦想在关中做王,让子婴做宰相,自己将秦的财物都纳入私囊。项羽大怒,当即命当阳君英布攻破函谷关。范增也劝项羽趁机除掉刘邦这个对手。项羽就下令准备,要在第二天进攻。这时的刘邦在兵力上无法和强大的项羽相抗衡,他只有10万军队,不可能战胜项羽的40万精兵。大难临头之际,刘邦却迎来了一位救星。
这个救星恰恰就是项羽的叔叔项伯。刘邦的谋臣张良曾经救过项伯一命。项伯听说项羽马上就要进攻刘邦,就潜入刘邦军中,想把好友张良带走。张良却说:沛公有难,我不能走,除非把这个事情告诉他。张良将事情的严重性告诉了刘邦,刘邦要张良赶快考虑对策。张良说:你现在应亲自对项伯说明,你不敢背叛项王。刘邦为感激项伯便与项伯约为儿女亲家,然后说:我入关之后,秋毫不犯,登记吏民,封存府库,以待将军。之所以遣将守关,是为防备盗贼和其他意外。我日夜盼望将军到来,怎么敢反叛呢!希望您能替我向将军解释这个情况。并表示次日即向项羽赔礼。项伯即连夜返回,把刘邦的话回明项羽,并劝告说:是刘邦先破关中,你才有机会进入关中,刘邦立了大功,应该好好待他。项羽遂同意取消进攻计划。
第二天早上,刘邦率张良、樊哙和100多个骑兵来到项羽的驻地鸿门,向项羽赔礼。项羽宴请刘邦,席上明争暗斗,剑拔弩张,演出了历史上著名的鸿门宴。项羽要借此时机杀了刘邦,却被刘邦借故脱身躲过。鸿门宴后,项羽即率兵西屠咸阳,杀秦王子婴,烧秦宫室,掳掠财物、妇女,然后东归。因楚怀王坚持誓言——先入关者王,逆了项羽的心思,公元前206年5月,项羽以最高统帅的身份,佯尊楚怀王为义帝,立诸将为王、侯,诸侯王共分封了18个。项羽自立为西楚霸王,管辖梁、楚九郡,都彭城,立刘邦为汉王,管辖巴、蜀、汉中41县,居地南郑(今陕西南郑)。
4月,项羽遣诸侯各自就国,刘邦也只好前往南郑。项羽当时只给了他3万士兵,加上自愿随从的几万人,也不到10万人。为了防备其他诸侯的袭击,同时,也为了向项羽表示不再东出争夺天下,刘邦接受张良的建议,把通往汉中的栈道烧了。这样,从陈胜开始反秦到秦灭亡,长达3年的战乱暂时平息。
刘邦身居南郑并不满足汉王的封号,只是鉴于势单力薄,暂时没有反对项羽。而到了南郑之后,一方面刘邦所率士卒不服水土,思念东归,他必须立即决断;另外,由于分封不均,齐国田荣起兵反叛,陈余打败张耳立歇为赵王,诸王反叛项羽也为他提供了东进的机会。刘邦决定出关与项羽一决雌雄,恰好丞相萧何又向他推荐将才韩信,认为必欲争天下,非信无可与计事者,他便任命韩信为大将。刘邦让他全权部署作战计划。公元前206年5月,刘邦以萧何为丞相,留守巴蜀,安抚后方,自己则和韩信率领大军暗渡陈仓(今陕西宝鸡东),很快占领了整个关中,楚汉战争正式爆发。
公元前205年,正当项羽与齐、赵激战时,刘邦率兵出关向中原进军。汉军声势浩大,共56万人,东向伐楚,次年4月,攻下了彭城。
项羽听说刘邦已经占领彭城,便率领精兵3万,急返彭城。结果,项羽大破汉军,汉军沿谷、泗二水退逃,被杀死十几万人。又在灵璧(今安徽省东北)东濉水上被项羽追上,十几万汉军被杀死,濉水为之不流。刘邦仅与数十骑逃脱,项羽还从沛县掳来刘邦的父亲、妻子做人质。各路诸侯看到刘邦大败,纷纷叛离。
刘邦退到荥阳之后,萧何从关中派来部队增援,韩信也收拢散余军队来会合。汉军重振旗鼓,在荥阳南边打败了项羽,两军在荥阳一带开始对峙。后来,刘邦策反了项羽的大将英布,分化了项羽的兵力。但是后来项羽派兵侵扰汉军的运粮通道,最终将荥阳的汉军围困起来。刘邦只好向项羽求和,提出以荥阳为分界线,荥阳以西为汉。项羽想答应刘邦,但范增却不同意,说现在正是消灭汉军的好时机,错过这个机会,放虎归山,就后患无穷了,项羽于是又开始攻打荥阳。刘邦认为范增是项羽的重要谋臣,必须除掉他,才能击败项羽。刘邦就采用了陈平的离间计,待项羽派使者来劝刘邦投降时,刘邦就让人先摆出盛情款待的样子,送去精美的食品,及见了使者,又故意惊奇地说:我们听说是亚父的使者来了,原来是项王的使者啊。接着就将精美的食品撤了下去。结果使者非常生气,回去便告诉了项羽。项羽信以为真,从此不再听范增的意见了,怀疑他背叛自己,私下和刘邦交往。
范增得知内情,勃然大怒,对项羽说:大王您自己多保重,我还是回老家做一个平民百姓吧!范增负气离开了项羽,但没能到达彭城,就病死在半途中。
范增走后,项羽加紧进攻荥阳,刘邦只好设法从荥阳突围。大将纪信自告奋勇,替刘邦向项羽假投降,让刘邦趁机逃脱。纪信乘坐着刘邦的车出东门假降,刘邦则从西门出城突围。纪信将项羽的大部分军队吸引住,使得刘邦脱身,结果项羽一气之下将纪信烧死。
拿下荥阳之后,项羽又占领了成皋(今河南荥阳氾水镇)。后来刘邦集中兵力将成皋收回,然后围困荥阳。项羽回师救援,和刘邦在荥阳东北部的广武山一带对峙,时间长达几个月。项羽急于和刘邦决战,因为刘邦的粮草供应顺畅,而他的粮草供应却常遭到彭越的袭击。为了尽早结束战斗,同时迫使刘邦投降,项羽就把原先俘获的刘邦的父亲押到了两军阵前,他对刘邦说:你如果再不投降,我就把你的父亲杀了!
刘邦心中愤怒,却表现得不以为然,笑眯眯地对项羽说:我和你曾经'约为兄弟',所以我的父亲就是你的父亲了。如果你一定要煮了我的父亲,那就请便吧。不过,别忘了给我也留一碗肉汤。项羽气得七窍生烟,当场就下令要将刘邦的父亲杀死。项伯急忙上前劝道:将军,现在天下归谁,我们无法预料,何况争天下的人都是不顾家人生死安危的,杀了他的亲人也起不了多大作用,相反会增加双方的仇恨。项羽只好命人将刘邦的父亲带回去。
知道杀刘邦的父亲不灵,项羽又要与刘邦单独决斗。刘邦没有上他的当,却说:我和你只斗智,不斗勇。接着骂项羽有十大罪状,第一,你负前约,没有让我称王天下,而是称王蜀汉;第二,你杀死上将军宋义,取而代之;第三,你救赵之后,本该息兵,却进军关中;第四,火烧阿房宫,中饱私囊;第五,你杀死秦王子婴;第六,你坑杀秦的投降士卒20万;第七,对诸侯王分封不公;第八,将义帝赶出彭城,自己占为都城;第九,你暗害义帝;第十,不但以臣杀主,政事也不公平。我现在率领众将领来诛杀你这残忍的逆贼,何必非要和你单独决斗呢!项羽听了,气得拉弓射了刘邦一箭,虽正中刘邦的胸部,但却被刘邦逃过死劫。
刘邦和项羽在对阵了10个多月之后,刘邦有幸得到关中和蜀地的支援,逐渐占了上风。而项羽则兵源缺乏,粮草不足,难以和汉军抗衡。在侯公的撮合下,项羽和刘邦定下了停战协定:楚汉以鸿沟(今河南荥阳中牟、开封一带)为界,东西分治。协定达成之后,项羽将刘邦的父亲和妻子送还。项羽领兵东返,刘邦也打算领兵回关中。张良和陈平则极力劝说刘邦趁机灭掉项羽,因为这时项羽兵不精、粮不足,让项羽回到彭城,等于是放虎归山。刘邦立即命令追击,同时派人命韩信和彭越合击项羽。
公元前202年10月,刘邦的军队在固陵(今河南太康西)追上了项羽,然而,韩信和彭越的军队还没有到达。项羽向汉军猛烈反击,将汉军击溃。刘邦只得坚守不出,问谋士张良有何良策。张良说大王如果能封给韩信齐地(今山东北部和河北南部),封给彭越梁地(今河南商丘等地),那他们两个肯定会火速进兵。刘邦按张良的主意给韩信和彭越许诺,在击败项羽后立即封他们为齐王和梁王,这正合俩人心意,所以,韩信和彭越也很快有了回音——立即进兵。同时,楚的大司马周殷也被刘邦派人劝降,淮南王英布也领兵赶来会师。汉军会合各路援军共30万,和项羽决战垓下。夜里,围困项羽的汉军唱起了楚国苍凉的歌,使项羽以为汉军已占有全部楚地,走投无路的项羽在帐营中和心爱的虞姬饮酒,乘着酒力慷慨而歌:力拔山兮气盖世,时不利兮骓不逝。骓不逝兮可奈何,虞兮虞兮奈若何!虞姬唱道:汉兵已略地,四放楚歌声。大王意气尽,贱妾何聊生。
虞姬含泪自刎,项羽率领800骑兵趁夜突围。第二天早晨,汉军才发现项羽已经突围而去,刘邦命令灌婴率骑兵火速追击。项羽在渡过淮河后,身边只剩下了100人,到达阴陵时,因为迷路走入大泽之中。从大泽出来后,项羽向东撤退,在东城被灌婴的骑兵追上。项羽的随从只有28人了,和汉军激战三次,杀伤几百汉军后,项羽最后横剑自刎。至此,楚汉战争以项羽的失败而结束。