ObsidianNotes/Think in UML.canvas

59 lines
9.3 KiB
Plaintext

{
"nodes":[
{"id":"295515b74130b4c1","type":"group","x":60,"y":-360,"width":940,"height":1440,"label":"基于需求开发(面向对象开发)"},
{"id":"f7a5a05e3b3adbee","type":"group","x":-880,"y":-360,"width":907,"height":1440,"label":"基于顺序流程开发 (面向流程开发)"},
{"id":"01381dfb0d849945","type":"group","x":177,"y":120,"width":707,"height":180,"label":"节点(对象)"},
{"id":"5598149665daee13","type":"group","x":-96,"y":-840,"width":246,"height":380,"label":"现实因果"},
{"id":"e55941a9e3bc5761","type":"text","text":"节点A","x":218,"y":-100,"width":111,"height":60},
{"id":"301c14f628e0d44e","type":"text","text":"节点E","x":390,"y":15,"width":111,"height":60},
{"id":"6cd0aa5fd7e08b73","type":"text","text":"数据","x":197,"y":140,"width":131,"height":50},
{"id":"67cc784857841adc","type":"text","text":"特性","x":320,"y":220,"width":160,"height":50},
{"id":"1e71eae3e8ab4dd7","type":"text","text":"果","x":44,"y":-540,"width":67,"height":60},
{"id":"20e8d9b9baff4d3d","type":"text","text":"因","x":-76,"y":-540,"width":67,"height":60},
{"id":"a1a7be26d20eaca1","type":"text","text":"抽象","x":-19,"y":-660,"width":96,"height":29},
{"id":"3749392e088d5fa1","type":"text","text":"现实","x":-19,"y":-820,"width":96,"height":29},
{"id":"4ae0834068c8c432","type":"text","text":"封装/特性/继承/聚合/多态","x":584,"y":220,"width":280,"height":50},
{"id":"02979079622fc748","type":"text","text":"节点D","x":731,"y":-100,"width":111,"height":60},
{"id":"6e4257fdd05e9ae8","type":"text","text":"功能计算","x":444,"y":140,"width":160,"height":50},
{"id":"43c25dad51fed755","type":"text","text":"## 流程划分\n- 进入游戏\n- 新建存档\n- 配置角色存档\n- 读取存档\n- 进入主场景\n- 打开战斗场景\n- 关闭战斗场景\n- 退出主场景\n- 写入存档\n- 游戏结束","x":1760,"y":-352,"width":192,"height":363},
{"id":"c38d1a12d50745c6","type":"text","text":"## 大地图解决方案\n\n## 必做方案\n- 从美术那里获得`大地图`(比如一个种族的地图)\n- 程序切图变成`小地图`且批量命名\n\n### 普通 2D 方案\n- 详情参考`2DPathFindExample'\n- 配置流产\n\t- 一张`小地图` 可以作为一个 `场景` 使用\n\t- 每个场景中, 配置 `物理碰撞` `AI寻路` `城池` `副本` 等等\n- 此做法类似我们早期使用Unity实现的方法思路, 但是他有更方便的 2D 功能\n#### 优劣分析\n- 优: 自定义能力极强\n- 劣: 相比较其他方案, 批量修改处理不易\n- 劣: 相比较其他方案, 需要实现大地图编辑器, 从而实现游戏内配置, 方便进行直观的配置 (运行增删查改, 动态加载等等)\n\n### Tile Map方案\n- 详情参考 `TileMapExample`\n- 配置流程\n\t- (笔刷) 先配置 每个网格资源 本身的属性 (比如 可以AI导航区域, 碰撞区域, 颜色, 材质, 高度 等等)\n\t- (底色) 用`小地图`做背景\n\t- (画图) 再在把网格刷在地图上\n- 网格中的物体: 1. 可交互 2.可挡路 3.可以动态消失和增加\n\n### 优劣分析\n- 优: 性能不错, 我测试下来性能可以接受\n- 劣: Godot在编辑时, 有可能会闪退 具体原因不明\n- 劣: 因为是基于网格的, 所以具体的网格都是以格子为基准的, 比如 \"材质\" \"高度\" \"导航区域\" \"碰撞区域\". 没有其他方式的那种自定义的方式自由 (必须是格子图)\n","x":3280,"y":-352,"width":960,"height":1090},
{"id":"56c4798c604b529d","type":"text","text":"## Route Map\n- 游戏框架分析\n- 代码架构分析\n- 游戏模块分析\n- 游戏模块 UML 图制作\n- 代码实现\n\t- 大地图解决方案\n\t- 战斗模块\n\t\t- 战斗模块配置功能(能力与效果)\n\t- 存档初始化模块\n\t- 大地图模块\n","x":1203,"y":-352,"width":517,"height":732},
{"id":"7dc171478dd606af","type":"text","text":"战斗角色是使用的回合计数\n大地图角色使用时间计数\n\n是否可以\n战斗时 时间暂停\n一个回合结束时, 增加对应游戏时间\n(这样会有一些意想不到的效果, 比如当前回合结束后, 刚好经过了一天, 一天一时间一过, 角色某个效果会触发, 比如回复满血)","x":1308,"y":420,"width":412,"height":300},
{"id":"6ecc964c9042cafe","type":"text","text":"结果","x":744,"y":140,"width":120,"height":50},
{"id":"ccc50c45875e8121","type":"text","text":"节点F","x":550,"y":-45,"width":111,"height":60},
{"id":"baeb4b1fe957ac3e","type":"text","text":"节点C","x":550,"y":-175,"width":111,"height":60},
{"id":"7aab729a19843255","type":"text","text":"节点B","x":358,"y":-175,"width":111,"height":60},
{"id":"be3e0105f3877ef9","type":"text","text":"- 对象眼界狭窄, 只关心和自己相关的几个对象, 不关心和自己无关的\n- 没有特性的可以称之为类, 被赋予特性后, 可以被称之为实例\n- 需求发生改变时, 一般是直接新增类. 不会大幅度的影响其他对象.\n- 举例\n\t- 面向对象就像是把建造一辆车这个目标, 分解成建造每一个零部件后组装\n\t- 当车辆更新换代的时候, 用于组装的类会发生变更(可以重载或是继承), 也会新增一些新的对象类型(同样可以是继承和承载)","x":233,"y":660,"width":583,"height":260},
{"id":"b78f0a5a2d476e66","type":"text","text":"``` python\nfunc main(i)\n\ta = nodeA.do(i)\n\tb = nodeB.do(a)\n\te = nodeE.do(a)\n\tf = nodeF.do(b,a,e)\n\tc = nodeC.do(b)\n\to = nodeD.do(c,f)\n\treturn o\n```","x":233,"y":360,"width":583,"height":280},
{"id":"a86a7ac36ae3f4f0","type":"text","text":"``` python\nfunc main(i)\n\ta = get(i)\n\tb = ClacA(a)\n\te = ClacE(a)\n\tf = CalcF(b,a,e)\n\tc = CalcC(b)\n\to = CalcO(c,f)\n\treturn o\n\n# 需求变更时, 新写方法, 插入/删除流程\n```","x":-728,"y":-245,"width":583,"height":285},
{"id":"a5b1c2cce5f1efbb","type":"text","text":"功能计算","x":-519,"y":-333,"width":160,"height":50},
{"id":"2f08f916dda4c384","type":"file","file":"Aseets/Procedure.jpeg","x":-731,"y":470,"width":586,"height":550},
{"id":"a58cc0223dab5c53","type":"text","text":"- 依赖关系\n- 固定流程\n- 需求变更时, 不容易修改\n- 随着需求发生变化, 节点的复杂度和因果关系也会大幅度变化\n- 举例\n\t- 面向流程就像一次性把建造一辆车设定成目标, 然后分析整个流产的线路, 使得这个产线能一次性就把车生产出来\n\t- 而车辆会随时更新换代, 所以车的管线也会经常大改, 每次大改都会伤筋动骨","x":-731,"y":95,"width":583,"height":285},
{"id":"4d32b080f139a489","type":"text","text":"因","x":-728,"y":-338,"width":67,"height":60},
{"id":"3dd7047c8798b5be","type":"text","text":"因","x":98,"y":-320,"width":67,"height":60},
{"id":"c33ab99b87004926","type":"text","text":"果","x":898,"y":-320,"width":67,"height":60},
{"id":"150aa8c33533e9d6","type":"text","text":"果","x":-215,"y":-335,"width":67,"height":60},
{"id":"e151bed3b296b893","type":"file","file":"WorldTreeModule.md","x":2160,"y":-352,"width":1120,"height":2132}
],
"edges":[
{"id":"c0b4be46a6f0aeb1","fromNode":"3749392e088d5fa1","fromSide":"bottom","toNode":"a1a7be26d20eaca1","toSide":"top"},
{"id":"a0fb7166022afbf4","fromNode":"20e8d9b9baff4d3d","fromSide":"right","toNode":"1e71eae3e8ab4dd7","toSide":"left"},
{"id":"8bcca951694d2031","fromNode":"a1a7be26d20eaca1","fromSide":"bottom","toNode":"20e8d9b9baff4d3d","toSide":"top"},
{"id":"518a0eb4016f2b99","fromNode":"a1a7be26d20eaca1","fromSide":"bottom","toNode":"1e71eae3e8ab4dd7","toSide":"top"},
{"id":"7f7568e86335e241","fromNode":"6cd0aa5fd7e08b73","fromSide":"right","toNode":"6e4257fdd05e9ae8","toSide":"left","label":"输入"},
{"id":"93d6bb1d290a4ca1","fromNode":"6e4257fdd05e9ae8","fromSide":"right","toNode":"6ecc964c9042cafe","toSide":"left","label":"输出"},
{"id":"926309bc253b349a","fromNode":"3dd7047c8798b5be","fromSide":"right","toNode":"c33ab99b87004926","toSide":"left"},
{"id":"f26bfc9ceae7483f","fromNode":"3dd7047c8798b5be","fromSide":"bottom","toNode":"e55941a9e3bc5761","toSide":"left","label":"1...n"},
{"id":"2646a987f686e659","fromNode":"02979079622fc748","fromSide":"right","toNode":"c33ab99b87004926","toSide":"bottom","label":"1...1"},
{"id":"9374435f243a0eeb","fromNode":"baeb4b1fe957ac3e","fromSide":"right","toNode":"02979079622fc748","toSide":"left"},
{"id":"34478a4ca072f870","fromNode":"7aab729a19843255","fromSide":"right","toNode":"baeb4b1fe957ac3e","toSide":"left"},
{"id":"43e31e2bcb261203","fromNode":"e55941a9e3bc5761","fromSide":"right","toNode":"7aab729a19843255","toSide":"left"},
{"id":"5cc96990e8207977","fromNode":"ccc50c45875e8121","fromSide":"right","toNode":"02979079622fc748","toSide":"left"},
{"id":"667a975a009bc4d5","fromNode":"301c14f628e0d44e","fromSide":"right","toNode":"ccc50c45875e8121","toSide":"left"},
{"id":"f058d8c47b545381","fromNode":"e55941a9e3bc5761","fromSide":"right","toNode":"301c14f628e0d44e","toSide":"left"},
{"id":"820ff7f42357890f","fromNode":"7aab729a19843255","fromSide":"bottom","toNode":"ccc50c45875e8121","toSide":"top"},
{"id":"72d1a65096efda72","fromNode":"e55941a9e3bc5761","fromSide":"right","toNode":"ccc50c45875e8121","toSide":"left"},
{"id":"09bf87c6eacc8557","fromNode":"a5b1c2cce5f1efbb","fromSide":"right","toNode":"150aa8c33533e9d6","toSide":"left"},
{"id":"bfd72f2560152d23","fromNode":"4d32b080f139a489","fromSide":"right","toNode":"a5b1c2cce5f1efbb","toSide":"left"}
]
}