去打漢中的張魯,為此他給劉備補充了人馬,又把成都北面白水關的駐軍劃歸劉備指揮,劉備所部人馬達到了三萬多人,武器裝備等軍用物資也很充足。劉璋回到成都,讓劉備駐軍葭萌關,此關位於如今四川省廣元市昭化鎮,這裡與川北另一個著名關口劍門關僅幾十裡,劉璋想讓劉備以此為基地展開對張魯的攻擊。
劉璋淨想好事了,他忽略了一個事實:別人也不傻,更何況這個“別人”是老江湖劉備。
劉備到了葭萌關,根本不考慮進攻張魯的事,而是“厚樹恩德,以收眾心”。
建安十八年(213年)曹操率大軍進抵濡須口,孫權向劉備這個新妹夫發出聯合行動的請求(曹公徵孫權,權呼先主自救)。劉備此時遠隔千山萬水,且壓根沒有援救孫權的打算,但他覺得這是一個機會,可以利用一下。
劉備派人告訴劉璋,說曹操攻吳,同時派樂進攻關羽,如果不及時援救,荊州將有失,這件事的緊急程度目前大於徵張魯(其憂有甚於魯),因此請求劉璋再撥一萬人馬,以及後勤物資,讓自己率軍回援荊州。
劉璋又花錢又出人,目的是讓劉備打張魯,現在事情沒有任何進展,劉備倒有趁機溜走的嫌疑,心裡很不痛快,但也不便撕破臉,他只給劉備湊了四千人馬,所要物資也都減半提供。
按說你沒給別人辦任何事,現在這些是人家白給的,已經很不錯了,但劉備抓住把柄大做文章。據《魏書》說,劉備故意激怒手下的人說:“我替劉益州征討強敵,歷盡辛勞,不怕犧牲,但是他卻吝惜錢財,有功不肯獎賞,還希望大家出死力作戰,有這樣的道理嗎?”
張松、法正等人也抓住機會,作好了暗中與劉備配合的準備。張松的哥哥、廣漢郡太守張肅知道了他們的密謀,害怕連累自己,於是向劉璋告發,劉璋下令把張松抓了起來,處斬。
劉璋同時命令川北各路駐軍加強防範,不讓劉備人馬透過。劉備大怒,把白水關守軍將領楊懷召來責斥一頓後殺了。劉備派黃忠、卓膺率兵進攻成都的劉璋,自己到白水關把駐軍家屬看起來作為人質。白水關的駐軍很有戰鬥力,號為白水軍,劉備手裡握有白水軍將士的家眷,不擔心他們會叛亂,於是率白水軍趕上黃忠、卓膺,佔領了涪縣。
劉璋派劉、冷苞、張任、鄧賢等人領兵與劉備相拒於涪縣,這幾路人馬都打了敗仗,劉璋退保綿竹。後來他又派李嚴統率綿竹各軍與劉備對抗,哪知李嚴一上戰場就率眾投降了。
這時,東邊的濡須口會戰已經結束,荊州的威脅也降低了,劉備派人通知諸葛亮,留下關羽守荊州,讓他與張飛、趙雲等人帶兵溯江西上,先後攻佔了白帝城、江州、江陽等地,劉璋最後退保成都以北的雒城(今四川廣漢雒城鎮)。
劉璋之子劉循以及張任、劉拼死守衛雒城,劉備圍了一年之久,直到建安十九年(214年)雒城才被攻破。此戰劉備也付出了慘重代價,他的軍師中郎將龐統率眾攻城,被流矢所中,不治身亡。
攻佔雒城後,劉備進圍成都。成都城池很堅固,雒城尚且守了一年,成都更不好打,但劉璋只守了幾十天就開城投降了,原因是劉備那邊來了個猛人。
這個人就是馬超。建安十六年(211年)馬超被曹操打敗,後又被楊阜等人趕出了涼州,他只好跑到漢中的張魯那裡棲身,但張魯對馬超很有戒心。馬超又跟張魯手下的將領楊昂等合不來,心裡很不痛快,聽到劉備跟劉璋在益州交手,感覺是一個機會,就寫信給劉備表示願意轉投他。
馬超主動跳槽對劉備來說是意外之喜,他派人迎接馬超,讓他駐兵於成都城外。馬超從張魯那裡跑出來時沒帶幾個人,他新納的妻子董氏、兒子馬秋還在張魯手裡,他的愛將龐德也沒有隨行,總之來得很匆忙,或者說有點狼狽。
這一點劉備倒覺得無所謂,只要有馬超的名氣就夠了。據《典略》說,劉備悄悄給馬超增兵,就說是馬超帶過來的,讓他們屯駐於成都城北,然後宣稱馬超帶涼州兵前來助戰。城內本來就信心不足,聽說名將馬超和勇猛異常的涼州軍來了,鬥志徹底瓦解,便開城投降了。
劉備攻克成都,舉行了盛大的慶祝活動(置酒大會,饗食三軍)。劉備宣佈自任益州牧,下令把劉璋遷居於公安,讓他掛個振威將軍的名義,實際上是軟禁起來了,這個振威將軍曾經是曹操以獻帝名義授予劉璋的,倒是合法的。
從建安十六年(211年)到建安十九年(214年),劉備用了三年時間佔領了整個益州。到了這時,天下三分的局面也就初步形