魏主得知曹真损兵折将,急忙问司马懿怎么办。司马懿说:“孔明不能从陈仓运粮,速战速决对他们有利,我军目前只适宜坚守。陛下可传旨,让曹真坚守各处关隘,不要出战。不出一个月,蜀军自然退兵,到那时乘胜追击,可擒孔明。”魏主说:“你既然这么高明,怎么不亲自上阵?”司马懿说:“不是臣怕死,孙权不久必定会称帝,还会入侵,臣在提防他们。”魏主就让太常卿韩暨传旨,命曹真坚守不出。司马懿又叮嘱韩暨,千万别告诉曹真这是他的主意,就说是天子的圣旨。韩暨到曹真寨中传了旨,郭淮已看出是司马懿的主意,提议让王双加强巡逻,提防蜀兵运粮。孙礼又献计,他用粮车装上干柴,撒上硫黄,伪装成粮草,诱蜀兵来截,再放火烧车。曹真就让他依计行事,同时传令王双加强巡逻,郭淮提调箕谷、街亭,让张辽的儿子张虎为先锋,乐进的儿子乐琳为副先锋,共同守卫第一营,不许出战。
孔明见魏兵坚守不出,忽报孙礼押送粮车来到。孔明笑着说:“我平生专用火攻,他竟想用火攻暗算我。我们可将计就计。”他命令马岱领三千兵,到魏兵屯粮处,在上风头放火。派马忠、张嶷在外包围,内外夹攻。又命关兴、张苞,今晚西山火起,魏兵来劫营,你二人可截击。再派吴班、吴懿领兵断敌退路。探子见蜀军调动人马,忙回报孙礼,孙礼又派人飞报曹真,曹真传令张虎、乐琳,见西山火起,可如此出兵。当夜二更,孙礼在四面布下伏兵,马岱兵到,趁东南风放起火来。孙礼只当蜀兵已入魏寨,忙率伏兵杀出,却被马忠、张嶷、马岱内外夹攻,反被火烧得死伤无数。张虎、乐琳看到火光,带领人马杀奔蜀寨,寨中不见一人,急忙回兵,吴班、吴懿杀到,张虎、乐琳冲出包围,回到本寨,寨子已被关兴、张苞袭取了。二人遇见孙礼,一同来见曹真。曹真再也不出战。孔明派人授魏延密计,让他拔寨退兵。张郃来见曹真,说:“我来听都督调遣。”曹真说:“曾见仲达吗?”张郃说:“仲达吩咐‘我军胜,蜀军不会走;我军败,蜀军必走。’我军失利,都督探听蜀军消息了吗?”曹真派人到蜀寨打探,只剩下座空营,蜀军已退走两天了,张郃就领兵追击。魏延领了密计,夜间二更拔寨退往汉中,王双得知,忙率军追赶。眼看要赶上蜀军,却见本寨火光冲天,慌忙退兵。不料半路上突然冲出几十骑,大叫:“魏延在此!”王双措手不及,被魏延一刀斩了。魏兵四散逃命。张郃未追上蜀兵,回到寨中。曹真接到郝昭的报告,说是王双被杀,忧虑成病,回到洛阳。
孙权得知孔明二出祁山,曹真损兵折将,就要兴兵伐魏。张昭说:“武昌东山,凤凰来仪,大江之中,黄龙屡现,主公可即皇帝位,然后兴兵。”众官齐声附和。孙权就选四月丙寅日,在武昌南郊筑坛称帝,改黄武八年为黄龙元年。孙权回到建业,商议伐魏。张昭认为他初登帝位,不可用兵,可派人入川,联络蜀汉。孙权就派使者去见刘禅。刘禅与大臣商议,许多大臣认为孙权妄称皇帝,是反叛行为,应该与吴断交。刘禅派使者到汉中问孔明的意见,孔明让他送礼祝贺,并请孙权出兵,他好乘机进兵中原。刘禅就派陈震为使,带上厚礼到建业祝贺,让东吴出兵。孙权问陆逊怎么应付,陆逊说要虚张声势,让蜀国出兵,吴国再乘机取利。陈震到汉中,把吴国准备出兵的事告诉了孔明。孔明探听到郝昭病重,就命魏延、姜维去取陈仓,关兴、张苞作为接应。郭淮听说郝昭病重,让张郃去替他。就在这时,蜀军攻入城中,郝昭吃惊而死。魏延、姜维来到城下,却见孔明已站在城头。孔明让魏延、姜维立即取散关。二人到达散关,魏兵已逃散,刚进了关,张郃也领兵来到。二人分兵防守,张郃只得退兵,被魏延追杀一阵,大败而逃。孔明兵出斜谷,再出祁山,安营下寨,让姜维、王平各引一万人马分别取武都、阴平。张郃逃回长安,向郭淮、孙礼说明情况。郭淮大惊,就留张郃守长安,命孙礼守雍城,他领兵守郿城,又派人到洛阳告急。魏主得知孔明入侵,又得知陆逊在武昌跃跃欲试,不知如何是好。司马懿认为,东吴不会出兵,吴、蜀联盟只是暂时的。魏主封司马懿为大都督,引兵征西。司马懿来到长安,得知武都、阴平没有消息,忙派郭淮、孙礼前去救应。二人领兵从陇西小路进军,探子来报,阴平已被王平攻破,武都已被姜维攻破。二人急忙退兵,孔明乘四轮车拦住去路,郭淮、孙礼惊慌失措。关兴、张苞、王平、姜维四将从前后夹攻,魏兵大败,二人只好扔了马匹,翻山逃走。张苞催马去追,不小心跌入山涧,摔成重伤。孔明把他送回成都养伤。郭淮、孙礼见到司马懿,报告了兵败的经过。司马懿说:“孔明比我棋高一着,不是你们的罪过。”于是吩咐张郃、戴陵各领兵一万去抄蜀兵后路,他从前面接应。张郃、戴陵走不到三十里,被数百辆车拦住去路,刚想退兵,四下火起,伏兵杀出。孔明在山上大叫,让二人早早投降,张郃冲杀出去,回头不见戴陵,又杀回去,救出戴陵。孔明见张郃英勇,想设法将他除去。司马懿见张郃、戴陵再败,自叹不如孔明。孔明得胜回寨,让魏延挑战,魏军一连半月不敢出战。孔明正想法破敌,费祎持圣旨到,刘禅念孔明功高,恢复了孔明的丞相职务。
孔明见司马懿坚不出战,传令各寨退兵。张郃等认为蜀兵粮尽而退,应该追击。司马懿认为蜀国去年大丰收,不可能缺粮,撤兵肯定是诱敌之计,建议只派人跟踪,不派兵追赶。军士回报,说蜀兵只退三十里就下寨。过了半个月,蜀兵又退三十里下寨。又过了十多天,孔明又退了三十里下寨。张郃等一再请战,司马懿被缠不过,只好让张郃、戴陵领兵三万,副将数十名,谨慎进军,他自领精兵随后接应。张郃、戴陵领兵出发,只顾穷追猛赶。当时正是六月,天气十分炎热,等赶到五十里外,魏兵气喘吁吁。孔明在山头把红旗一展,前有马忠、张嶷、吴懿、吴班,后有王平、张翼,率伏兵一齐杀出。张郃、戴陵率魏兵拼死抵抗,却始终无法冲出重围。这时,司马懿从后面杀来,王平与张翼兵分两路,分头抵挡魏军。姜维、廖化在山头见王平等陷入危急,立即领兵杀向魏营。司马懿一路上留下不少探子,很快就得知蜀军出奇兵去端他的老窝,只好回兵救援。张郃、戴陵翻山逃走,数万魏兵和几十员将领都成了刀下鬼。司马懿回寨,收拾了败兵,声称今后谁再轻敌妄动,定斩不饶。孔明正想乘胜进军,却得到张苞伤重身死的噩耗,不由放声大哭,口吐鲜血,昏倒在地。众人把他救起,过了半个多月,他仍感到昏昏沉沉,不能理事,只好退兵汉中,自回成都养病。蜀军都退走了五天,司马懿才知道,不由长叹说:“孔明神出鬼没,我确实不如他!”他就留众将把守关隘,自己回到了洛阳。
建兴八年七月,曹真病愈,要和司马懿共同领兵。魏主就拜曹真为大司马、征西大都督,司马懿为大将军、副都督,刘晔为军师,领四十万大军途经剑阁取汉中,郭淮、孙礼也各自领兵出发。孔明病愈之后,每天操练人马,排练八卦阵。他得知司马懿进犯的消息,命张嶷、王平领一千兵把守陈仓口。二人面面相觑,怀疑一千人怎么能抵挡四十万大军?在得知孔明的意图后,才领兵前去。孔明领大军出汉中,传令各处关隘准备一个月的柴草粮食,以防秋雨,大军等候出征。曹真、司马懿领兵来到陈仓城,不见一间房屋。曹真要进兵,司马懿说:“我夜观天象,最近要下大雨。深入了重地,退回就难了。我们应搭起窝棚,以防阴雨。”魏兵就驻扎下来。
不出半月,天降大雨,连绵不绝,平地积水足有三尺。大雨接连下了一个月,马无草料,饿死无数。魏主得知,设坛求晴,仍不见天晴,只好传旨,让曹真、司马懿退兵。曹真与司马懿设下两支伏兵,缓缓撤军。孔明得知魏军撤退,料定必有埋伏,不让众将出击,命令魏延、张嶷、杜琼、陈式出箕谷,马岱、王平、张翼、马忠出斜谷,到祁山会师。曹真与司马懿走了十多天,不见蜀军追来。曹真放下心来,司马懿却猜知孔明必再次兵出祁山。二人打赌,各自据守一谷,假如十日内蜀兵不到,司马懿扮做女人向曹真请罪,如果蜀兵到了,曹真就把天子赐的一条玉带、一匹宝马输给司马懿。司马懿屯兵祁山东的箕谷,布下伏兵,严阵以待。魏延等四将正领兵前行,邓芝赶来,传达孔明的命令,让他们提防埋伏,不可冒进。陈式、魏延嘲笑孔明多疑。邓芝再劝,二人也没听,陈式就带了五千人马,要先出箕谷羞孔明。邓芝只好飞马回报孔明。陈式走了不远,忽听一声炮响,魏军伏兵杀出,把他围得犹如铁桶一般。幸亏魏延及时杀来,救出陈式,五千人马只剩了四五百伤兵了。魏兵追杀过来,杜琼、张嶷引兵接应,才杀退魏兵。
邓芝见到孔明,告诉他魏延、陈式多么无礼。正说着,探子来报,说是陈式兵败。孔明让邓芝去箕谷抚慰,防止陈式生变。他又安排马忠、张翼、王平、马岱,分头行动,安排关兴、廖化按计行事。他自领精兵快速前进,路上又分派给吴班、吴懿任务。曹真不信蜀兵会来,根本没做任何准备。到了第七天,探子报称谷中有小股蜀兵活动,就派秦良领五千兵去巡逻。秦良刚到谷口,蜀兵就慌忙退去。他领兵赶了五六十里,不见了蜀兵,正在歇息,吴班、吴懿、关兴、廖化领兵从前后杀来。魏兵走投无路,多半投降,秦良被廖化一刀杀死。孔明让蜀军换上魏军军服,由四将率领,直奔曹真寨。司马懿派人告诫曹真,小心蜀军,他却说根本没看见一个蜀军。不多时,军士来报,说是秦良回来了。曹真出帐相迎,寨中四处火起。关兴、廖化、二吴从前面杀来,马岱、王平从后面杀来,马忠、张翼也领兵杀到。魏军措手不及,四处逃生。正危急时,司马懿领兵来救,杀退蜀兵,到渭滨安营。曹真大败,气成重病,卧床不起。