diff --git a/game-programmer-zh-cn.dot b/game-programmer-zh-cn.dot
index 2c1c725..b895df5 100644
--- a/game-programmer-zh-cn.dot
+++ b/game-programmer-zh-cn.dot
@@ -1,793 +1,810 @@
-digraph {
-    compound=true
-    fontname="Futura"
-    fontsize=20
-    margin="0,0"
-    ranksep=0.25
-    nodesep=0.15
-    penwidth=0.5
-    labeljust="left"
-    bgcolor="#666666"
-
-    style="rounded,filled"
-    color="none"
-    fillcolor=""
-    node [fontname="Helvetica-Light", fontsize=10, shape=none, penwidth=0.5]
-    edge [fontname="Helvetica-Light", fontsize=10, arrowhead=vee, arrowsize=0.75]
-
-    subgraph cluster_toc {
-        style=invis;
-
-        edge [color="#cccccc"]
-
-        {
-            node [fontcolor=white]
-
-            toctop [fixedsize=true,width=8, height=3, shape=plaintext,label=<
-                
-| 游戏程序员的 | 
| 学习之路 | 
                Milo Yip 2016/12/20 | 
-                | https://github.com/miloyip/game-programmer | 
-                
-            > URL="https://github.com/miloyip/game-programmer"]
-            tocbottom [fixedsize=true,width=8,height=0.01,style=invis,label=""]
-        }
-
-        {
-            node [shape="box", style="rounded,filled", fixedsize=true, width=3, height=0.5, fontname="Futura", fontsize=10]
-
-            kid         [color="#edc5ce", label=< 0. 编程学前班>]
-            cs          [color="#edc5c5", label=" 1. 计算机科学"]
-            proglang    [color="#eddac5", label=" 2. 编程语言"]
-            softwaredev [color="#ebebc6", label=" 3. 软件开发"]
-            math        [color="#d9ebc6", label=< 4. 游戏程序员的数学课>]
-            gameprog    [color="#c5edc5", label=" 5. 游戏编程"]
-            gameengine  [color="#c5ede1", label=< 6. 游戏引擎开发>]
-            cg          [color="#c5e1ed", label=" 7. 计算机图形学(CG)"]
-            audio       [color="#c5cbed", label=" 8. 游戏音效"]
-            phyanim     [color="#d7c5ed", label=< 9. 游戏物理和动画>]
-            ai          [color="#edc5ed", label=< 10. 游戏人工智能(AI)>]
-            multiplayer [color="#edc5d7", label=< 11. 多人游戏编程>]
-        }
-        kid -> cs -> proglang -> softwaredev -> math -> gameprog -> gameengine
-        gameengine -> cg -> audio -> phyanim -> ai -> multiplayer[style=invis]
-        gameengine -> { cg; phyanim; ai; audio; multiplayer} [tailport=e, headport=e, constraint=false]
-
-        toctop -> kid [style=invis]
-        multiplayer -> tocbottom [style=invis]
-    }
-
-    edge [style=dotted]
-
-    subgraph cluster_legend {
-        fillcolor="#dddddd"
-        label=<>
-        node [shape=none, fixedsize=true, width=2, height=0.25]
-
-        legendA1 [label="推荐路线"]
-        legendB1 [label="可选路线"]
-        legendA2 [label="", height=0.01]
-        legendB2 [label="", height=0.01]
-        legendA1 -> legendA2 [minlen=2,arrowhead=normal, style=solid]
-        legendB1 -> legendB2 [minlen=2]
-
-        legendtop [fixedsize=true,width=8,height=0.01,style=invis,label=""]
-        legendbottom [fixedsize=true,width=8,height=0.01,style=invis,label=""]
-        legendtop -> { legendA1; legendB1 } [style=invis]
-        { legendA2; legendB2 } -> legendbottom [style=invis]
-    }
-
-    subgraph cluster_kid {
-        fillcolor="#f9ecef"
-        label=<>
-
-        {
-            node [shape="box", style="rounded,filled" color="#edc5ce"]
-            {
-                rank=same
-                age5 [label="从5岁开始"]
-                age8 [label="从8岁开始"]
-            }
-            kidintermediate [label="中级孩童游戏编程"]
-        }
-
-        scratchjr [label=<  | 
The Official ScratchJr Book (2015) | 
> URL="https://www.amazon.com/dp/1593276710/"]
-        
-        codinggamesinscratch [label=<  | 
Coding Games in Scratch (2015) | 
> URL="https://www.amazon.com/dp/1465439358/"]
-        superscratchprogadv [label=<  | 
Super Scratch Programming Adventure! (2013) | 
> URL="https://www.amazon.com/dp/1593275315/"]
-        learntoprogramwithscratch [label=<  | 
Learn to Program  with Scratch (2014) | 
> URL="https://www.amazon.com/dp/1593275439/"]
-        helpyoukidswithcomputercoding [label=<  | 
Help Your Kids with Computer Coding (2015) | 
> URL="https://www.amazon.com/dp/146541956X/"]
-        
-        inventgamepython3 [label=<  | 
Invent Your Own Computer Games with Python 3rd Ed (2015) | 
> URL="https://www.amazon.com/dp/1503212300/"]
-        makinggamespython [label=<  | 
Making Games with Python & Pygame (2012) | 
> URL="https://www.amazon.com/dp/1469901730/"]
-        learntoprogramwithminecraft [label=<  | 
Learn to Program with Minecraft (2015) | 
> URL="https://www.amazon.com/dp/1593276702/"]
-        adventuresinminecraft [label=<  | 
零基础学Minecraft编程 (2015) | 
> URL="https://book.douban.com/subject/26613247/"]
-        "3dgpforkids" [label=<  | 
3D Game Programming for Kids (2013) | 
> URL="https://www.amazon.com/dp/1937785440/"]
-
-        age5 -> scratchjr -> age8
-        age8 -> codinggamesinscratch -> helpyoukidswithcomputercoding -> kidintermediate [arrowhead=normal, style=solid]
-        age8 -> superscratchprogadv -> learntoprogramwithscratch -> kidintermediate
-
-        kidintermediate -> inventgamepython3 -> makinggamespython
-        kidintermediate -> learntoprogramwithminecraft -> adventuresinminecraft
-        kidintermediate -> "3dgpforkids"
-
-        kidtop [fixedsize=true,width=8,height=0.01,style=invis, label=""]
-        kidbottom [fixedsize=true,width=8,height=0.01,style=invis,label=""]
-        kidtop -> {age5; age8} [style=invis]
-        adventuresinminecraft -> kidbottom [style=invis]
-    }
-
-    subgraph cluster_cs {
-        fillcolor="#f9ecec"
-        label=<>
-
-        {
-            node [shape="box", style="rounded,filled" color="#edc5c5"]
-            rank=same
-            foundation [label="计算机基础"]
-            algorithm [label="算法"]
-            csmath [label="计算机数学"]
-        }
-
-        sicp2 [label=<  | 
计算机程序的构造和解释 (2004) | 
> URL="https://book.douban.com/subject/1148282/"]
-        csapp3 [label=<  | 
深入理解计算机系统 (原书第3版) (2016) | 
> URL="https://book.douban.com/subject/26912767/"]
-        caaqa5 [label=<  | 
计算机体系结构 (2012) | 
> URL="https://book.douban.com/subject/20452387/"]
-        mos4 [label=<  | 
现代操作系统(第3版) (2009) | 
> URL="https://book.douban.com/subject/3852290/"]
-        
-        clrs3 [label=<  | 
算法导论(原书第3版) (2012) | 
> URL="https://book.douban.com/subject/20432061/"]
-        algorithms4 [label=<  | 
算法(第4版) (2012) | 
> URL="https://book.douban.com/subject/19952400/"]
-        
-        concretemaths2 [label=<  | 
具体数学 (2013) | 
> URL="https://book.douban.com/subject/21323941/"]
-        computationalscieng [label=<  | 
Computational Science and Engineering (2007) | 
> URL="https://www.amazon.com/dp/0961408812/"]
-
-        foundation -> { sicp2; csapp3 } -> { caaqa5; mos4 } [arrowhead=normal, style=solid]
-        algorithm -> clrs3 [arrowhead=normal, style=solid]
-        algorithm -> algorithms4 -> clrs3
-        csmath -> concretemaths2 -> computationalscieng
-
-        cstop [fixedsize=true,width=8,height=0.01,style=invis, label=""]
-        csbottom [fixedsize=true,width=8,height=0.01,style=invis,label=""]
-        cstop -> { foundation; csmath; algorithm } [style=invis]
-        caaqa5 -> csbottom [style=invis]
-    }
-
-    subgraph cluster_proglang {
-        fillcolor="#f9f3ec"
-        label=<>
-
-        {
-            node [shape="box", style="rounded,filled" color="#eddac5"]
-
-            {
-                rank=same
-                cbegin [label="C"]
-                lua [label="Lua"]
-                csharp [label="C#"]
-            }
-
-            cppbegin [label="C++ 新手"]
-            cpppractice [label="C++ 实践"]
-            cpplibrary [label="C++ 标准库"]
-            cppadvance [label="C++ 进阶"]
-        }
-
-        tcpl2 [label=<  | 
C程序设计语言 (2004) | 
> URL="https://book.douban.com/subject/1139336/"]
-
-        cppprimer5 [label=<  | 
C++ Primer 中文版 (第 5 版) (2013) | 
> URL="https://book.douban.com/subject/25708312/"]
-        tcpppl4 [label=<  | 
C++ 程序设计语言(原书第 4 版) (2016) | 
> URL="https://book.douban.com/subject/26857943/"]
-        cppstandardlibrary2 [label=<  | 
C++标准库(第2版) (2015) | 
> URL="https://book.douban.com/subject/26419721/"]
-        boostcpplibraries2 [label=<  | 
The Boost C++ Libraries 2nd Ed (2014) | 
> URL="https://www.amazon.com/dp/1937434362/"]
-        cppconcurrencyinaction [label=<  | 
C++并发编程实战 (2015) | 
> URL="https://book.douban.com/subject/26386925/"]
-
-        effectivestl [label=<  | 
Effective STL中文版 (2013) | 
> URL="https://book.douban.com/subject/24534868/"]
-
-        exceptionalcpp [label=<  | 
Exceptional C++(中文版) (2012) | 
> URL="https://book.douban.com/subject/10785602/"]
-        moreexceptionalcpp [label=<  | 
More Exceptional C++ 中文版 (2002) | 
> URL="https://book.douban.com/subject/1244943/"]
-        exceptionalcppstyle [label=<  | 
Exceptional C++ Style 中文版 (2006) | 
> URL="https://book.douban.com/subject/1470842/"]
-        cppcodingstandard [label=<  | 
C++编程规范 (2010) | 
> URL="https://book.douban.com/subject/5348095/"]
-
-        effectivecpp3 [label=<  | 
Effective C++ (2006) | 
> URL="https://book.douban.com/subject/1842426/"]
-        moreeffectivecpp3 [label=<  | 
More Effective C++ (中文版) (2011) | 
> URL="https://book.douban.com/subject/5908727/"]
-        effectivemoderncpp [label=<  | 
Effective Modern C++ (2014) | 
> URL="https://www.amazon.com/dp/1491903996/"]
-        optimizedcpp [label=<  | 
Optimized C++ (2016) | 
> URL="https://www.amazon.com/dp/1491922060/"]
-
-        insidecppobjectmodel [label=<  | 
深度探索C++对象模型 (2012) | 
> URL="https://book.douban.com/subject/10427315/"]
-        imperfectcpp [label=<  | 
Imperfect C++中文版 (2006) | 
> URL="https://book.douban.com/subject/1470838/"]
-        cpptemplates [label=<  | 
C++ Templates中文版 (2013) | 
> URL="https://book.douban.com/subject/23780707/"]
-        elementsofprogramming [label=<  | 
编程原本 (2012) | 
> URL="https://book.douban.com/subject/7564093/"]
-        frommathtogeneric [label=<  | 
From Mathematics to Generic Programming (2014) | 
> URL="https://www.amazon.com/dp/0321942043/"]
-        moderncppdesign [label=<  | 
C++设计新思维 (2003) | 
> URL="https://book.douban.com/subject/1103566/"]
-
-        programminginlua4 [label=<  | 
LUA程序设计(第2版) (2008) | 
> URL="https://book.douban.com/subject/3076942/"]
-        luaprogramminggems [label=<  | 
Lua Programming Gems (2008) | 
> URL="https://www.amazon.com/dp/8590379841/"]
-
-        mvcsharpstepbystep8 [label=<  | 
Visual C#从入门到精通(第8版)  (2016) | 
> URL="https://book.douban.com/subject/26937762/"]
-        csharpindepth3 [label=<  | 
深入理解C#(第3版) (2014) | 
> URL="https://book.douban.com/subject/25843328/"]
-        clrviacsharp4 [label=<  | 
CLR via C#(第4版) (2015) | 
> URL="https://book.douban.com/subject/26285940/"]
-
-        cbegin -> tcpl2 -> cppbegin [arrowhead=normal, style=solid]
-
-        cppbegin -> cppprimer5 -> cpppractice [arrowhead=normal, style=solid]
-
-        cppbegin -> tcpppl4
-        cppprimer5 -> cpplibrary [arrowhead=normal, style=solid]
-        tcpppl4 -> cpplibrary
-        
-        cpplibrary -> cppstandardlibrary2 [arrowhead=normal, style=solid]
-        cppstandardlibrary2 -> effectivestl
-        cppstandardlibrary2 -> cppconcurrencyinaction -> boostcpplibraries2
-
-        cpppractice -> effectivecpp3 -> effectivemoderncpp -> cppcodingstandard [arrowhead=normal, style=solid]
-        effectivecpp3 -> moreeffectivecpp3 -> effectivemoderncpp
-        effectivemoderncpp -> optimizedcpp -> cppadvance
-        cpppractice -> exceptionalcpp -> moreexceptionalcpp -> exceptionalcppstyle -> cppcodingstandard -> cppadvance
-        cppadvance -> elementsofprogramming -> frommathtogeneric
-        cppadvance -> { insidecppobjectmodel; cpptemplates }
-        insidecppobjectmodel -> imperfectcpp
-        cpptemplates -> moderncppdesign
-
-        lua -> programminginlua4 -> luaprogramminggems
-
-        csharp -> mvcsharpstepbystep8 -> csharpindepth3 -> clrviacsharp4
-
-        progtop [fixedsize=true,width=8,height=0.01,style=invis,label=""]
-        progbottom [fixedsize=true,width=8,height=0.01,style=invis,label=""]
-        progtop -> { cbegin; csharp; lua } [style=invis]
-        moderncppdesign -> progbottom [style=invis]
-    }
-
-    subgraph cluster_se {
-        fillcolor="#f8f8ec"
-        label=<>
-
-        {
-            node [shape="box", style="rounded,filled", color="#ebebc6"]
-            sebegin [label="软件开发新手"]
-            sepractice [label="实践"]
-            dp [label="设计模式"]
-            uml [label="UML"]
-        }
-
-        mythicalmanmonth2 [label=<  | 
人月神话 (2007) | 
> URL="https://book.douban.com/subject/2230248/"]
-
-        codecomplete2 [label=<  | 
代码大全 (2007) | 
> URL="https://book.douban.com/subject/2208626/"]
-        apidesignforcpp [label=<  | 
C++ API设计 (2013) | 
> URL="https://book.douban.com/subject/24869855/"]
-
-        agilesoftwaredev [label=<  | 
敏捷软件开发 (2008) | 
> URL="https://book.douban.com/subject/2347790/"]
-        designpatterns [label=<  | 
设计模式 (2007) | 
> URL="https://book.douban.com/subject/2111801/"]
-        headfirstdesignpatterns [label=<  | 
Head First 设计模式(中文版) (2007) | 
> URL="https://book.douban.com/subject/2243615/"]
-        practiceofprogramming [label=<  | 
程序设计实践 (2011) | 
> URL="https://book.douban.com/subject/6524000/"]
-        cleancode [label=<  | 
编码整洁之道 (2012) | 
> URL="https://book.douban.com/subject/11602008/"]
-        refactoring [label=<  | 
重构 (2010) | 
> URL="https://book.douban.com/subject/4262627/"]
-        workingeffectivelylegacycode [label=<  | 
修改代码的艺术 (2014) | 
> URL="https://book.douban.com/subject/25904007/"]
-
-        umldistilled3 [label=<  | 
UML精粹 (2012) | 
> URL="https://book.douban.com/subject/10798193/"]
-        umluserguide2 [label=<  | 
UML用户指南 (2006) | 
> URL="https://book.douban.com/subject/1837454/"]
-        ooadwa3 [label=<  | 
面向对象分析与设计 (2012) | 
> URL="https://book.douban.com/subject/11509672/"]
-
-        sebegin -> mythicalmanmonth2 -> { sepractice; dp } [arrowhead=normal, style=solid]
-        mythicalmanmonth2 -> uml
-
-        sepractice -> practiceofprogramming -> refactoring -> codecomplete2 -> { cleancode; workingeffectivelylegacycode } [arrowhead=normal, style=solid]
-        codecomplete2 -> apidesignforcpp
-
-        dp -> agilesoftwaredev -> designpatterns [arrowhead=normal, style=solid]
-        dp -> headfirstdesignpatterns -> agilesoftwaredev
-
-        uml -> umldistilled3 -> umluserguide2 -> ooadwa3
-
-        setop [fixedsize=true,width=8,height=0.01,style=invis,label=""]
-        sebottom [fixedsize=true,width=8,height=0.01,style=invis,label=""]
-        setop -> sebegin [style=invis]
-        workingeffectivelylegacycode -> sebottom [style=invis]
-    }
-
-    subgraph cluster_math {
-        fillcolor="#f2f8ec"
-        label=<>
-
-        {
-            node [shape="box", style="rounded,filled", color="#d9ebc6"]
-            mathbegin [label="游戏编程数学初阶"]
-            mathadvanced [label="游戏编程数学进阶"]
-        }
-
-        foundationsgedmath [label=<  | 
Foundations of Game Engine Development, Vol 1: Mathematics (2016) | 
> URL="https://www.amazon.com/dp/0985811749/"]
-        math3dcpcg3 [label=<  | 
3D游戏与计算机图形学 中的数学方法(第3版) (2016) | 
> URL="https://book.douban.com/subject/26864861/"]
-        "3dmathprimer2" [label=<  | 
3D Math Primer for Graphics and Game Development 2nd Ed (2011) | 
> URL="https://www.amazon.com/dp/1568817231/"]
-        essentialmaths3 [label=<  | 
Essential Mathematics for Games and Interactive Applications 3rd Ed (2011) | 
> URL="https://www.amazon.com/dp/1482250926/"]
-
-        geometricalgebra [label=<  | 
Geometric Algebra for Computer Science (2007) | 
> URL="https://www.amazon.com/dp/0123749425/"]
-        geometrictools [label=<  | 
计算机图形学 几何工具算法详解 (2005) | 
> URL="https://book.douban.com/subject/1224798/"]
-        computationalgeometry [label=<  | 
计算几何 (2009) | 
> URL="https://book.douban.com/subject/3893574/"]
-        visualizingquaternions [label=<  | 
Visualizing Quaternions (2006) | 
> URL="https://www.amazon.com/dp/0120884003/"]
-        divgradcurl4 [label=<  | 
散度、旋度、梯度释义 (2015) | 
> URL="https://book.douban.com/subject/26688502/"]
-
-        mathbegin -> foundationsgedmath
-        mathbegin -> math3dcpcg3 -> mathadvanced [arrowhead=normal, style=solid]
-        mathbegin -> "3dmathprimer2"
-        mathbegin -> essentialmaths3
-
-        { foundationsgedmath; "3dmathprimer2"; essentialmaths3 } -> mathadvanced
-
-        mathadvanced -> geometrictools -> computationalgeometry [arrowhead=normal, style=solid]
-        mathadvanced -> geometricalgebra
-        mathadvanced -> visualizingquaternions
-        mathadvanced -> divgradcurl4
-
-        mathtop [fixedsize=true,width=8,height=0.01,style=invis,label=""]
-        mathbottom [fixedsize=true,width=8,height=0.01,style=invis,label=""]
-        mathtop -> mathbegin [style=invis]
-        computationalgeometry -> mathbottom [style=invis]
-    }
-
-    subgraph cluster_gameprog {
-        fillcolor="#ecf9ec"
-        label=<>
-
-        {
-            node [shape="box", style="rounded,filled", color="#c5edc5"]
-            gpbegin [label="开始游戏编程"]
-            scratch [label="使用Windows/DirectX"]
-            unity [label="使用Unity"]
-            unreal [label="使用Unreal"]
-            cocos2dx [label="使用Cocos2d-X"]
-            gpintermediate [label="中级游戏编程"]
-            gpmisc [label="游戏编程文选"]
-        }
-
-        windowsgp2 [label=<  | 
Windows游戏编程大师技巧 (2012) | 
> URL="https://book.douban.com/subject/20282993/"]
-        gamecodingcomplete4 [label=<  | 
游戏编程权威指南 (2016) | 
> URL="https://book.douban.com/subject/26787109/"]
- 
-        introtogdprodev [label=<  | 
Introduction to Game Design, Prototyping, and Development (2014) | 
> URL="https://www.amazon.com/dp/0321933168/"]
-        unityinaction [label=<  | 
Unity5实战 (2016) | 
> URL="https://book.douban.com/subject/26877872/"]
-
-        learninguegd [label=<  | 
Learning Unreal Engine Game Development (2015) | 
> URL="https://www.amazon.com/dp/1784398152/"]
-        blueprintsvisualscripting [label=<  | 
Blueprints Visual Scripting for Unreal Engine (2015) | 
> URL="https://www.amazon.com/dp/1785286013/"]
-
-        cocos2dxbyexample2 [label=<  | 
Cocos2d-X by Example (2015) | 
> URL="https://www.amazon.com/dp/1785288857/"]
-
-        gpalgorithmstechniques [label=<  | 
Game Programming Algorithms and Techniques (2013) | 
> URL="https://www.amazon.com/dp/0321940156/"]
-        gameprogrammingpatterns [label=<  | 
游戏编程模式 (2016) | 
> URL="https://book.douban.com/subject/26880704/"]
-        gpgoldenrules [label=<  | 
Game Programming Golden Rules (2004) | 
> URL="https://www.amazon.com/dp/1584503068/"]
-        crossplatformgp [label=<  | 
Cross-Platform Game Programming (2005) | 
> URL="https://www.amazon.com/dp/1584503793/"]
-        androidndkgdcookbook [label=<  | 
Android NDK Game Development Cookbook (2013) | 
> URL="https://www.amazon.com/dp/1782167781/"]
-        buildingfpsgameunity [label=<  | 
Building an FPS Game with Unity (2015) | 
> URL="https://www.amazon.com/dp/178217480X/"]
-        unityvrprojects [label=<  | 
Unity Virtual Reality Projects (2015) | 
> URL="https://www.amazon.com/dp/178398855X/"]
-        agumentedreality [label=<  | 
Augmented Reality (2016) | 
> URL="https://www.amazon.com/dp/0321883578/"]
-        practicalaugmentedreality [label=<  | 
Practical Augmented Reality (2016) | 
> URL="https://www.amazon.com/dp/0134094239/"]
-
-        {
-            rank=same
-            gpgemsbest [label=<  | 
Best of Game Programming Gems (2008) | 
> URL="https://www.amazon.com/dp/1584505710/"]
-            beginninggp [label=<  | 
Beginning Game Programming (2009) | 
> URL="https://www.amazon.com/dp/159863805X/"]
-            advancedgp [label=<  | 
Advanced Game Programming (2009) | 
> URL="https://www.amazon.com/dp/1598638068/"]
-        }
-
-        {
-            rank=same
-            gpgems [label=<  | 
游戏编程精粹 1 (2004) | 
> URL="https://book.douban.com/subject/1231195/"]
-            gpgems2 [label=<  | 
游戏编程精粹2 (2003) | 
> URL="https://book.douban.com/subject/1146281/"]
-            gpgems3 [label=<  | 
游戏编程精粹3 (2003) | 
> URL="https://book.douban.com/subject/1125738/"]
-            gpgems4 [label=<  | 
游戏编程精粹4 (2005) | 
> URL="https://book.douban.com/subject/1435923/"]
-        }
-        {
-            rank=same
-            gpgems5 [label=<  | 
游戏编程精粹5 (2007) | 
> URL="https://book.douban.com/subject/2248414/"]
-            gpgems6 [label=<  | 
游戏编程精粹6 (2007) | 
> URL="https://book.douban.com/subject/2305250/"]
-            gpgems7 [label=<  | 
游戏编程精粹7 (2010) | 
> URL="https://book.douban.com/subject/4903976/"]
-            gpgems8 [label=<  | 
Game Programming Gems (2010) | 
> URL="https://www.amazon.com/dp/1584507020/"]
-        }
-
-        gpbegin -> { scratch; unity; unreal; cocos2dx }
-        scratch -> gamecodingcomplete4 [arrowhead=normal, style=solid, tailport=se]
-        gamecodingcomplete4 -> gpintermediate [arrowhead=normal, style=solid]
-        scratch -> windowsgp2
-
-        windowsgp2 -> gamecodingcomplete4[style=invis]
-
-        unity -> introtogdprodev -> unityinaction -> gpintermediate
-
-        unreal -> learninguegd -> blueprintsvisualscripting -> gpintermediate
-
-        cocos2dx -> cocos2dxbyexample2 -> gpintermediate
-
-        gpintermediate -> gpalgorithmstechniques -> gameprogrammingpatterns [arrowhead=normal, style=solid]
-        gameprogrammingpatterns -> gpgoldenrules -> gpmisc 
-        gpintermediate -> crossplatformgp -> androidndkgdcookbook
-        gpintermediate -> buildingfpsgameunity -> unityvrprojects
-        gpintermediate -> agumentedreality -> practicalaugmentedreality
-
-        {
-            rank=same; gpgoldenrules; gpmisc 
-        }
-        gpmisc -> gpgemsbest
-        gpgemsbest -> gpgems
-        gpmisc -> beginninggp -> advancedgp
-        gpgems -> gpgems2 -> gpgems3 -> gpgems4
-        gpgems4 -> gpgems5
-        gpgems5 -> gpgems6 -> gpgems7 -> gpgems8
-
-        gametop [fixedsize=true,width=8,height=0.01,style=invis,label=""]
-        gamebottom [fixedsize=true,width=8,height=0.01,style=invis,label=""]
-        gametop -> { gpbegin; unity } [style=invis]
-        gpgems7 -> gamebottom [style=invis]
-    }
-
-    subgraph cluster_engine {
-        fillcolor="#ecf9f5"
-        label=<>
-
-        {
-            node [shape="box", style="rounded,filled", color="#c5ede1"]
-            gebegin [label="游戏引擎开发新手"]
-            gearticles [label="游戏引擎文选"]
-            gescript [label="脚本引擎"]
-            geoptimization [label="优化"]
-            getool [label="工具开发"]
-        }
-
-        {
-            rank=same
-            gameenginearchitecture2 [label=<  | 
游戏引擎架构 (2014) | 
> URL="https://book.douban.com/subject/25815142/"]
-            "3dgameenginearchitecture" [label=<  | 
3D Game Engine Architecture (2004) | 
> URL="https://www.amazon.com/dp/012229064X/"]
-            gameenginedesign2 [label=<  | 
3D Game Engine Design 2nd Ed (2006) | 
> URL="https://www.amazon.com/dp/0122290631/"]
-        }
-        
-        gameenginegems1 [label=<  | 
Game Engine Gems 1 (2010) | 
> URL="https://www.amazon.com/dp/0763778885/"]
-        gameenginegems2 [label=<  | 
Game Engine Gems 2 (2011) | 
> URL="https://www.amazon.com/dp/1568814372/"]
-        gameenginegems3 [label=<  | 
Game Engine Gems 3 (2016) | 
> URL="https://www.amazon.com/dp/1498755658/"]
-        
-        gamescriptingmastery [label=<  | 
游戏脚本高级编程 (2006) | 
> URL="https://book.douban.com/subject/1927405/"]
-        languageimplpatterns [label=<  | 
编程语言实现模式 (2012) | 
> URL="https://book.douban.com/subject/10482195/"]
-        garbagecollectionhandbook [label=<  | 
垃圾回收算法手册: 自动内存管理的艺术 (2016) | 
> URL="https://book.douban.com/subject/26740958/"]
-
-        unity5gameoptimization [label=<  | 
Unity 5 Game Optimization (2015) | 
> URL="https://www.amazon.com/dp/1785884581/"]
-        videogameoptimization [label=<  | 
Video Game Optimization (2010) | 
> URL="https://www.amazon.com/dp/1598634356/"]
-        hackersdelight2 [label=<  | 
算法心得:高效算法的奥秘(原书第2版) (2014) | 
> URL="https://book.douban.com/subject/25837031/"]
-        modernx86assembly [label=<  | 
Modern X86 Assembly Language Programming (2014) | 
> URL="https://www.amazon.com/dp/1484200659/"]
-        gpgpu [label=<  | 
GPGPU Programming for Games and Science (2014) | 
> URL="https://www.amazon.com/dp/1466595353/"]
-        vectorgamemathprocessors [label=<  | 
Vector Games Math Processors (2002) | 
> URL="https://www.amazon.com/dp/1556229216/"]
-
-        gamedevtools [label=<  | 
Game Development Tools (2011) | 
> URL="https://www.amazon.com/dp/1568814321/"]
-        designinguxgamedevtools [label=<  | 
Designing the User Experience of Game Development Tools (2015) | 
> URL="https://www.amazon.com/dp/148224019X/"]
-
-        gebegin -> gameenginearchitecture2 [arrowhead=normal, style=solid]
-        gameenginearchitecture2 -> { gearticles; gescript; geoptimization; getool }
-
-        gameenginearchitecture2 -> "3dgameenginearchitecture" -> gameenginedesign2
-        gearticles -> gameenginegems1 -> gameenginegems2 -> gameenginegems3
-        gescript -> gamescriptingmastery -> languageimplpatterns -> garbagecollectionhandbook
-        geoptimization -> videogameoptimization -> unity5gameoptimization -> hackersdelight2 -> { modernx86assembly; gpgpu; vectorgamemathprocessors}
-        getool -> gamedevtools -> designinguxgamedevtools
-
-        getop [fixedsize=true,width=8,height=0.01,style=invis,label=""]
-        gebottom [fixedsize=true,width=8,height=0.01,style=invis,label=""]
-        getop -> gebegin [style=invis]
-        gpgpu -> gebottom [style=invis]
-    }
-
-    subgraph cluster_cg {
-        fillcolor="#ecf5f9"
-        label=<>
-
-        {
-            node [shape="box", style="rounded,filled", color="#c5e1ed"]
-            cgbegin [label="游戏图形学初级"]
-            cgtheory [label="图形学理论初级"]
-            cgadvanced [label="图形学进阶"]
-            realtimerendering [label="实时渲染"]
-            offlinerendering [label="离线渲染"]
-            d3d [label="Direct3D"]
-            ogl [label="OpenGL"]
-            cgtech [label="图形学技术"]
-            cgmisc [label="图形学文选"]
-        }
-
-        rt3drendering [label=<  | 
Real-Time 3D Rendering with DirectX and HLSL (2014) | 
> URL="https://www.amazon.com/dp/0321962729/"]
-        "3dgpdx12" [label=<  | 
DirectX 9.0 3D游戏开发编程基础 (2007) | 
> URL="https://book.douban.com/subject/2111771/"]
-        oglguide9 [label=<  | 
OpenGL编程指南(原书第8版) (2014) | 
> URL="https://book.douban.com/subject/26220248/"]
-
-        fundamentalscg4 [label=<  | 
计算机图形学 (2007) | 
> URL="https://book.douban.com/subject/2116178/"]
-        cgpp3 [label=<  | 
计算机图形学原理及实践: C语言描述(原书第2版) (2004) | 
> URL="https://book.douban.com/subject/1230412/"]
-        pdis [label=<  | 
Principles of Digital Image Synthesis (PODIS) (1995) | 
> URL="https://www.amazon.com/dp/1558602763/"]
-        digitalimageprocessing3 [label=<  | 
数字图像处理 (2010) | 
> URL="https://book.douban.com/subject/4285832/"]
-
-        graphicsshaders2 [label=<  | 
图形着色器 (2013) | 
> URL="https://book.douban.com/subject/23858154/"]
-        glsl3 [label=<  | 
OpenGL着色语言 (2006) | 
> URL="https://book.douban.com/subject/1911849/"]
-        oglsuper7 [label=<  | 
OpenGL Super Bible 7th Ed (2015) | 
> URL="https://www.amazon.com/dp/0672337479/"]
-        ogles3guide2 [label=<  | 
OpenGL ES 3.0编程指南 (2015) | 
> URL="https://book.douban.com/subject/26414014/"]
-        oglinsights [label=<  | 
| OpenGL Insights (2012) | 
> URL="https://www.amazon.com/dp/1439893764/"]
-        vulkanguide [label=<  | 
Vulkan Programming Guide (2016) | 
> URL="https://www.amazon.com/dp/0134464540/"]
-
-        practiald3d11 [label=<  | 
Practical Rendering and Computation with Direct3D 11 (2011) | 
> URL="https://www.amazon.com/dp/1568817207/"]
-
-        rtr3 [label=<  | 
实时计算机图形学 (2004) | 
> URL="https://book.douban.com/subject/1231141/"]
-        tricks3dgpgurus [label=<  | 
3D游戏编程大师技巧 (2005) | 
> URL="https://book.douban.com/subject/1321769/"]
-        realtimeshadows [label=<  | 
实时阴影技术 (2013) | 
> URL="https://book.douban.com/subject/25908680/"]
-        rtvolumegraphics [label=<  | 
Real-Time Volume Graphics (2006) | 
> URL="https://www.amazon.com/dp/1568812663/"]
-        graphicsprogrammingmethods [label=<  | 
Graphics Programming Methods (2003) | 
> URL="https://www.amazon.com/dp/1584502991/"]
-        gpugems [label=<  | 
GPU精粹 (2006) | 
> URL="https://book.douban.com/subject/1480239/"]
-        gpugems2 [label=<  | 
GPU精粹2 (2007) | 
> URL="https://book.douban.com/subject/2144796/"]
-        gpugems3 [label=<  | 
GPU精粹3 (2010) | 
> URL="https://book.douban.com/subject/4851196/"]
-        gpupro [label=<  | 
| GPU Pro (2010) | 
> URL="https://www.amazon.com/dp/1568814720/"]
-        gpupro2 [label=<  | 
| GPU Pro 2 (2011) | 
> URL="https://www.amazon.com/dp/1568817185/"]
-        gpupro3 [label=<  | 
| GPU Pro 3 (2012) | 
> URL="https://www.amazon.com/dp/1439887829/"]
-        gpupro4 [label=<  | 
| GPU Pro 4 (2013) | 
> URL="https://www.amazon.com/dp/1466567430/"]
-        gpupro5 [label=<  | 
| GPU Pro 5 (2014) | 
> URL="https://www.amazon.com/dp/1482208636/"]
-        gpupro6 [label=<  | 
| GPU Pro 6 (2015) | 
> URL="https://www.amazon.com/dp/1482264617/"]
-        gpupro7 [label=<  | 
| GPU Pro 7 (2016) | 
> URL="https://www.amazon.com/dp/149874253X/"]
-
-        pbrt3 [label=<  | 
Physically Based Rendering (PBRT) 3rd Ed (2016) | 
> URL="https://www.amazon.com/dp/0128006455/"]
-        raytracingfromgroundup [label=<  | 
光线跟踪算法技术 (2011) | 
> URL="https://book.douban.com/subject/6028258/"]
-        advancedgi2 [label=<  | 
Advanced Global Illumination 2nd Ed (2006) | 
> URL="https://www.amazon.com/dp/1568813074/"]
-        productionvolumerendering [label=<  | 
Production Volume Rendering (2012) | 
> URL="https://www.amazon.com/dp/156881724X/"]
-
-        texturingmodeling3 [label=<  | 
Texturing and Modeling (2002) | 
> URL="https://www.amazon.com/dp/1558608486/"]
-        lod [label=<  | 
Level of Detail for 3D Graphics (2002) | 
> URL="https://www.amazon.com/dp/0123991811/"]
-        "3denginedesignvirtualglobes" [label=<  | 
3D Engine Design for Virtual Globes (2011) | 
> URL="https://www.amazon.com/dp/1568817118/"]
-        polygonmeshprocessing [label=<  | 
Polygon Mesh Processing (2010) | 
> URL="https://www.amazon.com/dp/1568814267/"]
-        isosurfaces [label=<  | 
| Isosurfaces (2013) | 
> URL="https://www.amazon.com/dp/1466570970/"]
-        npr [label=<  | 
Non-Photorealistic Rendering (2001) | 
> URL="https://www.amazon.com/dp/1568811330/"]
-        npcg [label=<  | 
Non-Photorealistic Computer Graphics (2002) | 
> URL="https://www.amazon.com/dp/1558607870/"]
-
-        graphicsgems [label=<  | 
| Graphics Gems (1990) | 
> URL="https://www.amazon.com/dp/0122861655/"]
-        graphicsgems2 [label=<  | 
| Graphics Gems II (1991) | 
> URL="https://www.amazon.com/dp/0120644819/"]
-        graphicsgems3 [label=<  | 
| Graphics Gems III (1994) | 
> URL="https://www.amazon.com/dp/0124096735/"]
-        graphicsgems4 [label=<  | 
| Graphics Gems IV (1994) | 
> URL="https://www.amazon.com/dp/0123361559/"]
-        graphicsgems5 [label=<  | 
| Graphics Gems V (1995) | 
> URL="https://www.amazon.com/dp/0125434553/"]
-
-        blinn1 [label=<  | 
Jim Blinn's Corner: A Trip Down the Graphics Pipeline (1997) | 
> URL="https://www.amazon.com/dp/1558603875/"]
-        blinn2 [label=<  | 
Jim Blinn's Corner: Dirty Pixels (1998) | 
> URL="https://www.amazon.com/dp/1558604553/"]
-        blinn3 [label=<  | 
Jim Blinn's Corner: Notation, Notation, Notation (2002) | 
> URL="https://www.amazon.com/dp/B01FGPKA62/"]
-
-        glassenernotebook1 [label=<  | 
Andrew Glassner's Notebook (1999) | 
> URL="https://www.amazon.com/dp/1558605983/"]
-        glassenernotebook2 [label=<  | 
Andrew Glassner's Other Notebook (2002) | 
> URL="https://www.amazon.com/dp/1568811713/"]
-
-        magiccg [label=<  | 
The Magic of Computer Graphics (2011) | 
> URL="https://www.amazon.com/dp/1568815778/"]
-
-        cgbegin -> "3dgpdx12" 
-        cgbegin -> { rt3drendering; oglguide9 }
-
-        { "3dgpdx12"; rt3drendering; oglguide9 } -> cgtheory
-
-        cgtheory -> fundamentalscg4 [arrowhead=normal, style=solid]
-        cgtheory-> { cgpp3; pdis; digitalimageprocessing3 }
-
-        { fundamentalscg4; cgpp3; pdis; digitalimageprocessing3} -> cgadvanced
-
-        cgadvanced -> { realtimerendering; offlinerendering; cgtech;}
-
-        realtimerendering -> rtr3 [arrowhead=normal, style=solid]
-        realtimerendering -> tricks3dgpgurus
-        rtr3 -> graphicsprogrammingmethods -> gpugems -> gpugems2 -> gpugems3 -> gpupro -> gpupro2 -> gpupro3 -> gpupro4 -> gpupro5 -> gpupro6 -> gpupro7
-        { rank=same;rtr3; rtvolumegraphics }
-        rtr3 -> { realtimeshadows; rtvolumegraphics }
-        realtimeshadows -> graphicsprogrammingmethods [style=invis]
-        tricks3dgpgurus -> realtimeshadows [style=invis]
-
-        rtr3 -> { d3d; ogl }
-        d3d -> practiald3d11
-        ogl -> oglsuper7 -> { graphicsshaders2; glsl3 } -> ogles3guide2 -> oglinsights -> vulkanguide
-
-        offlinerendering -> pbrt3 [arrowhead=normal, style=solid]
-        offlinerendering -> raytracingfromgroundup
-        raytracingfromgroundup -> pbrt3 -> advancedgi2 -> productionvolumerendering
-
-        productionvolumerendering -> cgtech [style=invis]
-
-        cgtech -> { cgmisc; texturingmodeling3; lod; npr; }
-        lod -> "3denginedesignvirtualglobes"
-        texturingmodeling3 -> polygonmeshprocessing -> isosurfaces
-        npr -> npcg
-        
-        polygonmeshprocessing -> npr [style=invis]
-
-        {
-            rank=same; glassenernotebook2; magiccg
-        }
-        cgmisc -> graphicsgems -> graphicsgems2 -> graphicsgems3 -> graphicsgems4 -> graphicsgems5
-        cgmisc -> blinn1 -> blinn2 -> glassenernotebook1 -> blinn3 -> glassenernotebook2 -> magiccg
-
-        vulkanguide -> cgmisc [style=invis]
-
-        cgtop [fixedsize=true,width=8,height=0.01,style=invis,label=""]
-        cgbottom [fixedsize=true,width=8,height=0.01,style=invis,label=""]
-        cgtop -> cgbegin [style=invis]
-        glassenernotebook2 -> cgbottom [style=invis]
-    }
-
-    subgraph cluster_audio {
-        fillcolor="#eceef9"
-        label=<>
-
-        {
-            node [shape="box", style="rounded,filled", color="#c5cbed"]
-            audiobegin [label="游戏音频编程"]
-        }
-
-        gameaudioprogramming [label=<  | 
Game Audio Programming (2016) | 
> URL="https://www.amazon.com/dp/149874673X/"]
-        gettingstartedcppaudio [label=<  | 
Getting Started with C++ Audio Programming for Game Development (2013) | 
> URL="https://www.amazon.com/dp/1849699097/"]
-
-        audiobegin -> { gameaudioprogramming; gettingstartedcppaudio }
-
-        audiotop [fixedsize=true,width=8,height=0.01,style=invis,label=""]
-        audiobottom [fixedsize=true,width=8,height=0.01,style=invis,label=""]
-        audiotop -> audiobegin [style=invis]
-        { gameaudioprogramming; gettingstartedcppaudio } -> audiobottom [style=invis]
-    }
-
-    subgraph cluster_physics {
-        fillcolor="#f2ecf9"
-        label=<>
-
-        {
-            node [shape="box", style="rounded,filled",color="#d7c5ed"]
-            animbegin [label="游戏动画初阶"]
-            animadvanced [label="游戏动画进阶"]
-            phybegin [label="游戏物理初阶"]
-            phyadvanced [label="游戏物理进阶"]
-            fluid [label="流体动画/模拟"]
-        }
-
-        natureofcode [label=<  | 
代码本色:用编程模拟自然系统 (2014) | 
> URL="https://book.douban.com/subject/26264736/"]
-        characteranimation [label=<  | 
Character Animation with Direct3D (2011) | 
> URL="https://www.amazon.com/dp/1584505702/"]
-        rt3dcharacteranimation [label=<  | 
Real-time 3D Character Animation with Visual C++ (2001) | 
> URL="https://www.amazon.com/dp/0240516648/"]
-        computeranimation3 [label=<  | 
Computer Animation 3rd Ed (2012) | 
> URL="https://www.amazon.com/dp/0124158420/"]
-        gameik [label=<  | 
Game Inverse Kinematics (2013) | 
> URL="https://www.amazon.com/dp/1484922328/"]
-        physicsbasedanimation [label=<  | 
Physics Based Animation (2005) | 
> URL="https://www.amazon.com/dp/1584503807/"]
-        rtcameras [label=<  | 
Real-Time Cameras (2009) | 
> URL="https://www.amazon.com/dp/0123116341/"]
-
-        physicsforgameprogrammers [label=<  | 
Physics for Game Programmers (2003) | 
> URL="https://www.amazon.com/dp/159059472X/"]
-        physicsforgamedevelopers2 [label=<  | 
游戏开发物理学 第2版 (2015) | 
> URL="https://book.douban.com/subject/26394564/"]
-        physicsmodeling [label=<  | 
Physics Modeling for Game Programmers (2004) | 
> URL="https://www.amazon.com/dp/1592000932/"]
-
-        gamephysicsenginedev2 [label=<  | 
游戏物理引擎开发 (2013) | 
> URL="https://book.douban.com/subject/25821830/"]
-        gamephysics2 [label=<  | 
| Game Physics 2nd Ed (2010) | 
> URL="https://www.amazon.com/dp/0123749034/"]
-        collisiondetection3denv [label=<  | 
Collision Detection in Interactive 3D Environments (2003) | 
> URL="https://www.amazon.com/dp/155860801X/"]
-        rtcollisiondetection [label=<  | 
实时碰撞检测算法技术 (2010) | 
> URL="https://book.douban.com/subject/4861957/"]
-        gamephysicspearls [label=<  | 
Game Physics Pearls (2010) | 
> URL="https://www.amazon.com/dp/1568814747/"]
-
-        taofluidanimation [label=<  | 
The Art of Fluid Animation (2015) | 
> URL="https://www.amazon.com/dp/1498700209/"]
-        fluidsimulationforcg2 [label=<  | 
Fluid Simulation for Computer Graphics 2nd Ed (2015) | 
> URL="https://www.amazon.com/dp/1482232839/"]
-
-        animbegin -> { characteranimation; rt3dcharacteranimation } -> computeranimation3 -> animadvanced
-        animadvanced -> { gameik; physicsbasedanimation; rtcameras}
-        gameik -> rtcameras [style=invis]
-
-        phybegin -> physicsforgameprogrammers
-        phybegin -> physicsforgamedevelopers2
-        physicsforgameprogrammers -> physicsforgamedevelopers2 -> phyadvanced
-        physicsforgameprogrammers -> physicsmodeling -> phyadvanced
-
-        { animbegin; phybegin } -> natureofcode
-
-        phyadvanced -> gamephysicspearls
-        gamephysicspearls -> collisiondetection3denv -> rtcollisiondetection
-        gamephysicspearls -> gamephysicsenginedev2 -> gamephysics2
-
-        { animadvanced; phyadvanced } -> fluid -> taofluidanimation -> fluidsimulationforcg2
-
-        phytop [fixedsize=true,width=8,height=0.01,style=invis,label=""]
-        phybottom [fixedsize=true,width=8,height=0.01,style=invis,label=""]
-        phytop -> { animbegin; phybegin } [style=invis]
-        fluidsimulationforcg2 -> phybottom [style=invis]
-    }
-
-    subgraph cluster_ai {
-        fillcolor="#f9ecf9"
-        label=<>
-
-        {
-            node [shape="box", style="rounded,filled" color="#edc5ed"]
-            aibegin [label="游戏AI初阶"]
-            aiintermediate [label="中级游戏AI"]
-            aimisc [label="游戏AI文选"]
-        }
-
-        aiforgames2 [label=<  | 
Artificial Intelligence for Games 2nd Ed (2009) | 
> URL="https://www.amazon.com/dp/0123747317/"]
-        aiforgd [label=<  | 
游戏开发中的人工智能 (2006) | 
> URL="https://book.douban.com/subject/1899340/"]
-        proggameaibyexample [label=<  | 
游戏人工智能编程 案例精粹 (2012) | 
> URL="https://book.douban.com/subject/19930152/"]
-        unityaigp2 [label=<  | 
Unity人工智能游戏开发(第2版)  (2016) | 
> URL="https://book.douban.com/subject/26911454/"]
-
-        aima3 [label=<  | 
人工智能 (2004) | 
> URL="https://book.douban.com/subject/1230487/"]
-        behavioralmathforgameai [label=<  | 
Behavioral Mathematics for Game AI (2009) | 
> URL="https://www.amazon.com/dp/1584506849/"]
-
-        {
-            rank=same
-            aigpwisdom [label=<  | 
AI Game Programming Wisdom (2002) | 
> URL="https://www.amazon.com/dp//"]
-            aigpwisdom2 [label=<  | 
AI Game Programming Wisdom 2 (2003) | 
> URL="https://www.amazon.com/dp//"]
-            aigpwisdom3 [label=<  | 
AI Game Programming Wisdom 3 (2006) | 
> URL="https://www.amazon.com/dp//"]
-            aigpwisdom4 [label=<  | 
AI Game Programming Wisdom 4 (2008) | 
> URL="https://www.amazon.com/dp//"]
-        }
-        {
-            rank=same
-            gameaipro [label=<  | 
| Game AI Pro (2013) | 
> URL="https://www.amazon.com/dp//"]
-            gameaipro2 [label=<  | 
| Game AI Pro 2 (2015) | 
> URL="https://www.amazon.com/dp//"]
-        }
-
-        aibegin -> aiforgames2 -> aiintermediate -> aima3 [arrowhead=normal, style=solid]
-        aibegin -> { aiforgd; proggameaibyexample; unityaigp2 } -> aiintermediate
-        aiintermediate -> behavioralmathforgameai -> aimisc
-        aima3 -> aimisc
-        aimisc -> aigpwisdom 
-        aigpwisdom -> aigpwisdom2 -> aigpwisdom3 -> aigpwisdom4
-        aigpwisdom4 -> gameaipro -> gameaipro2
-
-        aitop [fixedsize=true,width=8,height=0.01,style=invis,label=""]
-        aibottom [fixedsize=true,width=8,height=0.01,style=invis,label=""]
-        aitop -> aibegin [style=invis]
-        gameaipro2 -> aibottom [style=invis]
-    }
-
-    subgraph cluster_multiplayer {
-        fillcolor="#f9ebf2"
-        label=<>
-
-        {
-            node [shape="box", style="rounded,filled" color="#edc5d7"]
-            multiplayerbegin [label="多人游戏编程初阶"]
-            multiplayermisc [label="多人游戏编程文选"]
-            serverprog [label="服务器编程"]
-            networkprotocol [label="网络协议"]
-            networkprog [label="网络编程"]
-        }
-
-        multiplayergp [label=<  | 
Multiplayer Game Programming (2015) | 
> URL="https://www.amazon.com/dp/0134034309/"]
-        massivelymultiplayergd [label=<  | 
大型多人在线游戏开发 (2006) | 
> URL="https://book.douban.com/subject/1940567/"]
-        massivelymultiplayergd2 [label=<  | 
Massively Multiplayer Game Development 2 (2005) | 
> URL="https://www.amazon.com/dp/1584503904/"]
-
-        progposixthreads [label=<  | 
POSIX多线程程序设计 (2003) | 
> URL="https://book.douban.com/subject/1236825/"]
-        advancedprogunixenv3 [label=<  | 
UNIX环境高级编程(第3版) (2014) | 
> URL="https://book.douban.com/subject/25900403/"]
-        linuxsystemprog2 [label=<  | 
Linux 系统编程(第二版) (2014) | 
> URL="https://book.douban.com/subject/25828773/"]
-
-        tcpipillustratedv1_2 [label=<  | 
TCP/IP详解  卷1:协议 (2016) | 
> URL="https://book.douban.com/subject/26825411/"]
-        tcpipillustratedv2 [label=<  | 
TCP/IP详解  卷2:实现 (2004) | 
> URL="https://book.douban.com/subject/1087767/"]
-        tcpipillustratedv3 [label=<  | 
TCP/IP详解  卷3:TCP事务协议、 HTTP、NNTP 和UNIX域协议 (2000) | 
> URL="https://book.douban.com/subject/1058634/"]
-
-        unixnetworkprogv1_3 [label=<  | 
UNIX网络编程  卷1:套接字联网API(第3版) (2014) | 
> URL="https://book.douban.com/subject/26434583/"]
-        unixnetworkprogv2_2 [label=<  | 
UNIX网络编程  卷2:进程间通信(第2版) (2015) | 
> URL="https://book.douban.com/subject/26434599/"]
-        linuxnetworkinternals [label=<  | 
深入理解 LINUX网络技术内幕 (2009) | 
> URL="https://book.douban.com/subject/4015134/"]
-
-        multiplayerbegin -> multiplayergp [arrowhead=normal, style=solid]
-        multiplayergp -> serverprog
-        multiplayergp -> networkprotocol
-        multiplayergp -> networkprog
-        multiplayergp -> multiplayermisc
-
-        serverprog -> progposixthreads -> advancedprogunixenv3 -> linuxsystemprog2 
-        networkprotocol -> tcpipillustratedv1_2 -> tcpipillustratedv2 -> tcpipillustratedv3
-        networkprog -> unixnetworkprogv1_3 -> unixnetworkprogv2_2 -> linuxnetworkinternals
-
-        multiplayermisc -> massivelymultiplayergd -> massivelymultiplayergd2
-
-        multiplayertop [fixedsize=true,width=8,height=0.01,style=invis,label=""]
-        multiplayerbottom [fixedsize=true,width=8,height=0.01,style=invis,label=""]
-        multiplayertop -> multiplayerbegin [style=invis]
-        { linuxsystemprog2; tcpipillustratedv3; linuxnetworkinternals } -> multiplayerbottom [style=invis]
-    }
-
-    ccsa [fontcolor=white,fontsize=8,label=<
-          | 
-        | This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. | 
-        
>
-        URL = "https://creativecommons.org/licenses/by-sa/4.0/"]
-
-    {
-        edge [style=invis]
-        tocbottom -> legendtop
-        legendbottom -> kidtop
-        kidbottom -> cstop
-        csbottom -> progtop
-        progbottom -> setop
-        sebottom -> mathtop
-        mathbottom -> gametop
-        gamebottom -> getop
-        gebottom -> cgtop
-        cgbottom -> audiotop
-        audiobottom -> phytop
-        phybottom -> aitop
-        aibottom -> multiplayertop
-        multiplayerbottom -> ccsa
-    }
-}
+digraph {
+    compound=true
+    fontname="Futura"
+    fontsize=20
+    margin="0,0"
+    ranksep=0.25
+    nodesep=0.15
+    penwidth=0.5
+    labeljust="left"
+    bgcolor="#666666"
+
+    style="rounded,filled"
+    color="none"
+    fillcolor=""
+    node [fontname="Helvetica-Light", fontsize=10, shape=none, penwidth=0.5]
+    edge [fontname="Helvetica-Light", fontsize=10, arrowhead=vee, arrowsize=0.75]
+
+    subgraph cluster_toc {
+        style=invis;
+
+        edge [color="#cccccc"]
+
+        {
+            node [fontcolor=white]
+
+            toctop [fixedsize=true,width=8, height=3, shape=plaintext,label=<
+                
+| 游戏程序员的 | 
| 学习之路 | 
                Milo Yip 2017/8/7 | 
+                | https://github.com/miloyip/game-programmer | 
+                
+            > URL="https://github.com/miloyip/game-programmer"]
+            tocbottom [fixedsize=true,width=8,height=0.01,style=invis,label=""]
+        }
+
+        {
+            node [shape="box", style="rounded,filled", fixedsize=true, width=3, height=0.5, fontname="Futura", fontsize=10]
+
+            kid         [color="#edc5ce", label=< 0. 编程学前班>]
+            cs          [color="#edc5c5", label=" 1. 计算机科学"]
+            proglang    [color="#eddac5", label=" 2. 编程语言"]
+            softwaredev [color="#ebebc6", label=" 3. 软件开发"]
+            math        [color="#d9ebc6", label=< 4. 游戏程序员的数学课>]
+            gameprog    [color="#c5edc5", label=" 5. 游戏编程"]
+            gameengine  [color="#c5ede1", label=< 6. 游戏引擎开发>]
+            cg          [color="#c5e1ed", label=" 7. 计算机图形学(CG)"]
+            audio       [color="#c5cbed", label=" 8. 游戏音效"]
+            phyanim     [color="#d7c5ed", label=< 9. 游戏物理和动画>]
+            ai          [color="#edc5ed", label=< 10. 游戏人工智能(AI)>]
+            multiplayer [color="#edc5d7", label=< 11. 多人游戏编程>]
+        }
+        kid -> cs -> proglang -> softwaredev -> math -> gameprog -> gameengine
+        gameengine -> cg -> audio -> phyanim -> ai -> multiplayer[style=invis]
+        gameengine -> { cg; phyanim; ai; audio; multiplayer} [tailport=e, headport=e, constraint=false]
+
+        toctop -> kid [style=invis]
+        multiplayer -> tocbottom [style=invis]
+    }
+
+    edge [style=dotted]
+
+    subgraph cluster_legend {
+        fillcolor="#dddddd"
+        label=<>
+        node [shape=none, fixedsize=true, width=2, height=0.25]
+
+        legendA1 [label="推荐路线"]
+        legendB1 [label="可选路线"]
+        legendA2 [label="", height=0.01]
+        legendB2 [label="", height=0.01]
+        legendA1 -> legendA2 [minlen=2,arrowhead=normal, style=solid]
+        legendB1 -> legendB2 [minlen=2]
+
+        legendtop [fixedsize=true,width=8,height=0.01,style=invis,label=""]
+        legendbottom [fixedsize=true,width=8,height=0.01,style=invis,label=""]
+        legendtop -> { legendA1; legendB1 } [style=invis]
+        { legendA2; legendB2 } -> legendbottom [style=invis]
+    }
+
+    subgraph cluster_kid {
+        fillcolor="#f9ecef"
+        label=<>
+
+        {
+            node [shape="box", style="rounded,filled" color="#edc5ce"]
+            {
+                rank=same
+                age5 [label="从5岁开始"]
+                age8 [label="从8岁开始"]
+            }
+            kidintermediate [label="中级孩童游戏编程"]
+        }
+
+        scratchjr [label=<  | 
| 动手玩转ScratchJr编程 (2016) | 
> URL="https://book.douban.com/subject/26906848/"]
+        
+        codinggamesinscratch [label=<  | 
Coding Games in Scratch (2015) | 
> URL="https://www.amazon.com/dp/1465439358/"]
+        superscratchprogadv [label=<  | 
| Scratch超人漫游记 (2017) | 
> URL="https://book.douban.com/subject/27072003/"]
+        learntoprogramwithscratch [label=<  | 
| 动手玩转Scratch2.0编程 (2015) | 
> URL="https://book.douban.com/subject/26658602/"]
+        helpyoukidswithcomputercoding [label=<  | 
Help Your Kids with Computer Coding (2015) | 
> URL="https://www.amazon.com/dp/146541956X/"]
+        
+        inventgamepython4 [label=<  | 
Invent Your Own Computer Games with Python 4th Ed (2016) | 
> URL="https://www.amazon.com/dp/1593277954/"]
+        makinggamespython [label=<  | 
Making Games with Python & Pygame (2012) | 
> URL="https://www.amazon.com/dp/1469901730/"]
+        learntoprogramwithminecraft [label=<  | 
Learn to Program with Minecraft (2015) | 
> URL="https://www.amazon.com/dp/1593276702/"]
+        adventuresinminecraft [label=<  | 
零基础学Minecraft编程 (2015) | 
> URL="https://book.douban.com/subject/26613247/"]
+        "3dgpforkids" [label=<  | 
3D Game Programming for Kids (2013) | 
> URL="https://www.amazon.com/dp/1937785440/"]
+
+        age5 -> scratchjr -> age8
+        age8 -> codinggamesinscratch -> helpyoukidswithcomputercoding -> kidintermediate [arrowhead=normal, style=solid]
+        age8 -> superscratchprogadv -> learntoprogramwithscratch -> kidintermediate
+
+        kidintermediate -> inventgamepython4 -> makinggamespython
+        kidintermediate -> learntoprogramwithminecraft -> adventuresinminecraft
+        kidintermediate -> "3dgpforkids"
+
+        kidtop [fixedsize=true,width=8,height=0.01,style=invis, label=""]
+        kidbottom [fixedsize=true,width=8,height=0.01,style=invis,label=""]
+        kidtop -> {age5; age8} [style=invis]
+        adventuresinminecraft -> kidbottom [style=invis]
+    }
+
+    subgraph cluster_cs {
+        fillcolor="#f9ecec"
+        label=<>
+
+        {
+            node [shape="box", style="rounded,filled" color="#edc5c5"]
+            rank=same
+            foundation [label="计算机基础"]
+            algorithm [label="算法"]
+            csmath [label="计算机数学"]
+        }
+
+        sicp2 [label=<  | 
计算机程序的构造和解释 (2004) | 
> URL="https://book.douban.com/subject/1148282/"]
+        csapp3 [label=<  | 
深入理解计算机系统 (原书第3版) (2016) | 
> URL="https://book.douban.com/subject/26912767/"]
+        caaqa5 [label=<  | 
计算机体系结构 (2012) | 
> URL="https://book.douban.com/subject/20452387/"]
+        mos4 [label=<  | 
现代操作系统(第3版) (2009) | 
> URL="https://book.douban.com/subject/3852290/"]
+        
+        clrs3 [label=<  | 
算法导论(原书第3版) (2012) | 
> URL="https://book.douban.com/subject/20432061/"]
+        algorithms4 [label=<  | 
算法(第4版) (2012) | 
> URL="https://book.douban.com/subject/19952400/"]
+        
+        concretemaths2 [label=<  | 
具体数学 (2013) | 
> URL="https://book.douban.com/subject/21323941/"]
+        computationalscieng [label=<  | 
Computational Science and Engineering (2007) | 
> URL="https://www.amazon.com/dp/0961408812/"]
+
+        foundation -> { sicp2; csapp3 } -> { caaqa5; mos4 } [arrowhead=normal, style=solid]
+        algorithm -> clrs3 [arrowhead=normal, style=solid]
+        algorithm -> algorithms4 -> clrs3
+        csmath -> concretemaths2 -> computationalscieng
+
+        cstop [fixedsize=true,width=8,height=0.01,style=invis, label=""]
+        csbottom [fixedsize=true,width=8,height=0.01,style=invis,label=""]
+        cstop -> { foundation; csmath; algorithm } [style=invis]
+        caaqa5 -> csbottom [style=invis]
+    }
+
+    subgraph cluster_proglang {
+        fillcolor="#f9f3ec"
+        label=<>
+
+        {
+            node [shape="box", style="rounded,filled" color="#eddac5"]
+
+            {
+                rank=same
+                cbegin [label="C"]
+                lua [label="Lua"]
+                csharp [label="C#"]
+            }
+
+            cppbegin [label="C++ 新手"]
+            cpppractice [label="C++ 实践"]
+            cpplibrary [label="C++ 标准库"]
+            cppadvance [label="C++ 进阶"]
+        }
+
+        tcpl2 [label=<  | 
C程序设计语言 (2004) | 
> URL="https://book.douban.com/subject/1139336/"]
+
+        cppprimer5 [label=<  | 
C++ Primer 中文版 (第 5 版) (2013) | 
> URL="https://book.douban.com/subject/25708312/"]
+        tcpppl4 [label=<  | 
C++ 程序设计语言(原书第 4 版) (2016) | 
> URL="https://book.douban.com/subject/26857943/"]
+        cppstandardlibrary2 [label=<  | 
C++标准库(第2版) (2015) | 
> URL="https://book.douban.com/subject/26419721/"]
+        boostcpplibraries2 [label=<  | 
The Boost C++ Libraries 2nd Ed (2014) | 
> URL="https://www.amazon.com/dp/1937434362/"]
+        cppconcurrencyinaction [label=<  | 
C++并发编程实战 (2015) | 
> URL="https://book.douban.com/subject/26386925/"]
+
+        effectivestl [label=<  | 
Effective STL中文版 (2013) | 
> URL="https://book.douban.com/subject/24534868/"]
+
+        exceptionalcpp [label=<  | 
Exceptional C++(中文版) (2012) | 
> URL="https://book.douban.com/subject/10785602/"]
+        moreexceptionalcpp [label=<  | 
More Exceptional C++ 中文版 (2002) | 
> URL="https://book.douban.com/subject/1244943/"]
+        exceptionalcppstyle [label=<  | 
Exceptional C++ Style 中文版 (2006) | 
> URL="https://book.douban.com/subject/1470842/"]
+        cppcodingstandard [label=<  | 
C++编程规范 (2010) | 
> URL="https://book.douban.com/subject/5348095/"]
+
+        effectivecpp3 [label=<  | 
Effective C++ (2006) | 
> URL="https://book.douban.com/subject/1842426/"]
+        moreeffectivecpp3 [label=<  | 
More Effective C++ (中文版) (2011) | 
> URL="https://book.douban.com/subject/5908727/"]
+        effectivemoderncpp [label=<  | 
Effective Modern C++ (2014) | 
> URL="https://www.amazon.com/dp/1491903996/"]
+        optimizedcpp [label=<  | 
Optimized C++ (2016) | 
> URL="https://www.amazon.com/dp/1491922060/"]
+
+        insidecppobjectmodel [label=<  | 
深度探索C++对象模型 (2012) | 
> URL="https://book.douban.com/subject/10427315/"]
+        imperfectcpp [label=<  | 
Imperfect C++中文版 (2006) | 
> URL="https://book.douban.com/subject/1470838/"]
+        cpptemplates [label=<  | 
C++ Templates中文版 (2013) | 
> URL="https://book.douban.com/subject/23780707/"]
+        elementsofprogramming [label=<  | 
编程原本 (2012) | 
> URL="https://book.douban.com/subject/7564093/"]
+        frommathtogeneric [label=<  | 
From Mathematics to Generic Programming (2014) | 
> URL="https://www.amazon.com/dp/0321942043/"]
+        moderncppdesign [label=<  | 
C++设计新思维 (2003) | 
> URL="https://book.douban.com/subject/1103566/"]
+
+        programminginlua4 [label=<  | 
LUA程序设计(第2版) (2008) | 
> URL="https://book.douban.com/subject/3076942/"]
+        luaprogramminggems [label=<  | 
Lua Programming Gems (2008) | 
> URL="https://www.amazon.com/dp/8590379841/"]
+
+        mvcsharpstepbystep8 [label=<  | 
Visual C#从入门到精通(第8版)  (2016) | 
> URL="https://book.douban.com/subject/26937762/"]
+        csharpindepth3 [label=<  | 
深入理解C#(第3版) (2014) | 
> URL="https://book.douban.com/subject/25843328/"]
+        clrviacsharp4 [label=<  | 
CLR via C#(第4版) (2015) | 
> URL="https://book.douban.com/subject/26285940/"]
+
+        cbegin -> tcpl2 -> cppbegin [arrowhead=normal, style=solid]
+
+        cppbegin -> cppprimer5 -> cpppractice [arrowhead=normal, style=solid]
+
+        cppbegin -> tcpppl4
+        cppprimer5 -> cpplibrary [arrowhead=normal, style=solid]
+        tcpppl4 -> cpplibrary
+        
+        cpplibrary -> cppstandardlibrary2 [arrowhead=normal, style=solid]
+        cppstandardlibrary2 -> effectivestl
+        cppstandardlibrary2 -> cppconcurrencyinaction -> boostcpplibraries2
+
+        cpppractice -> effectivecpp3 -> effectivemoderncpp -> cppcodingstandard [arrowhead=normal, style=solid]
+        effectivecpp3 -> moreeffectivecpp3 -> effectivemoderncpp
+        effectivemoderncpp -> optimizedcpp -> cppadvance
+        cpppractice -> exceptionalcpp -> moreexceptionalcpp -> exceptionalcppstyle -> cppcodingstandard -> cppadvance
+        cppadvance -> elementsofprogramming -> frommathtogeneric
+        cppadvance -> { insidecppobjectmodel; cpptemplates }
+        insidecppobjectmodel -> imperfectcpp
+        cpptemplates -> moderncppdesign
+
+        lua -> programminginlua4 -> luaprogramminggems
+
+        csharp -> mvcsharpstepbystep8 -> csharpindepth3 -> clrviacsharp4
+
+        progtop [fixedsize=true,width=8,height=0.01,style=invis,label=""]
+        progbottom [fixedsize=true,width=8,height=0.01,style=invis,label=""]
+        progtop -> { cbegin; csharp; lua } [style=invis]
+        moderncppdesign -> progbottom [style=invis]
+    }
+
+    subgraph cluster_se {
+        fillcolor="#f8f8ec"
+        label=<>
+
+        {
+            node [shape="box", style="rounded,filled", color="#ebebc6"]
+            sebegin [label="软件开发新手"]
+            sepractice [label="实践"]
+            dp [label="设计模式"]
+            uml [label="UML"]
+        }
+
+        mythicalmanmonth2 [label=<  | 
人月神话 (2007) | 
> URL="https://book.douban.com/subject/2230248/"]
+
+        codecomplete2 [label=<  | 
代码大全 (2007) | 
> URL="https://book.douban.com/subject/2208626/"]
+        apidesignforcpp [label=<  | 
C++ API设计 (2013) | 
> URL="https://book.douban.com/subject/24869855/"]
+
+        agilesoftwaredev [label=<  | 
敏捷软件开发 (2008) | 
> URL="https://book.douban.com/subject/2347790/"]
+        designpatterns [label=<  | 
设计模式 (2007) | 
> URL="https://book.douban.com/subject/2111801/"]
+        headfirstdesignpatterns [label=<  | 
Head First 设计模式(中文版) (2007) | 
> URL="https://book.douban.com/subject/2243615/"]
+        practiceofprogramming [label=<  | 
程序设计实践 (2011) | 
> URL="https://book.douban.com/subject/6524000/"]
+        cleancode [label=<  | 
编码整洁之道 (2012) | 
> URL="https://book.douban.com/subject/11602008/"]
+        refactoring [label=<  | 
重构 (2010) | 
> URL="https://book.douban.com/subject/4262627/"]
+        workingeffectivelylegacycode [label=<  | 
修改代码的艺术 (2014) | 
> URL="https://book.douban.com/subject/25904007/"]
+
+        umldistilled3 [label=<  | 
UML精粹 (2012) | 
> URL="https://book.douban.com/subject/10798193/"]
+        umluserguide2 [label=<  | 
UML用户指南 (2006) | 
> URL="https://book.douban.com/subject/1837454/"]
+        ooadwa3 [label=<  | 
面向对象分析与设计 (2012) | 
> URL="https://book.douban.com/subject/11509672/"]
+
+        sebegin -> mythicalmanmonth2 -> { sepractice; dp } [arrowhead=normal, style=solid]
+        mythicalmanmonth2 -> uml
+
+        sepractice -> practiceofprogramming -> refactoring -> codecomplete2 -> { cleancode; workingeffectivelylegacycode } [arrowhead=normal, style=solid]
+        codecomplete2 -> apidesignforcpp
+
+        dp -> agilesoftwaredev -> designpatterns [arrowhead=normal, style=solid]
+        dp -> headfirstdesignpatterns -> agilesoftwaredev
+
+        uml -> umldistilled3 -> umluserguide2 -> ooadwa3
+
+        setop [fixedsize=true,width=8,height=0.01,style=invis,label=""]
+        sebottom [fixedsize=true,width=8,height=0.01,style=invis,label=""]
+        setop -> sebegin [style=invis]
+        workingeffectivelylegacycode -> sebottom [style=invis]
+    }
+
+    subgraph cluster_math {
+        fillcolor="#f2f8ec"
+        label=<>
+
+        {
+            node [shape="box", style="rounded,filled", color="#d9ebc6"]
+            mathbegin [label="游戏编程数学初阶"]
+            mathadvanced [label="游戏编程数学进阶"]
+        }
+
+        foundationsgedmath [label=<  | 
Foundations of Game Engine Development, Vol 1: Mathematics (2016) | 
> URL="https://www.amazon.com/dp/0985811749/"]
+        math3dcpcg3 [label=<  | 
3D游戏与计算机图形学 中的数学方法(第3版) (2016) | 
> URL="https://book.douban.com/subject/26864861/"]
+        "3dmathprimer2" [label=<  | 
3D Math Primer for Graphics and Game Development 2nd Ed (2011) | 
> URL="https://www.amazon.com/dp/1568817231/"]
+        essentialmaths3 [label=<  | 
Essential Mathematics for Games and Interactive Applications 3rd Ed (2011) | 
> URL="https://www.amazon.com/dp/1482250926/"]
+
+        geometricalgebra [label=<  | 
Geometric Algebra for Computer Science (2007) | 
> URL="https://www.amazon.com/dp/0123749425/"]
+        geometrictools [label=<  | 
计算机图形学 几何工具算法详解 (2005) | 
> URL="https://book.douban.com/subject/1224798/"]
+        computationalgeometry [label=<  | 
计算几何 (2009) | 
> URL="https://book.douban.com/subject/3893574/"]
+        visualizingquaternions [label=<  | 
Visualizing Quaternions (2006) | 
> URL="https://www.amazon.com/dp/0120884003/"]
+        divgradcurl4 [label=<  | 
散度、旋度、梯度释义 (2015) | 
> URL="https://book.douban.com/subject/26688502/"]
+
+        mathbegin -> foundationsgedmath
+        mathbegin -> math3dcpcg3 -> mathadvanced [arrowhead=normal, style=solid]
+        mathbegin -> "3dmathprimer2"
+        mathbegin -> essentialmaths3
+
+        { foundationsgedmath; "3dmathprimer2"; essentialmaths3 } -> mathadvanced
+
+        mathadvanced -> geometrictools -> computationalgeometry [arrowhead=normal, style=solid]
+        mathadvanced -> geometricalgebra
+        mathadvanced -> visualizingquaternions
+        mathadvanced -> divgradcurl4
+
+        mathtop [fixedsize=true,width=8,height=0.01,style=invis,label=""]
+        mathbottom [fixedsize=true,width=8,height=0.01,style=invis,label=""]
+        mathtop -> mathbegin [style=invis]
+        computationalgeometry -> mathbottom [style=invis]
+    }
+
+    subgraph cluster_gameprog {
+        fillcolor="#ecf9ec"
+        label=<>
+
+        {
+            node [shape="box", style="rounded,filled", color="#c5edc5"]
+            gpbegin [label="开始游戏编程"]
+            scratch [label="使用Windows/DirectX"]
+            unity [label="使用Unity"]
+            unreal [label="使用Unreal"]
+            cocos2dx [label="使用Cocos2d-X"]
+            gpintermediate [label="中级游戏编程"]
+            gpmisc [label="游戏编程文选"]
+        }
+
+        windowsgp2 [label=<  | 
Windows游戏编程大师技巧 (2012) | 
> URL="https://book.douban.com/subject/20282993/"]
+        gamecodingcomplete4 [label=<  | 
游戏编程权威指南 (2016) | 
> URL="https://book.douban.com/subject/26787109/"]
+ 
+        introtogdprodev [label=<  | 
Introduction to Game Design, Prototyping, and Development (2014) | 
> URL="https://www.amazon.com/dp/0321933168/"]
+        unityinaction [label=<  | 
Unity5实战 (2016) | 
> URL="https://book.douban.com/subject/26877872/"]
+
+        learninguegd [label=<  | 
Learning Unreal Engine Game Development (2015) | 
> URL="https://www.amazon.com/dp/1784398152/"]
+        blueprintsvisualscripting [label=<  | 
Blueprints Visual Scripting for Unreal Engine (2015) | 
> URL="https://www.amazon.com/dp/1785286013/"]
+
+        cocos2dxbyexample2 [label=<  | 
Cocos2d-X by Example (2015) | 
> URL="https://www.amazon.com/dp/1785288857/"]
+
+        gpalgorithmstechniques [label=<  | 
游戏编程算法与技巧 (2016) | 
> URL="https://book.douban.com/subject/26906838/"]
+        gameprogrammingpatterns [label=<  | 
游戏编程模式 (2016) | 
> URL="https://book.douban.com/subject/26880704/"]
+        gpgoldenrules [label=<  | 
Game Programming Golden Rules (2004) | 
> URL="https://www.amazon.com/dp/1584503068/"]
+        crossplatformgp [label=<  | 
Cross-Platform Game Programming (2005) | 
> URL="https://www.amazon.com/dp/1584503793/"]
+        androidndkgdcookbook [label=<  | 
Android NDK Game Development Cookbook (2013) | 
> URL="https://www.amazon.com/dp/1782167781/"]
+        buildingfpsgameunity [label=<  | 
Building an FPS Game with Unity (2015) | 
> URL="https://www.amazon.com/dp/178217480X/"]
+        unityvrprojects [label=<  | 
Unity Virtual Reality Projects (2015) | 
> URL="https://www.amazon.com/dp/178398855X/"]
+        agumentedreality [label=<  | 
Augmented Reality (2016) | 
> URL="https://www.amazon.com/dp/0321883578/"]
+        practicalaugmentedreality [label=<  | 
Practical Augmented Reality (2016) | 
> URL="https://www.amazon.com/dp/0134094239/"]
+
+        {
+            rank=same
+            gpgemsbest [label=<  | 
Best of Game Programming Gems (2008) | 
> URL="https://www.amazon.com/dp/1584505710/"]
+            beginninggp [label=<  | 
Beginning Game Programming (2009) | 
> URL="https://www.amazon.com/dp/159863805X/"]
+            advancedgp [label=<  | 
Advanced Game Programming (2009) | 
> URL="https://www.amazon.com/dp/1598638068/"]
+        }
+
+        {
+            rank=same
+            gpgems [label=<  | 
游戏编程精粹 1 (2004) | 
> URL="https://book.douban.com/subject/1231195/"]
+            gpgems2 [label=<  | 
游戏编程精粹2 (2003) | 
> URL="https://book.douban.com/subject/1146281/"]
+            gpgems3 [label=<  | 
游戏编程精粹3 (2003) | 
> URL="https://book.douban.com/subject/1125738/"]
+            gpgems4 [label=<  | 
游戏编程精粹4 (2005) | 
> URL="https://book.douban.com/subject/1435923/"]
+        }
+        {
+            rank=same
+            gpgems5 [label=<  | 
游戏编程精粹5 (2007) | 
> URL="https://book.douban.com/subject/2248414/"]
+            gpgems6 [label=<  | 
游戏编程精粹6 (2007) | 
> URL="https://book.douban.com/subject/2305250/"]
+            gpgems7 [label=<  | 
游戏编程精粹7 (2010) | 
> URL="https://book.douban.com/subject/4903976/"]
+            gpgems8 [label=<  | 
Game Programming Gems (2010) | 
> URL="https://www.amazon.com/dp/1584507020/"]
+        }
+
+        gpbegin -> { scratch; unity; unreal; cocos2dx }
+        scratch -> gamecodingcomplete4 [arrowhead=normal, style=solid, tailport=se]
+        gamecodingcomplete4 -> gpintermediate [arrowhead=normal, style=solid]
+        scratch -> windowsgp2
+
+        windowsgp2 -> gamecodingcomplete4[style=invis]
+
+        unity -> introtogdprodev -> unityinaction -> gpintermediate
+
+        unreal -> learninguegd -> blueprintsvisualscripting -> gpintermediate
+
+        cocos2dx -> cocos2dxbyexample2 -> gpintermediate
+
+        gpintermediate -> gpalgorithmstechniques -> gameprogrammingpatterns [arrowhead=normal, style=solid]
+        gameprogrammingpatterns -> gpgoldenrules -> gpmisc 
+        gpintermediate -> crossplatformgp -> androidndkgdcookbook
+        gpintermediate -> buildingfpsgameunity -> unityvrprojects
+        gpintermediate -> agumentedreality -> practicalaugmentedreality
+
+        {
+            rank=same; gpgoldenrules; gpmisc 
+        }
+        gpmisc -> gpgemsbest
+        gpgemsbest -> gpgems
+        gpmisc -> beginninggp -> advancedgp
+        gpgems -> gpgems2 -> gpgems3 -> gpgems4
+        gpgems4 -> gpgems5
+        gpgems5 -> gpgems6 -> gpgems7 -> gpgems8
+
+        gametop [fixedsize=true,width=8,height=0.01,style=invis,label=""]
+        gamebottom [fixedsize=true,width=8,height=0.01,style=invis,label=""]
+        gametop -> { gpbegin; unity } [style=invis]
+        gpgems7 -> gamebottom [style=invis]
+    }
+
+    subgraph cluster_engine {
+        fillcolor="#ecf9f5"
+        label=<>
+
+        {
+            node [shape="box", style="rounded,filled", color="#c5ede1"]
+            gebegin [label="游戏引擎开发新手"]
+            gearticles [label="游戏引擎文选"]
+            gescript [label="脚本引擎"]
+            geoptimization [label="优化"]
+            getool [label="工具开发"]
+        }
+
+        {
+            rank=same
+            gameenginearchitecture2 [label=<  | 
游戏引擎架构 (2014) | 
> URL="https://book.douban.com/subject/25815142/"]
+            "3dgameenginearchitecture" [label=<  | 
3D Game Engine Architecture (2004) | 
> URL="https://www.amazon.com/dp/012229064X/"]
+            gameenginedesign2 [label=<  | 
3D Game Engine Design 2nd Ed (2006) | 
> URL="https://www.amazon.com/dp/0122290631/"]
+        }
+        
+        gameenginegems1 [label=<  | 
Game Engine Gems 1 (2010) | 
> URL="https://www.amazon.com/dp/0763778885/"]
+        gameenginegems2 [label=<  | 
Game Engine Gems 2 (2011) | 
> URL="https://www.amazon.com/dp/1568814372/"]
+        gameenginegems3 [label=<  | 
Game Engine Gems 3 (2016) | 
> URL="https://www.amazon.com/dp/1498755658/"]
+        
+        gamescriptingmastery [label=<  | 
游戏脚本高级编程 (2006) | 
> URL="https://book.douban.com/subject/1927405/"]
+        languageimplpatterns [label=<  | 
编程语言实现模式 (2012) | 
> URL="https://book.douban.com/subject/10482195/"]
+        garbagecollectionhandbook [label=<  | 
垃圾回收算法手册: 自动内存管理的艺术 (2016) | 
> URL="https://book.douban.com/subject/26740958/"]
+
+        unity5gameoptimization [label=<  | 
Unity 5 Game Optimization (2015) | 
> URL="https://www.amazon.com/dp/1785884581/"]
+        videogameoptimization [label=<  | 
Video Game Optimization (2010) | 
> URL="https://www.amazon.com/dp/1598634356/"]
+        hackersdelight2 [label=<  | 
算法心得:高效算法的奥秘(原书第2版) (2014) | 
> URL="https://book.douban.com/subject/25837031/"]
+        modernx86assembly [label=<  | 
Modern X86 Assembly Language Programming (2014) | 
> URL="https://www.amazon.com/dp/1484200659/"]
+        gpgpu [label=<  | 
GPGPU Programming for Games and Science (2014) | 
> URL="https://www.amazon.com/dp/1466595353/"]
+        vectorgamemathprocessors [label=<  | 
Vector Games Math Processors (2002) | 
> URL="https://www.amazon.com/dp/1556229216/"]
+
+        gamedevtools [label=<  | 
Game Development Tools (2011) | 
> URL="https://www.amazon.com/dp/1568814321/"]
+        designinguxgamedevtools [label=<  | 
Designing the User Experience of Game Development Tools (2015) | 
> URL="https://www.amazon.com/dp/148224019X/"]
+
+        gebegin -> gameenginearchitecture2 [arrowhead=normal, style=solid]
+        gameenginearchitecture2 -> { gearticles; gescript; geoptimization; getool }
+
+        gameenginearchitecture2 -> "3dgameenginearchitecture" -> gameenginedesign2
+        gearticles -> gameenginegems1 -> gameenginegems2 -> gameenginegems3
+        gescript -> gamescriptingmastery -> languageimplpatterns -> garbagecollectionhandbook
+        geoptimization -> videogameoptimization -> unity5gameoptimization -> hackersdelight2 -> { modernx86assembly; gpgpu; vectorgamemathprocessors}
+        getool -> gamedevtools -> designinguxgamedevtools
+
+        getop [fixedsize=true,width=8,height=0.01,style=invis,label=""]
+        gebottom [fixedsize=true,width=8,height=0.01,style=invis,label=""]
+        getop -> gebegin [style=invis]
+        gpgpu -> gebottom [style=invis]
+    }
+
+    subgraph cluster_cg {
+        fillcolor="#ecf5f9"
+        label=<>
+
+        {
+            node [shape="box", style="rounded,filled", color="#c5e1ed"]
+            cgbegin [label="游戏图形学初级"]
+            cgtheory [label="图形学理论初级"]
+            cgadvanced [label="图形学进阶"]
+            realtimerendering [label="实时渲染"]
+            offlinerendering [label="离线渲染"]
+            d3d [label="Direct3D"]
+            ogl [label="OpenGL"]
+            cgtech [label="图形学技术"]
+            cgmisc [label="图形学文选"]
+        }
+
+        rt3drendering [label=<  | 
Real-Time 3D Rendering with DirectX and HLSL (2014) | 
> URL="https://www.amazon.com/dp/0321962729/"]
+        "3dgpdx12" [label=<  | 
DirectX 9.0 3D游戏开发编程基础 (2007) | 
> URL="https://book.douban.com/subject/2111771/"]
+        oglguide9 [label=<  | 
OpenGL编程指南(原书第8版) (2014) | 
> URL="https://book.douban.com/subject/26220248/"]
+
+        fundamentalscg4 [label=<  | 
计算机图形学 (2007) | 
> URL="https://book.douban.com/subject/2116178/"]
+        cgpp3 [label=<  | 
计算机图形学原理及实践: C语言描述(原书第2版) (2004) | 
> URL="https://book.douban.com/subject/1230412/"]
+        pdis [label=<  | 
Principles of Digital Image Synthesis (PODIS) (1995) | 
> URL="https://www.amazon.com/dp/1558602763/"]
+        digitalimageprocessing3 [label=<  | 
数字图像处理 (2010) | 
> URL="https://book.douban.com/subject/4285832/"]
+
+        graphicsshaders2 [label=<  | 
图形着色器 (2013) | 
> URL="https://book.douban.com/subject/23858154/"]
+        glsl3 [label=<  | 
OpenGL着色语言 (2006) | 
> URL="https://book.douban.com/subject/1911849/"]
+        oglsuper7 [label=<  | 
OpenGL Super Bible 7th Ed (2015) | 
> URL="https://www.amazon.com/dp/0672337479/"]
+        ogles3guide2 [label=<  | 
OpenGL ES 3.0编程指南 (2015) | 
> URL="https://book.douban.com/subject/26414014/"]
+        oglinsights [label=<  | 
| OpenGL Insights (2012) | 
> URL="https://www.amazon.com/dp/1439893764/"]
+        vulkanguide [label=<  | 
Vulkan Programming Guide (2016) | 
> URL="https://www.amazon.com/dp/0134464540/"]
+
+        practiald3d11 [label=<  | 
Practical Rendering and Computation with Direct3D 11 (2011) | 
> URL="https://www.amazon.com/dp/1568817207/"]
+
+        rtr3 [label=<  | 
实时计算机图形学 (2004) | 
> URL="https://book.douban.com/subject/1231141/"]
+        tricks3dgpgurus [label=<  | 
3D游戏编程大师技巧 (2005) | 
> URL="https://book.douban.com/subject/1321769/"]
+        realtimeshadows [label=<  | 
实时阴影技术 (2013) | 
> URL="https://book.douban.com/subject/25908680/"]
+        rtvolumegraphics [label=<  | 
Real-Time Volume Graphics (2006) | 
> URL="https://www.amazon.com/dp/1568812663/"]
+        graphicsprogrammingmethods [label=<  | 
Graphics Programming Methods (2003) | 
> URL="https://www.amazon.com/dp/1584502991/"]
+
+        shaderx [label=<  | 
| ShaderX (1996) | 
> URL="https://www.amazon.com/dp/1556220413/"]
+        shaderx2 [label=<  | 
| ShaderX2 (2003) | 
> URL="https://www.amazon.com/dp/1556229887/"]
+        shaderx3 [label=<  | 
| ShaderX3 (2004) | 
> URL="https://www.amazon.com/dp/1584503572/"]
+        shaderx4 [label=<  | 
| ShaderX4 (2006) | 
> URL="https://www.amazon.com/dp/1584504250/"]
+        shaderx5 [label=<  | 
| ShaderX5 (2006) | 
> URL="https://www.amazon.com/dp/1584504994/"]
+        shaderx6 [label=<  | 
| ShaderX6 (2008) | 
> URL="https://www.amazon.com/dp/1584505443/"]
+        shaderx7 [label=<  | 
| ShaderX7 (2009) | 
> URL="https://www.amazon.com/dp/1584505982/"]
+ 
+        gpugems [label=<  | 
GPU精粹 (2006) | 
> URL="https://book.douban.com/subject/1480239/"]
+        gpugems2 [label=<  | 
GPU精粹2 (2007) | 
> URL="https://book.douban.com/subject/2144796/"]
+        gpugems3 [label=<  | 
GPU精粹3 (2010) | 
> URL="https://book.douban.com/subject/4851196/"]
+        
+        gpupro [label=<  | 
| GPU Pro (2010) | 
> URL="https://www.amazon.com/dp/1568814720/"]
+        gpupro2 [label=<  | 
| GPU Pro 2 (2011) | 
> URL="https://www.amazon.com/dp/1568817185/"]
+        gpupro3 [label=<  | 
| GPU Pro 3 (2012) | 
> URL="https://www.amazon.com/dp/1439887829/"]
+        gpupro4 [label=<  | 
| GPU Pro 4 (2013) | 
> URL="https://www.amazon.com/dp/1466567430/"]
+        gpupro5 [label=<  | 
| GPU Pro 5 (2014) | 
> URL="https://www.amazon.com/dp/1482208636/"]
+        gpupro6 [label=<  | 
| GPU Pro 6 (2015) | 
> URL="https://www.amazon.com/dp/1482264617/"]
+        gpupro7 [label=<  | 
| GPU Pro 7 (2016) | 
> URL="https://www.amazon.com/dp/149874253X/"]
+        
+        gpuzen [label=<  | 
| GPU Zen (2017) | 
> URL="https://www.amazon.com/dp/0998822892/"]
+
+        pbrt3 [label=<  | 
Physically Based Rendering (PBRT) 3rd Ed (2016) | 
> URL="https://www.amazon.com/dp/0128006455/"]
+        raytracingfromgroundup [label=<  | 
光线跟踪算法技术 (2011) | 
> URL="https://book.douban.com/subject/6028258/"]
+        advancedgi2 [label=<  | 
Advanced Global Illumination 2nd Ed (2006) | 
> URL="https://www.amazon.com/dp/1568813074/"]
+        productionvolumerendering [label=<  | 
Production Volume Rendering (2012) | 
> URL="https://www.amazon.com/dp/156881724X/"]
+
+        texturingmodeling3 [label=<  | 
Texturing and Modeling (2002) | 
> URL="https://www.amazon.com/dp/1558608486/"]
+        lod [label=<  | 
Level of Detail for 3D Graphics (2002) | 
> URL="https://www.amazon.com/dp/0123991811/"]
+        "3denginedesignvirtualglobes" [label=<  | 
3D Engine Design for Virtual Globes (2011) | 
> URL="https://www.amazon.com/dp/1568817118/"]
+        polygonmeshprocessing [label=<  | 
Polygon Mesh Processing (2010) | 
> URL="https://www.amazon.com/dp/1568814267/"]
+        isosurfaces [label=<  | 
| Isosurfaces (2013) | 
> URL="https://www.amazon.com/dp/1466570970/"]
+        npr [label=<  | 
Non-Photorealistic Rendering (2001) | 
> URL="https://www.amazon.com/dp/1568811330/"]
+        npcg [label=<  | 
Non-Photorealistic Computer Graphics (2002) | 
> URL="https://www.amazon.com/dp/1558607870/"]
+
+        graphicsgems [label=<  | 
| Graphics Gems (1990) | 
> URL="https://www.amazon.com/dp/0122861655/"]
+        graphicsgems2 [label=<  | 
| Graphics Gems II (1991) | 
> URL="https://www.amazon.com/dp/0120644819/"]
+        graphicsgems3 [label=<  | 
| Graphics Gems III (1994) | 
> URL="https://www.amazon.com/dp/0124096735/"]
+        graphicsgems4 [label=<  | 
| Graphics Gems IV (1994) | 
> URL="https://www.amazon.com/dp/0123361559/"]
+        graphicsgems5 [label=<  | 
| Graphics Gems V (1995) | 
> URL="https://www.amazon.com/dp/0125434553/"]
+
+        blinn1 [label=<  | 
Jim Blinn's Corner: A Trip Down the Graphics Pipeline (1997) | 
> URL="https://www.amazon.com/dp/1558603875/"]
+        blinn2 [label=<  | 
Jim Blinn's Corner: Dirty Pixels (1998) | 
> URL="https://www.amazon.com/dp/1558604553/"]
+        blinn3 [label=<  | 
Jim Blinn's Corner: Notation, Notation, Notation (2002) | 
> URL="https://www.amazon.com/dp/B01FGPKA62/"]
+
+        glassenernotebook1 [label=<  | 
Andrew Glassner's Notebook (1999) | 
> URL="https://www.amazon.com/dp/1558605983/"]
+        glassenernotebook2 [label=<  | 
Andrew Glassner's Other Notebook (2002) | 
> URL="https://www.amazon.com/dp/1568811713/"]
+
+        magiccg [label=<  | 
The Magic of Computer Graphics (2011) | 
> URL="https://www.amazon.com/dp/1568815778/"]
+
+        cgbegin -> "3dgpdx12" 
+        cgbegin -> { rt3drendering; oglguide9 }
+
+        { "3dgpdx12"; rt3drendering; oglguide9 } -> cgtheory
+
+        cgtheory -> fundamentalscg4 [arrowhead=normal, style=solid]
+        cgtheory-> { cgpp3; pdis; digitalimageprocessing3 }
+
+        { fundamentalscg4; cgpp3; pdis; digitalimageprocessing3} -> cgadvanced
+
+        cgadvanced -> { realtimerendering; offlinerendering; cgtech;}
+
+        realtimerendering -> rtr3 [arrowhead=normal, style=solid]
+        realtimerendering -> tricks3dgpgurus
+        rtr3 -> graphicsprogrammingmethods -> shaderx -> shaderx2 -> shaderx3 -> shaderx4 -> shaderx5 -> shaderx6 -> shaderx7 -> gpugems -> gpugems2 -> gpugems3 -> gpupro -> gpupro2 -> gpupro3 -> gpupro4 -> gpupro5 -> gpupro6 -> gpupro7 -> gpuzen
+        { rank=same; rtr3; rtvolumegraphics }
+        { rank=same; gpupro; gpupro2; gpupro3; gpupro4 }
+        { rank=same; gpupro5; gpupro6; gpupro7; gpuzen }
+        rtr3 -> { realtimeshadows; rtvolumegraphics }
+        realtimeshadows -> graphicsprogrammingmethods [style=invis]
+        tricks3dgpgurus -> realtimeshadows [style=invis]
+
+        rtr3 -> { d3d; ogl }
+        d3d -> practiald3d11
+        ogl -> oglsuper7 -> { graphicsshaders2; glsl3 } -> ogles3guide2 -> oglinsights -> vulkanguide
+
+        offlinerendering -> pbrt3 [arrowhead=normal, style=solid]
+        offlinerendering -> raytracingfromgroundup
+        raytracingfromgroundup -> pbrt3 -> advancedgi2 -> productionvolumerendering
+
+        productionvolumerendering -> cgtech [style=invis]
+
+        cgtech -> { cgmisc; texturingmodeling3; lod; npr; }
+        lod -> "3denginedesignvirtualglobes"
+        texturingmodeling3 -> polygonmeshprocessing -> isosurfaces
+        npr -> npcg
+        
+        polygonmeshprocessing -> npr [style=invis]
+
+        {
+            rank=same; glassenernotebook2; magiccg
+        }
+        cgmisc -> graphicsgems -> graphicsgems2 -> graphicsgems3 -> graphicsgems4 -> graphicsgems5
+        cgmisc -> blinn1 -> blinn2 -> glassenernotebook1 -> blinn3 -> glassenernotebook2 -> magiccg
+
+        vulkanguide -> cgmisc [style=invis]
+
+        cgtop [fixedsize=true,width=8,height=0.01,style=invis,label=""]
+        cgbottom [fixedsize=true,width=8,height=0.01,style=invis,label=""]
+        cgtop -> cgbegin [style=invis]
+        gpuzen -> cgbottom [style=invis]
+    }
+
+    subgraph cluster_audio {
+        fillcolor="#eceef9"
+        label=<>
+
+        {
+            node [shape="box", style="rounded,filled", color="#c5cbed"]
+            audiobegin [label="游戏音频编程"]
+        }
+
+        gameaudioprogramming [label=<  | 
Game Audio Programming (2016) | 
> URL="https://www.amazon.com/dp/149874673X/"]
+        gettingstartedcppaudio [label=<  | 
Getting Started with C++ Audio Programming for Game Development (2013) | 
> URL="https://www.amazon.com/dp/1849699097/"]
+
+        audiobegin -> { gameaudioprogramming; gettingstartedcppaudio }
+
+        audiotop [fixedsize=true,width=8,height=0.01,style=invis,label=""]
+        audiobottom [fixedsize=true,width=8,height=0.01,style=invis,label=""]
+        audiotop -> audiobegin [style=invis]
+        { gameaudioprogramming; gettingstartedcppaudio } -> audiobottom [style=invis]
+    }
+
+    subgraph cluster_physics {
+        fillcolor="#f2ecf9"
+        label=<>
+
+        {
+            node [shape="box", style="rounded,filled",color="#d7c5ed"]
+            animbegin [label="游戏动画初阶"]
+            animadvanced [label="游戏动画进阶"]
+            phybegin [label="游戏物理初阶"]
+            phyadvanced [label="游戏物理进阶"]
+            fluid [label="流体动画/模拟"]
+        }
+
+        natureofcode [label=<  | 
代码本色:用编程模拟自然系统 (2014) | 
> URL="https://book.douban.com/subject/26264736/"]
+        characteranimation [label=<  | 
Character Animation with Direct3D (2011) | 
> URL="https://www.amazon.com/dp/1584505702/"]
+        rt3dcharacteranimation [label=<  | 
Real-time 3D Character Animation with Visual C++ (2001) | 
> URL="https://www.amazon.com/dp/0240516648/"]
+        computeranimation3 [label=<  | 
Computer Animation 3rd Ed (2012) | 
> URL="https://www.amazon.com/dp/0124158420/"]
+        gameik [label=<  | 
Game Inverse Kinematics (2013) | 
> URL="https://www.amazon.com/dp/1484922328/"]
+        physicsbasedanimation [label=<  | 
Physics Based Animation (2005) | 
> URL="https://www.amazon.com/dp/1584503807/"]
+        rtcameras [label=<  | 
Real-Time Cameras (2009) | 
> URL="https://www.amazon.com/dp/0123116341/"]
+
+        physicsforgameprogrammers [label=<  | 
Physics for Game Programmers (2003) | 
> URL="https://www.amazon.com/dp/159059472X/"]
+        physicsforgamedevelopers2 [label=<  | 
游戏开发物理学 第2版 (2015) | 
> URL="https://book.douban.com/subject/26394564/"]
+        physicsmodeling [label=<  | 
Physics Modeling for Game Programmers (2004) | 
> URL="https://www.amazon.com/dp/1592000932/"]
+
+        fpbma [label=<  | 
Foundations of Physically Based Modeling and Animation (2017) | 
> URL="https://www.amazon.com/dp/1482234602/"]
+        gamephysicsenginedev2 [label=<  | 
游戏物理引擎开发 (2013) | 
> URL="https://book.douban.com/subject/25821830/"]
+        gamephysics2 [label=<  | 
| Game Physics 2nd Ed (2010) | 
> URL="https://www.amazon.com/dp/0123749034/"]
+        collisiondetection3denv [label=<  | 
Collision Detection in Interactive 3D Environments (2003) | 
> URL="https://www.amazon.com/dp/155860801X/"]
+        rtcollisiondetection [label=<  | 
实时碰撞检测算法技术 (2010) | 
> URL="https://book.douban.com/subject/4861957/"]
+        gamephysicspearls [label=<  | 
Game Physics Pearls (2010) | 
> URL="https://www.amazon.com/dp/1568814747/"]
+
+        fluidenginedev [label=<  | 
| Fluid Engine Development (2016) | 
> URL="https://www.amazon.com/dp/1498719929/"]
+        taofluidanimation [label=<  | 
The Art of Fluid Animation (2015) | 
> URL="https://www.amazon.com/dp/1498700209/"]
+        fluidsimulationforcg2 [label=<  | 
Fluid Simulation for Computer Graphics 2nd Ed (2015) | 
> URL="https://www.amazon.com/dp/1482232839/"]
+
+        animbegin -> { characteranimation; rt3dcharacteranimation } -> computeranimation3 -> animadvanced
+        animadvanced -> { gameik; physicsbasedanimation; rtcameras}
+        gameik -> rtcameras [style=invis]
+
+        phybegin -> physicsforgameprogrammers
+        phybegin -> physicsforgamedevelopers2
+        physicsforgameprogrammers -> physicsforgamedevelopers2 -> phyadvanced
+        physicsforgameprogrammers -> physicsmodeling -> phyadvanced
+
+        { animbegin; phybegin } -> natureofcode
+
+        phyadvanced -> fpbma -> gamephysicspearls
+        gamephysicspearls -> collisiondetection3denv -> rtcollisiondetection
+        gamephysicspearls -> gamephysicsenginedev2 -> gamephysics2
+
+        { animadvanced; phyadvanced } -> fluid -> fluidenginedev -> taofluidanimation -> fluidsimulationforcg2
+
+        phytop [fixedsize=true,width=8,height=0.01,style=invis,label=""]
+        phybottom [fixedsize=true,width=8,height=0.01,style=invis,label=""]
+        phytop -> { animbegin; phybegin } [style=invis]
+        fluidsimulationforcg2 -> phybottom [style=invis]
+    }
+
+    subgraph cluster_ai {
+        fillcolor="#f9ecf9"
+        label=<>
+
+        {
+            node [shape="box", style="rounded,filled" color="#edc5ed"]
+            aibegin [label="游戏AI初阶"]
+            aiintermediate [label="中级游戏AI"]
+            aimisc [label="游戏AI文选"]
+        }
+
+        aiforgames2 [label=<  | 
Artificial Intelligence for Games 2nd Ed (2009) | 
> URL="https://www.amazon.com/dp/0123747317/"]
+        aiforgd [label=<  | 
游戏开发中的人工智能 (2006) | 
> URL="https://book.douban.com/subject/1899340/"]
+        proggameaibyexample [label=<  | 
游戏人工智能编程 案例精粹 (2012) | 
> URL="https://book.douban.com/subject/19930152/"]
+        unityaigp2 [label=<  | 
Unity人工智能游戏开发(第2版)  (2016) | 
> URL="https://book.douban.com/subject/26911454/"]
+
+        aima3 [label=<  | 
人工智能 (2004) | 
> URL="https://book.douban.com/subject/1230487/"]
+        behavioralmathforgameai [label=<  | 
Behavioral Mathematics for Game AI (2009) | 
> URL="https://www.amazon.com/dp/1584506849/"]
+
+        {
+            rank=same
+            aigpwisdom [label=<  | 
AI Game Programming Wisdom (2002) | 
> URL="https://www.amazon.com/dp/1584500778/"]
+            aigpwisdom2 [label=<  | 
AI Game Programming Wisdom 2 (2003) | 
> URL="https://www.amazon.com/dp/1584502894/"]
+            aigpwisdom3 [label=<  | 
AI Game Programming Wisdom 3 (2006) | 
> URL="https://www.amazon.com/dp/1584504579/"]
+            aigpwisdom4 [label=<  | 
AI Game Programming Wisdom 4 (2008) | 
> URL="https://www.amazon.com/dp/1584505230/"]
+        }
+        {
+            rank=same
+            gameaipro [label=<  | 
| 游戏人工智能(2017) | 
> URL="https://book.douban.com/subject/27154117/"]
+            gameaipro2 [label=<  | 
| Game AI Pro 2 (2015) | 
> URL="https://www.amazon.com/dp/1482254794/"]
+            gameaipro3 [label=<  | 
| Game AI Pro 3 (2017) | 
> URL="https://www.amazon.com/dp/1482254794/"]
+        }
+
+        aibegin -> aiforgames2 -> aiintermediate -> aima3 [arrowhead=normal, style=solid]
+        aibegin -> { aiforgd; proggameaibyexample; unityaigp2 } -> aiintermediate
+        aiintermediate -> behavioralmathforgameai -> aimisc
+        aima3 -> aimisc
+        aimisc -> aigpwisdom 
+        aigpwisdom -> aigpwisdom2 -> aigpwisdom3 -> aigpwisdom4
+        aigpwisdom4 -> gameaipro -> gameaipro2 -> gameaipro3
+
+        aitop [fixedsize=true,width=8,height=0.01,style=invis,label=""]
+        aibottom [fixedsize=true,width=8,height=0.01,style=invis,label=""]
+        aitop -> aibegin [style=invis]
+        gameaipro3 -> aibottom [style=invis]
+    }
+
+    subgraph cluster_multiplayer {
+        fillcolor="#f9ebf2"
+        label=<>
+
+        {
+            node [shape="box", style="rounded,filled" color="#edc5d7"]
+            multiplayerbegin [label="多人游戏编程初阶"]
+            multiplayermisc [label="多人游戏编程文选"]
+            serverprog [label="服务器编程"]
+            networkprotocol [label="网络协议"]
+            networkprog [label="网络编程"]
+        }
+
+        multiplayergp [label=<  | 
网络多人游戏架构与编程 (2017) | 
> URL="https://book.douban.com/subject/27135506/"]
+        massivelymultiplayergd [label=<  | 
大型多人在线游戏开发 (2006) | 
> URL="https://book.douban.com/subject/1940567/"]
+        massivelymultiplayergd2 [label=<  | 
Massively Multiplayer Game Development 2 (2005) | 
> URL="https://www.amazon.com/dp/1584503904/"]
+
+        progposixthreads [label=<  | 
POSIX多线程程序设计 (2003) | 
> URL="https://book.douban.com/subject/1236825/"]
+        advancedprogunixenv3 [label=<  | 
UNIX环境高级编程(第3版) (2014) | 
> URL="https://book.douban.com/subject/25900403/"]
+        linuxsystemprog2 [label=<  | 
Linux 系统编程(第二版) (2014) | 
> URL="https://book.douban.com/subject/25828773/"]
+
+        tcpipillustratedv1_2 [label=<  | 
TCP/IP详解  卷1:协议 (2016) | 
> URL="https://book.douban.com/subject/26825411/"]
+        tcpipillustratedv2 [label=<  | 
TCP/IP详解  卷2:实现 (2004) | 
> URL="https://book.douban.com/subject/1087767/"]
+        tcpipillustratedv3 [label=<  | 
TCP/IP详解  卷3:TCP事务协议、 HTTP、NNTP 和UNIX域协议 (2000) | 
> URL="https://book.douban.com/subject/1058634/"]
+
+        unixnetworkprogv1_3 [label=<  | 
UNIX网络编程  卷1:套接字联网API(第3版) (2014) | 
> URL="https://book.douban.com/subject/26434583/"]
+        unixnetworkprogv2_2 [label=<  | 
UNIX网络编程  卷2:进程间通信(第2版) (2015) | 
> URL="https://book.douban.com/subject/26434599/"]
+        linuxnetworkinternals [label=<  | 
深入理解 LINUX网络技术内幕 (2009) | 
> URL="https://book.douban.com/subject/4015134/"]
+
+        multiplayerbegin -> multiplayergp [arrowhead=normal, style=solid]
+        multiplayergp -> serverprog
+        multiplayergp -> networkprotocol
+        multiplayergp -> networkprog
+        multiplayergp -> multiplayermisc
+
+        serverprog -> progposixthreads -> advancedprogunixenv3 -> linuxsystemprog2 
+        networkprotocol -> tcpipillustratedv1_2 -> tcpipillustratedv2 -> tcpipillustratedv3
+        networkprog -> unixnetworkprogv1_3 -> unixnetworkprogv2_2 -> linuxnetworkinternals
+
+        multiplayermisc -> massivelymultiplayergd -> massivelymultiplayergd2
+
+        multiplayertop [fixedsize=true,width=8,height=0.01,style=invis,label=""]
+        multiplayerbottom [fixedsize=true,width=8,height=0.01,style=invis,label=""]
+        multiplayertop -> multiplayerbegin [style=invis]
+        { linuxsystemprog2; tcpipillustratedv3; linuxnetworkinternals } -> multiplayerbottom [style=invis]
+    }
+
+    ccsa [fontcolor=white,fontsize=8,label=<
+          | 
+        | This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. | 
+        
>
+        URL = "https://creativecommons.org/licenses/by-sa/4.0/"]
+
+    {
+        edge [style=invis]
+        tocbottom -> legendtop
+        legendbottom -> kidtop
+        kidbottom -> cstop
+        csbottom -> progtop
+        progbottom -> setop
+        sebottom -> mathtop
+        mathbottom -> gametop
+        gamebottom -> getop
+        gebottom -> cgtop
+        cgbottom -> audiotop
+        audiobottom -> phytop
+        phybottom -> aitop
+        aibottom -> multiplayertop
+        multiplayerbottom -> ccsa
+    }
+}
diff --git a/game-programmer-zh-cn.jpg b/game-programmer-zh-cn.jpg
index e681818..30af5a7 100644
Binary files a/game-programmer-zh-cn.jpg and b/game-programmer-zh-cn.jpg differ
diff --git a/game-programmer-zh-cn.pdf b/game-programmer-zh-cn.pdf
index c25bd2b..e5685c9 100644
Binary files a/game-programmer-zh-cn.pdf and b/game-programmer-zh-cn.pdf differ
diff --git a/game-programmer-zh-cn.png b/game-programmer-zh-cn.png
index 6881881..c1c158a 100644
Binary files a/game-programmer-zh-cn.png and b/game-programmer-zh-cn.png differ
diff --git a/game-programmer-zh-cn.svg b/game-programmer-zh-cn.svg
index 6a52fae..c6f6dc6 100644
--- a/game-programmer-zh-cn.svg
+++ b/game-programmer-zh-cn.svg
@@ -1,198 +1,236 @@
 
 
-
 
-