張郃在宕渠山上聞知張飛狂飲作樂,便連夜前往偷營。他見“張飛”端坐大帳,忙用槍刺,不料刺中的卻是草人,張郃急撥馬出帳,張飛已到面前,郃大驚,倉皇應戰,不敵,撥馬而逃。與此同時,他據守的蒙頭、蕩石兩個山寨已被魏延、雷銅占領。
張郃向曹洪求援不成,只得退守瓦口關。他用埋伏之計,誘殺了雷銅,張飛與魏延決定將計就計,由張飛出戰張郃,魏延殺散伏兵,放火燒之。張郃大敗,逃回瓦口關,堅守不出。張飛從百姓口中得知有一條小路可通瓦口關,他命魏延引兵從正面攻關,他親率五百輕騎,由百姓帶路,從梓潼山直上瓦口關背后。
張郃前后受敵,急往小路而走,張飛在后緊追,山道狹窄,張郃只得棄馬步行,逃回南鄭。曹洪命他攻打葭萌關。
正當劉備慶賀張飛智奪瓦口關時,葭萌關守將霍峻來書告急,孔明用激將法,使老將黃忠出戰,嚴顏同往,他們合力殺退張郃。黃忠用驕兵之計,一連收復三個營寨,還收繳了大批糧草、輜重和兵器,誘使曹將韓浩、夏侯尚孤軍深入,并奪得曹軍屯糧之地天蕩山。張郃逃往定軍山,投奔夏侯淵。
劉備親統大軍十萬,以諸葛亮為軍師,張飛、趙云為先鋒,取道葭萌關,征討漢中。
南鄭守將曹洪聞訊,星夜急往許都稟報曹操,操自領四十萬大軍前往南鄭迎敵。
定軍山是南鄭屏障,又是曹軍積聚糧草之地,劉備決定先取定軍山。諸葛亮再激老將黃忠出戰,派法正相助。
鎮守定軍山之魏將夏侯淵堅決不出戰,法正定計,步步為營,誘其下山。黃忠率軍逼到定軍山下,并連夜奪取了定軍山西面一座高山。法正又提出“以逸待勞”之計,讓黃忠駐扎于半山,法正則在山頂觀察動靜,以旗為號。
夏侯淵見蜀軍奪了對山,以俯視定軍山之虛實,大怒。他不聽張郃勸阻,親自率軍圍住對山,在山下大罵挑戰。法正在山上舉白旗,黃忠按兵不動。午時過后,魏軍銳氣已墮,紛紛下馬休息,法正立即將白旗放倒,豎起紅旗。養精蓄銳多時的黃忠提刀上馬,殺下山去。夏侯淵未及上馬相迎,寶刀已落,被黃忠連頭帶肩劈為兩半,曹兵大敗。黃忠乘勝奪了定軍山,被封為鎮西將軍。
曹操親統大軍,為夏侯淵報仇,令張郃將米倉山糧草移屯北山,以備軍需。
諸葛亮聞報,派黃忠、趙云前往深入其境,燒其糧草,奪其輜重。行前,趙云與老將軍約定“以明日午時為期,如將軍按時而還,云將按兵不動,若過午不還,云即引軍接應。”