曹操与刘备交锋是在建安五年的春天,到冬天便与袁绍决斗。
本来,袁绍也想找曹操打。他在消灭公孙瓒以后,就曾经选了步兵十万,骑兵一万,大举南征,不过,没有敢真动手,一到黎阳便踟蹰不前。
当刘备在徐州杀了车胄,和曹操翻脸,派人联络袁绍。正是给袁绍一个好机会,可惜袁绍依然犹豫不决(他当初打董卓,也是这个作风)。
等到曹操只留下一个于禁,而亲自到徐州去和刘备作战的时候,黎阳前线空虚,袁绍仍旧毫无动作。田丰劝他动手,他推说儿子生病,把田丰气得要死。等到徐州之战成为定局,袁绍这才着急起来,其实已经迟了。
袁绍派人去告诉刘表,请刘表从南方夹攻曹操。谁知刘表也不够材料,也是一个迟疑不决,甚至是一个坐观成败之徒。
刘备丢掉徐州以后,来到袁绍的身边,但已帮不了袁绍多少忙;他的兵士所剩无几,关张二猛将又不知何往。
关羽已经到了曹操那里,被曹操带到白马津来,一战而斩袁绍的大将颜良。这是建安五年四月的事。
文丑是否也是关羽所杀,正史上没有明说。过了一些时候,关羽才离开曹操,投奔到袁绍军中,来找刘备。
刘备、关羽在秋天到汝南,和当地的黄巾首领龚都合作,威胁许昌。也许是先有张飞占了汝南一个古城,交结了龚都,刘备这才说动袁绍,让他和关羽离开河北,跑到汝南来担任这一方面的任务。曹操派蔡阳来打他们,被他们杀掉。
袁绍那里,大军南下,到了中牟附近的一个济河渡口,叫做官渡。袁绍的兵力很雄厚,沿着济河北岸,摆了几十里长,依傍沙堆扎营。曹操的兵力相当单薄,但也不得不拉成几十里长,以资对付。
袁绍就原有的沙堆子,垒上沙土,造成若干土山,在山上射箭,居高临下,弄得曹操的兵拿盾牌当伞,才挡住那雨一般的飞箭。后来曹操发明了一种炮车,利用杠杆的原理,把大石头抛到袁绍的营中,打碎土山上的平顶楼房,才算挽回了劣势。这炮车,曹操给它起一个名字,叫做霹雳车,因为大石头落在敌人山上,轰然一响,如同霹雳(雷)一样(这个霹雳炮有没有火药在内,值得疑问。传说,到了隋炀帝的时候才有火药;至于火药用在军事上,传说也要迟到北宋之末,虞允文抵抗金兀术的时候。但是三国时代,郝昭用过火箭来对付诸葛亮,却是事实)。
袁绍又设法掘地道,曹操也掘地道。袁绍所掘的是南北向,曹操所掘的是东西向。袁绍所掘的是地下的,曹操所掘的是露天的。因此,袁绍又白费了气力。
这已经是建安五年九月了。从四月间,关羽斩颜良的时候算起,两军相持已经快有半年。曹操的粮食快完,颇想退兵。荀彧从许昌写信给他说:“两军相持了如此之久。双方均已疲倦,到了用计的时候,千万不可想退,一退就不可收拾。袁绍的实力可谓最强,他现在是被你抵住于一个官渡口子,你若是把他放了进来,那就不堪设想。当初刘邦项羽相持于鸿沟之间,双方都想退而不敢退,也就是为了这个原因。”
曹操接受荀彧的建议,就用起计来。他派徐晃去劫袁绍的粮,果然毁了袁绍不少粮食(这徐晃原为杨奉的部下,被曹操收服下来,成为他的五位名将之一。五位名将是张辽、乐进、于禁、张郃、徐晃。张辽原为吕布的部下,张郃原为袁绍的部下,他俩和徐晃三人均是曹操用招降的方法得来的。只有乐进、于禁二人堪称嫡系)。
张郃这时候尚在袁绍营中,袁绍在十月间听说曹操又来劫粮,而且自己出马,带了五千人来,就将计就计,派张郃来劫曹操的大本营。
张郃说:“与其去劫营,不如去护粮。守粮的是一位淳于琼。一定敌不过曹操。”袁绍坚持自己的意见,张郃便只好去劫营。
果然淳于琼不是曹操的敌手,粮食被曹操烧光,淳于琼被砍,一千多守粮的兵被割了鼻子放回来,使得袁绍大营的兵人人见了胆寒。便有小人向袁绍说:“张郃自以为颇有先见之明,颇为得意。”这句话传到张郃耳里,张郃索性就向曹洪投降。曹洪是大本营的留守,不敢受降,荀攸在旁边劝他,曹洪就姑且允准了张郃。谁知道后来大败马谡于街亭的,正是这位张郃呢!
袁绍的兵,听说张郃投降,自相惊扰,被曹操一击,全军崩溃,袁绍只带得了八百名骑兵逃走。
曹操把袁绍的兵整整活埋了七万多人,到了第二年,即建安六年,曹操又在老黄河边上,大破袁绍于仓亭。袁绍连遭官渡与仓亭两次大败,一蹶不振,得了吐血的病。
曹操放开他,赶到汝南来收拾刘备,刘备只好去投奔刘表。
刘备在刘表那里安顿于新野地方,一住就住了六七年。刘表并无与曹操一决雌雄之意。
袁绍吐了一年多的血,到建安七年五月,便死了。