1937年,中日淞滬之戰全面爆發,因為中國軍隊的頑強抵抗,日軍陷入困境。戰場局勢空前激烈,一度陷入膠著狀態。戰火一直僵持了到了十一月,中日雙方仍然難解難分。
南洋青年言少白(賈乃亮?飾)背負使命帶著伙計元寶(李晟?飾)一同來到戰火紛飛的上海,這晚睡夢中的少白突然驚醒,聽著屋外隆隆的炮聲,他心中充滿了焦慮與不安。出門一看,大街上一片混亂,人們拖家帶口紛紛外逃。嚴少白回到家心情低落,這時元寶匆匆進門,追問言少白剛才去了哪里,表示很擔心他的人身安全。看到嚴少白心不在焉的模樣,元寶忍不住提醒他,別忘了此次來上海的目的。少白聞言精神一振。此時在城市的另一端,兵棋推演專家蕭斯宇(秦昊?飾)推門進屋,屋內燈火通明,桌子上擺著一個巨大的沙盤,沙盤上羅列著縱橫交錯的棋局,其中的一方是中國軍隊,而另一方代表了日本軍隊,蕭斯宇手持長桿不斷的推演棋局,以此來推演戰況的詭譎變化。
繁華的上海車水馬龍一名中共地下黨員,秘密的來到接頭地點尋找上線老潘,老潘面帶憂色的告訴她,有個日本的兵棋高手即將來到上海。雖然他是被貶到中國的,但是他的兵棋技能非常高超,會對今后的戰局造成不利影響。因此,組織上要求立刻鎖定和盯緊他。老潘告訴韓她,過一段時間會有一個蘇聯回來的特工與她聯系,具體的行動需要聽他安排。
此時,日本兵棋專家加藤博文(劉奕君?飾)獨自來到上海,他在街頭詢詢問去虹口的路線,敏銳的他突然發現有一個蘇聯人正在悄悄的跟蹤和監視自己,便叫住旁邊的一個黃包車,想要坐上黃包車擺脫跟蹤。誰知言少白和元寶剛好也叫住了這輛黃包車,看到加藤博文臉色焦急,少白也注意到了遠處的蘇聯人,便立刻把黃包車讓給了加藤。加藤博文下車后,少白追問為什么剛才那個蘇聯人要追殺他。加藤博文掩飾說,自己是一個生意人,和那個蘇聯人有生意上的糾葛,說完便要離開。少白卻一把拉住他,并且根據他身上的氣味,判斷他不是來自上海就是來自日本。加藤博文不愿泄露自己的身份,便掩飾說自己是臺灣人,隨后他便急匆匆地離開,可是剛走出兩步,卻又跑了回來。原來前方也出現了一個蘇聯人,看到后面的蘇聯人也追了上來,加藤博文只好拉著少白和元寶在旁邊的巷子里躲了起來。熱心腸的元寶決定再次出手相助,他撿起一個石子,隨手在地上畫起來棋局,并且根據棋局推演逃跑的計劃。加藤博文對于少白的推演能力很感興趣,便問長問短,卻被元寶打斷。在少白的精密推演下,加藤果然輕松的擺脫了蘇聯人的追蹤。
當晚少白和元寶一起來到大世界,夜場準備問問何阿三的下落。可是他的桀驁不馴,惹怒了大世界的老板。少白提出要跟老板打賭,賭約是自己三十秒之內,能夠從密封的箱子中逃脫。老板粗暴地打斷了少白的提議,并且要驅趕他離開。這時上海的武皇后韓依依(隆妮?飾)翩翩而來,她勸說老板給少白一個機會。看在韓依依的面子上,老板答應讓少白上臺試一試。
少白瀟灑的走上舞臺,讓侍者用鎖鏈將自己捆綁起來,再安上定時炸彈,最后將自己鎖在箱子密不透風的箱子里。五臺下的眾人眼睛一眨不眨地緊盯著臺上的箱子。隨著時間的推移,爆炸聲響起,臺上硝煙彌漫。元寶首先沖上舞臺,卻找不到少白的影子。她一回頭,卻發現少白居然出現在韓依依的背后,并且微笑的解釋自己是運用自己的數學推理能力安全脫身的,對于少白所展現的過人的才智,韓依依贊嘆不已,說完便翩然離開。老板兌現了承諾,告訴他何阿三的住處。可是當兩人趕到后,看到了殘垣斷壁,滿目狼藉。隨后兩人四下尋找,終于在一堵墻后看到了渾身是血,奄奄一息的何叔。但是不等少白表明來意,何叔已經回天乏術,看到被戰火摧殘的何叔,少白心中悲痛不已。突然,隆隆炮聲響起,原來日本人的坦克開了過來,一陣狂轟亂炸。少白一路飛奔,逃到了法租界。卻在這里遇到了自己兒時的朋友現在的法租界探長雷虎。
此時,南京國民政府情報委員會主任黎農,正在辦公室里接待情報委員會副主任的徐志。談到當前的戰局,徐志面色擔憂。接著他告訴黎農,代號為巨鯨的同志在兵棋推演方面有所突破,所以他決定親自去一趟上海。他沒有想到與此同時上海特高科的小野中佐得到徐志會前來上海情報,他下定決心,這次一定要擒獲徐志。
少白乘著雷虎的車準備先到自己上海的家中安頓,誰知敲了半天門,卻走出了一個打扮時尚的女子,自我介紹是沈麗華。少白連忙解釋這是自己家的房子,沈麗華分辯說這是匯豐銀行的。沈麗華毫不客氣地要求少白他們去找匯豐銀行說清楚,但急性子的元寶不顧沈麗華阻撓直接沖進屋內。在屋內,少白吃驚的發現上午剛剛救過自己的蕭斯宇居然也在屋內。少白看到蕭斯宇說不出的激動,誰知對方卻出奇的平靜,似乎已經不認識自己了。很快元寶和沈麗華兩人就這棟屋子的所有權產生了激烈爭執。雷虎這時候站出來替少白說話,要求少白暫時安頓在這棟房子中。既然雷虎出面,蕭斯宇索性做了個順水人情,將少白他們安頓在二樓。
地下黨員紅云在旅社中秘密會見一個神秘的蘇聯人,原來他就是一路跟蹤加藤的那個蘇聯人,他請求紅云協助自己查出加藤的下落,并由自己親自動手解決對方。
在住所,少白在房子中轉了一圈,他推斷出這種房子應該設計有一個密室。與此同時,蕭斯宇與沈麗華對于突然出現的少白有著諸多猜測,蕭斯宇對于少白白天在炮火連天的環境下居然安靜的下棋產生了濃厚的興趣,兩人商量的結果是先靜觀其變。
少白和元寶出門逛街遇到了游行示威的一群學生,便混在學生的隊五中一起前去慰問正在閘北倉庫血戰的國軍士兵。此時的閘北倉庫,戰況空前的慘烈,日軍憑借著火力優勢狂轟濫炸,國軍傷亡慘重。日軍在坦克的掩護下,朝著閘北倉庫步步逼近,在日本后方一個隱蔽的房屋里,加藤通過望遠鏡暗中觀察著戰場形勢。隨后,他直接找到正在指揮的中佐,指責他指揮錯誤,卻被惱羞成怒的中佐直接打昏帶下去。隨后,中佐指揮日本軍隊瘋狂的進攻,但卻被頑強堅守的國軍士兵一次次擊退。
游行示威的學生隊伍還沒到達戰場外圍,就遭到了日軍炮火猛烈轟炸。危險時刻,旁邊的元寶奮不顧身的,將少白推倒在地,幸好兩人都沒有受傷。這時一輛軍用卡車開了過來,一名國軍軍官走下車正要呵斥這群不知天高地厚的學生,卻發現幾架日本的飛機正朝這邊飛來,便急忙招呼學生們立刻上車。看到形勢危急,少白沖進駕駛室,駕駛著軍用卡車一路狂奔,最后終于抵達了閘北倉庫。
團長謝園要求劉副官帶著同學們迅速離開,他注意到剛才駕駛卡車臨危不亂的少白,便與他攀談起來,并且勸告他下次不要來危險的前線。少白和元寶回到家興奮的又蹦又跳,他們得意洋洋的向蕭斯宇宣布自己剛才去勞軍了,卻被蕭斯宇當頭潑了一瓢涼水。蕭斯宇對于當前的戰局抒發自己的見解,引起了少白的興趣。他立刻追問蕭斯宇的政治主張,蕭斯宇卻輕松地掩飾自己是一個無黨派人士。
加藤被帶到了特高科,面對著大名鼎鼎的加藤,特高科的小野中佐卻顯得不屑一顧。小野告訴加藤,他的兵棋推演能力對于帝國意義重要,因此不可以輕易涉險。說著他怒氣沖沖的帶著加藤來到一個隱秘的房間,原來房間中都是陳列著淞滬會戰中日軍陣亡將士的骨灰盒。小野指責加藤推演錯誤,才造成了日軍這么大的傷亡。加藤卻堅持認為自己的推延,沒有錯誤,是前線指揮官指揮失誤所致。
當晚,四人一起在房間打牌,在牌局中,少白根據今年打牌風格,譏諷沈麗華做事膽小怕事,謹慎有余魄力不足,遭到沈麗華反唇相譏。少白又推理蕭斯宇的性格很是得意,少白依靠著自己過人的數學天分,眼看就要勝券在握,誰知蕭斯宇還是技高一籌,最終勝出,這場少白既感到憋屈又無可奈何。
在特高科,小野拿出了蕭斯宇的照片。加藤立刻辨認出照片上的人正是自己的師兄蕭斯宇,他告訴小野蕭斯宇已經在德國死亡。但是小野卻不相信,武斷的要求加藤提供給自己蕭斯宇的線索。看到加藤不肯說,小野故意激將他,說他在兵棋推演方面不如蕭斯宇。果然加藤深受刺激,生死力竭的喊出在中國自己只有一個對手那就是蕭斯宇,不過他已經在德國死了。原來當年,加藤和蕭斯宇都師從赫爾曼,鋒芒畢露的蕭斯宇遭到學長加藤的嫉妒迫害,因為當時中日正在開戰,軍方軍方擔心蕭斯宇的推演能力會對戰局產生影響,便讓加藤尋找機會除掉蕭斯宇。在日本軍方的密謀下,精心策劃一樁針對蕭斯宇的爆炸。爆炸聲響起時,加藤親眼看到,蕭斯宇倒在血泊之中,不省人事,因此他有理由相信蕭斯宇已經死亡。
加藤當晚外出時,在大街上他注意到身后有人跟蹤,不久后前方也出現了一個可疑的黑衣人。加藤意識到情況不妙,就在兩名殺手朝著加藤快速靠近準備下手時,卻被緊跟在加藤身后保護他的日本特高課特務擊斃。
打完牌后,少白在屋子里四處溜達,想要尋找到密室,只是苦于無法找到密室的入口。原來他這次來上海背負的使命之一,就是取出父親藏在密室里的東西。少白和元寶一商量覺得蕭斯宇這個人不簡單,于是決定從明天開始正式跟蹤蕭斯宇,以便弄清楚他的真實身份。
第二天,少白和元寶早早地出門躲了起來,隨后他們跟在出門的蕭斯宇身后,沒想到直接被蕭斯宇識破。蕭斯宇質問少白為何跟蹤自己,少白一時啞口無言,旁邊的元寶卻指責蕭斯宇霸占少白家的房子,居心叵測。蕭斯宇卻懶得與他們糾纏,直接去銀行上班。
徐志來到上海,準備和巨鯨會合,誰知由于叛徒的泄密,他一來到上海就受到了特高課特務的監視。小野嚴令特務們不許輕舉妄動,他準備放長線釣大魚,通過徐志抓捕巨鯨。徐志獨自來到飯店,剛好少白和元寶也來到這家飯店吃飯,不一會兒徐志的小籠包子被送了上來,少白湊了過去花錢買下了一籠小籠包子。而這一幕剛好被旁邊監視的特務看在眼眼里,立刻注意到了少白。徐志正準備吃包子,卻發現籠底藏著一張小紙條,上面寫著有叛徒三個字。徐志立刻意識到自己可能已經暴露,但他還是不動聲色的吃完了包子,然后離開。
少白和元寶走出飯店,細心的少白發現有人跟蹤,他要求元寶不要慌張,自己和他分頭走,到時候再次匯合。和元寶分開后,少白故意四處溜達,一路東張西望,機智的他在鬧市中輕松擺脫了特務的跟蹤,并把特務們耍得團團轉。少白剛甩脫了特務,就遇到了雷虎,便和雷虎一起去了他家。雷虎發現,少白嘴角沒有痣,和小時候似乎不大一樣。少白卻掩飾說自己經歷了一場事故,動了個小手術。聽了少白的話,雷虎卻有些半信半疑。