1937年,中日淞沪之战全面爆发,因为中国军队的顽强抵抗,日军陷入困境。战场局势空前激烈,一度陷入胶着状态。战火一直僵持了到了十一月,中日双方仍然难解难分。
南洋青年言少白(贾乃亮 饰)背负使命带着伙计元宝(李晟 饰)一同来到战火纷飞的上海,这晚睡梦中的少白突然惊醒,听着屋外隆隆的炮声,他心中充满了焦虑与不安。出门一看,大街上一片混乱,人们拖家带口纷纷外逃。严少白回到家心情低落,这时元宝匆匆进门,追问言少白刚才去了哪里,表示很担心他的人身安全。看到严少白心不在焉的模样,元宝忍不住提醒他,别忘了此次来上海的目的。少白闻言精神一振。此时在城市的另一端,兵棋推演专家萧斯宇(秦昊 饰)推门进屋,屋内灯火通明,桌子上摆着一个巨大的沙盘,沙盘上罗列着纵横交错的棋局,其中的一方是中国军队,而另一方代表了日本军队,萧斯宇手持长杆不断的推演棋局,以此来推演战况的诡谲变化。
繁华的上海车水马龙一名中共地下党员,秘密的来到接头地点寻找上线老潘,老潘面带忧色的告诉她,有个日本的兵棋高手即将来到上海。虽然他是被贬到中国的,但是他的兵棋技能非常高超,会对今后的战局造成不利影响。因此,组织上要求立刻锁定和盯紧他。老潘告诉韩她,过一段时间会有一个苏联回来的特工与她联系,具体的行动需要听他安排。
此时,日本兵棋专家加藤博文(刘奕君 饰)独自来到上海,他在街头询询问去虹口的路线,敏锐的他突然发现有一个苏联人正在悄悄的跟踪和监视自己,便叫住旁边的一个黄包车,想要坐上黄包车摆脱跟踪。谁知言少白和元宝刚好也叫住了这辆黄包车,看到加藤博文脸色焦急,少白也注意到了远处的苏联人,便立刻把黄包车让给了加藤。加藤博文下车后,少白追问为什么刚才那个苏联人要追杀他。加藤博文掩饰说,自己是一个生意人,和那个苏联人有生意上的纠葛,说完便要离开。少白却一把拉住他,并且根据他身上的气味,判断他不是来自上海就是来自日本。加藤博文不愿泄露自己的身份,便掩饰说自己是台湾人,随后他便急匆匆地离开,可是刚走出两步,却又跑了回来。原来前方也出现了一个苏联人,看到后面的苏联人也追了上来,加藤博文只好拉着少白和元宝在旁边的巷子里躲了起来。热心肠的元宝决定再次出手相助,他捡起一个石子,随手在地上画起来棋局,并且根据棋局推演逃跑的计划。加藤博文对于少白的推演能力很感兴趣,便问长问短,却被元宝打断。在少白的精密推演下,加藤果然轻松的摆脱了苏联人的追踪。
当晚少白和元宝一起来到大世界,夜场准备问问何阿三的下落。可是他的桀骜不驯,惹怒了大世界的老板。少白提出要跟老板打赌,赌约是自己三十秒之内,能够从密封的箱子中逃脱。老板粗暴地打断了少白的提议,并且要驱赶他离开。这时上海的武皇后韩依依(隆妮 饰)翩翩而来,她劝说老板给少白一个机会。看在韩依依的面子上,老板答应让少白上台试一试。
少白潇洒的走上舞台,让侍者用锁链将自己捆绑起来,再安上定时炸弹,最后将自己锁在箱子密不透风的箱子里。五台下的众人眼睛一眨不眨地紧盯着台上的箱子。随着时间的推移,爆炸声响起,台上硝烟弥漫。元宝首先冲上舞台,却找不到少白的影子。她一回头,却发现少白居然出现在韩依依的背后,并且微笑的解释自己是运用自己的数学推理能力安全脱身的,对于少白所展现的过人的才智,韩依依赞叹不已,说完便翩然离开。老板兑现了承诺,告诉他何阿三的住处。可是当两人赶到后,看到了残垣断壁,满目狼藉。随后两人四下寻找,终于在一堵墙后看到了浑身是血,奄奄一息的何叔。但是不等少白表明来意,何叔已经回天乏术,看到被战火摧残的何叔,少白心中悲痛不已。突然,隆隆炮声响起,原来日本人的坦克开了过来,一阵狂轰乱炸。少白一路飞奔,逃到了法租界。却在这里遇到了自己儿时的朋友现在的法租界探长雷虎。
此时,南京国民政府情报委员会主任黎农,正在办公室里接待情报委员会副主任的徐志。谈到当前的战局,徐志面色担忧。接着他告诉黎农,代号为巨鲸的同志在兵棋推演方面有所突破,所以他决定亲自去一趟上海。他没有想到与此同时上海特高科的小野中佐得到徐志会前来上海情报,他下定决心,这次一定要擒获徐志。
少白乘着雷虎的车准备先到自己上海的家中安顿,谁知敲了半天门,却走出了一个打扮时尚的女子,自我介绍是沈丽华。少白连忙解释这是自己家的房子,沈丽华分辩说这是汇丰银行的。沈丽华毫不客气地要求少白他们去找汇丰银行说清楚,但急性子的元宝不顾沈丽华阻挠直接冲进屋内。在屋内,少白吃惊的发现上午刚刚救过自己的萧斯宇居然也在屋内。少白看到萧斯宇说不出的激动,谁知对方却出奇的平静,似乎已经不认识自己了。很快元宝和沈丽华两人就这栋屋子的所有权产生了激烈争执。雷虎这时候站出来替少白说话,要求少白暂时安顿在这栋房子中。既然雷虎出面,萧斯宇索性做了个顺水人情,将少白他们安顿在二楼。
地下党员红云在旅社中秘密会见一个神秘的苏联人,原来他就是一路跟踪加藤的那个苏联人,他请求红云协助自己查出加藤的下落,并由自己亲自动手解决对方。
在住所,少白在房子中转了一圈,他推断出这种房子应该设计有一个密室。与此同时,萧斯宇与沈丽华对于突然出现的少白有着诸多猜测,萧斯宇对于少白白天在炮火连天的环境下居然安静的下棋产生了浓厚的兴趣,两人商量的结果是先静观其变。
少白和元宝出门逛街遇到了游行示威的一群学生,便混在学生的队五中一起前去慰问正在闸北仓库血战的国军士兵。此时的闸北仓库,战况空前的惨烈,日军凭借着火力优势狂轰滥炸,国军伤亡惨重。日军在坦克的掩护下,朝着闸北仓库步步逼近,在日本后方一个隐蔽的房屋里,加藤通过望远镜暗中观察着战场形势。随后,他直接找到正在指挥的中佐,指责他指挥错误,却被恼羞成怒的中佐直接打昏带下去。随后,中佐指挥日本军队疯狂的进攻,但却被顽强坚守的国军士兵一次次击退。
游行示威的学生队伍还没到达战场外围,就遭到了日军炮火猛烈轰炸。危险时刻,旁边的元宝奋不顾身的,将少白推倒在地,幸好两人都没有受伤。这时一辆军用卡车开了过来,一名国军军官走下车正要呵斥这群不知天高地厚的学生,却发现几架日本的飞机正朝这边飞来,便急忙招呼学生们立刻上车。看到形势危急,少白冲进驾驶室,驾驶着军用卡车一路狂奔,最后终于抵达了闸北仓库。
团长谢园要求刘副官带着同学们迅速离开,他注意到刚才驾驶卡车临危不乱的少白,便与他攀谈起来,并且劝告他下次不要来危险的前线。少白和元宝回到家兴奋的又蹦又跳,他们得意洋洋的向萧斯宇宣布自己刚才去劳军了,却被萧斯宇当头泼了一瓢凉水。萧斯宇对于当前的战局抒发自己的见解,引起了少白的兴趣。他立刻追问萧斯宇的政治主张,萧斯宇却轻松地掩饰自己是一个无党派人士。
加藤被带到了特高科,面对着大名鼎鼎的加藤,特高科的小野中佐却显得不屑一顾。小野告诉加藤,他的兵棋推演能力对于帝国意义重要,因此不可以轻易涉险。说着他怒气冲冲的带着加藤来到一个隐秘的房间,原来房间中都是陈列着淞沪会战中日军阵亡将士的骨灰盒。小野指责加藤推演错误,才造成了日军这么大的伤亡。加藤却坚持认为自己的推延,没有错误,是前线指挥官指挥失误所致。
当晚,四人一起在房间打牌,在牌局中,少白根据今年打牌风格,讥讽沈丽华做事胆小怕事,谨慎有余魄力不足,遭到沈丽华反唇相讥。少白又推理萧斯宇的性格很是得意,少白依靠着自己过人的数学天分,眼看就要胜券在握,谁知萧斯宇还是技高一筹,最终胜出,这场少白既感到憋屈又无可奈何。
在特高科,小野拿出了萧斯宇的照片。加藤立刻辨认出照片上的人正是自己的师兄萧斯宇,他告诉小野萧斯宇已经在德国死亡。但是小野却不相信,武断的要求加藤提供给自己萧斯宇的线索。看到加藤不肯说,小野故意激将他,说他在兵棋推演方面不如萧斯宇。果然加藤深受刺激,生死力竭的喊出在中国自己只有一个对手那就是萧斯宇,不过他已经在德国死了。原来当年,加藤和萧斯宇都师从赫尔曼,锋芒毕露的萧斯宇遭到学长加藤的嫉妒迫害,因为当时中日正在开战,军方军方担心萧斯宇的推演能力会对战局产生影响,便让加藤寻找机会除掉萧斯宇。在日本军方的密谋下,精心策划一桩针对萧斯宇的爆炸。爆炸声响起时,加藤亲眼看到,萧斯宇倒在血泊之中,不省人事,因此他有理由相信萧斯宇已经死亡。
加藤当晚外出时,在大街上他注意到身后有人跟踪,不久后前方也出现了一个可疑的黑衣人。加藤意识到情况不妙,就在两名杀手朝着加藤快速靠近准备下手时,却被紧跟在加藤身后保护他的日本特高课特务击毙。
打完牌后,少白在屋子里四处溜达,想要寻找到密室,只是苦于无法找到密室的入口。原来他这次来上海背负的使命之一,就是取出父亲藏在密室里的东西。少白和元宝一商量觉得萧斯宇这个人不简单,于是决定从明天开始正式跟踪萧斯宇,以便弄清楚他的真实身份。
第二天,少白和元宝早早地出门躲了起来,随后他们跟在出门的萧斯宇身后,没想到直接被萧斯宇识破。萧斯宇质问少白为何跟踪自己,少白一时哑口无言,旁边的元宝却指责萧斯宇霸占少白家的房子,居心叵测。萧斯宇却懒得与他们纠缠,直接去银行上班。
徐志来到上海,准备和巨鲸会合,谁知由于叛徒的泄密,他一来到上海就受到了特高课特务的监视。小野严令特务们不许轻举妄动,他准备放长线钓大鱼,通过徐志抓捕巨鲸。徐志独自来到饭店,刚好少白和元宝也来到这家饭店吃饭,不一会儿徐志的小笼包子被送了上来,少白凑了过去花钱买下了一笼小笼包子。而这一幕刚好被旁边监视的特务看在眼眼里,立刻注意到了少白。徐志正准备吃包子,却发现笼底藏着一张小纸条,上面写着有叛徒三个字。徐志立刻意识到自己可能已经暴露,但他还是不动声色的吃完了包子,然后离开。
少白和元宝走出饭店,细心的少白发现有人跟踪,他要求元宝不要慌张,自己和他分头走,到时候再次汇合。和元宝分开后,少白故意四处溜达,一路东张西望,机智的他在闹市中轻松摆脱了特务的跟踪,并把特务们耍得团团转。少白刚甩脱了特务,就遇到了雷虎,便和雷虎一起去了他家。雷虎发现,少白嘴角没有痣,和小时候似乎不大一样。少白却掩饰说自己经历了一场事故,动了个小手术。听了少白的话,雷虎却有些半信半疑。