关的驻军划归刘备指挥,刘备所部人马达到了三万多人,武器装备等军用物资也很充足。刘璋回到成都,让刘备驻军葭萌关,此关位于如今四川省广元市昭化镇,这里与川北另一个著名关口剑门关仅几十里,刘璋想让刘备以此为基地展开对张鲁的攻击。
刘璋净想好事了,他忽略了一个事实:别人也不傻,更何况这个“别人”是老江湖刘备。
刘备到了葭萌关,根本不考虑进攻张鲁的事,而是“厚树恩德,以收众心”。
建安十八年(213年)曹操率大军进抵濡须口,孙权向刘备这个新妹夫发出联合行动的请求(曹公征孙权,权呼先主自救)。刘备此时远隔千山万水,且压根没有援救孙权的打算,但他觉得这是一个机会,可以利用一下。
刘备派人告诉刘璋,说曹操攻吴,同时派乐进攻关羽,如果不及时援救,荆州将有失,这件事的紧急程度目前大于征张鲁(其忧有甚於鲁),因此请求刘璋再拨一万人马,以及后勤物资,让自己率军回援荆州。
刘璋又花钱又出人,目的是让刘备打张鲁,现在事情没有任何进展,刘备倒有趁机溜走的嫌疑,心里很不痛快,但也不便撕破脸,他只给刘备凑了四千人马,所要物资也都减半提供。
按说你没给别人办任何事,现在这些是人家白给的,已经很不错了,但刘备抓住把柄大做文章。据《魏书》说,刘备故意激怒手下的人说:“我替刘益州征讨强敌,历尽辛劳,不怕牺牲,但是他却吝惜钱财,有功不肯奖赏,还希望大家出死力作战,有这样的道理吗?”
张松、法正等人也抓住机会,作好了暗中与刘备配合的准备。张松的哥哥、广汉郡太守张肃知道了他们的密谋,害怕连累自己,于是向刘璋告发,刘璋下令把张松抓了起来,处斩。
刘璋同时命令川北各路驻军加强防范,不让刘备人马通过。刘备大怒,把白水关守军将领杨怀召来责斥一顿后杀了。刘备派黄忠、卓膺率兵进攻成都的刘璋,自己到白水关把驻军家属看起来作为人质。白水关的驻军很有战斗力,号为白水军,刘备手里握有白水军将士的家眷,不担心他们会叛乱,于是率白水军赶上黄忠、卓膺,占领了涪县。
刘璋派刘、冷苞、张任、邓贤等人领兵与刘备相拒于涪县,这几路人马都打了败仗,刘璋退保绵竹。后来他又派李严统率绵竹各军与刘备对抗,哪知李严一上战场就率众投降了。
这时,东边的濡须口会战已经结束,荆州的威胁也降低了,刘备派人通知诸葛亮,留下关羽守荆州,让他与张飞、赵云等人带兵溯江西上,先后攻占了白帝城、江州、江阳等地,刘璋最后退保成都以北的雒城(今四川广汉雒城镇)。
刘璋之子刘循以及张任、刘拼死守卫雒城,刘备围了一年之久,直到建安十九年(214年)雒城才被攻破。此战刘备也付出了惨重代价,他的军师中郎将庞统率众攻城,被流矢所中,不治身亡。
攻占雒城后,刘备进围成都。成都城池很坚固,雒城尚且守了一年,成都更不好打,但刘璋只守了几十天就开城投降了,原因是刘备那边来了个猛人。
这个人就是马超。建安十六年(211年)马超被曹操打败,后又被杨阜等人赶出了凉州,他只好跑到汉中的张鲁那里栖身,但张鲁对马超很有戒心。马超又跟张鲁手下的将领杨昂等合不来,心里很不痛快,听到刘备跟刘璋在益州交手,感觉是一个机会,就写信给刘备表示愿意转投他。
马超主动跳槽对刘备来说是意外之喜,他派人迎接马超,让他驻兵于成都城外。马超从张鲁那里跑出来时没带几个人,他新纳的妻子董氏、儿子马秋还在张鲁手里,他的爱将庞德也没有随行,总之来得很匆忙,或者说有点狼狈。
这一点刘备倒觉得无所谓,只要有马超的名气就够了。据《典略》说,刘备悄悄给马超增兵,就说是马超带过来的,让他们屯驻于成都城北,然后宣称马超带凉州兵前来助战。城内本来就信心不足,听说名将马超和勇猛异常的凉州军来了,斗志彻底瓦解,便开城投降了。
刘备攻克成都,举行了盛大的庆祝活动(置酒大会,飨食三军)。刘备宣布自任益州牧,下令把刘璋迁居于公安,让他挂个振威将军的名义,实际上是软禁起来了,这个振威将军曾经是曹操以献帝名义授予刘璋的,倒是合法的。
从建安十六年(211年)到建安十九年(214年),刘备用了三年时间占领了整个益州。到了这时,天下三分的局面也就初步形成了。