GraphGists


灵感

我在 Reddit 上看到了这篇文章,用户 /u/Bobdor 发布了一张非常棒的图表,展示了 X & Y 游戏中可捕获的宝可梦。请点击这里查看高分辨率图像。我建议您在第二个标签页或第二个显示器上保持此图表打开,以便您能跟着一起看!


模型

该图包含以下类型的节点:

  • 宝可梦

  • 城市

  • 洞穴

  • 森林

  • 路线

  • 兴趣点

  • 景点

以及以下关系:

  • 连接到 (CONNECTS_TO)

  • 捕获于 (CAUGHT_IN)

  • 拥有 (HAS)

模型最好通过 Bobdor 创建的图表来阐述

x3V0mjw

但节点之间的关系总结如下:

请注意,洞穴、森林和兴趣点未在我的图表中显示,但类似于路线。

景点包括冲浪、钓鱼、使用碎岩寻找物品,或者该地点是否有宝可梦中心或道馆等。

“捕获于 (CAUGHT_IN)” 关系有一个属性 `catch_type`,指示捕获所需的条件,例如,如果需要冲浪才能捕获宝可梦,如果捕获宝可梦需要鱼竿等。这些总结如下,并附有 Bobdor 地图图例中的描述:

捕获类型 (catch_type)描述
标准标准捕获(草丛、行走等)
特殊特殊捕获(晃动草丛等)
浅水可在浅水中捕获
碎岩使用碎岩捕获
群战可在群战中捕获
冲浪使用冲浪捕获
旧鱼竿使用旧鱼竿钓鱼捕获
好鱼竿使用好鱼竿钓鱼捕获
高级鱼竿使用高级鱼竿钓鱼捕获
互动捕获需要互动
赠送作为礼物获得的宝可梦

设置


旅行规划

假设您刚开始游戏,并且身处初始之镇 (Vaniville Town)。您即将踏上旅程,想知道在初始之镇和最近的拥有宝可梦中心的城市或城镇之间,需要穿越哪些有野生宝可梦的路线。

初始之镇与最近拥有宝可梦中心的城市或城镇之间的有野生宝可梦的路线

MATCH x = shortestPath((o:City)-[*]-(a:Attraction))
WHERE o.name = "Vaniville Town" AND a.name = "Pokemon Center"
WITH NODES(x) AS stops
MATCH (p:Pokemon)-[:CAUGHT_IN]->(r:Route)
WHERE r IN stops
RETURN r.name AS `Route`, COLLECT(p.name) AS `Wild Pokemon`
ORDER BY r.name

从初始之镇前往最近的拥有宝可梦中心的城市或城镇的途中,您将在 2 号和 3 号路遇到野生宝可梦。我们还应该查询图以获取视觉方向:

视觉方向

MATCH x = shortestPath((o:City)-[*]-(a:Attraction))
WHERE o.name = "Vaniville Town" AND a.name = "Pokemon Center"
RETURN x

通过可视化,我们可以看到在到达白檀市 (Santalune City) 之前,我们将经过水边城 (Aquacorde Town) 和白檀森林 (Santalune Forest),白檀市是最近的拥有宝可梦中心的城市或城镇。我们还知道,1 号路显然没有野生宝可梦,因为在我们之前的查询中没有返回它。


现在,假设您已经找到了前往中心枢纽城市密阿雷市 (Lumiose City) 的路,并且无法决定应该选择哪条路线离开。我们可以一次查询找出离开密阿雷市的路线、每条路线上可以捕获的宝可梦以及这些路线的目的地:

离开密阿雷市的路线、每条路线上可捕获的宝可梦以及路线的目的地

MATCH (o:City)<-[:CONNECTS_TO]-(r:Route)-[:CONNECTS_TO]->(d:City)
WHERE o.name = "Lumiose City"
WITH r, d
MATCH (p:Pokemon)-[:CAUGHT_IN]->(r)
RETURN r.name AS Route, COLLECT(p.name) AS `Catchable Pokemon`, d.name AS Destination

现在我们对我们的选择有了更好的了解。

同样,我们也应该查询视觉方向:

视觉方向

MATCH x = (o:City)<-[:CONNECTS_TO]-(r:Route)-[:CONNECTS_TO]->(d:City), y = (p:Pokemon)-[:CAUGHT_IN]->(r:Route)
WHERE o.name = "Lumiose City"
RETURN x, y

寻找宝可梦与更多旅行规划

假设我们对上面查询中看到的宝可梦列表不太满意。事实上,我们心中有一个特定的宝可梦:魔墙人偶 (Mr. Mime)。我们可以找到可以捕获魔墙人偶的所有位置以及捕获它可能需要的东西:

查找在哪里可以捕获魔墙人偶

MATCH (p:Pokemon)-[c:CAUGHT_IN]->(d)
WHERE p.name = "Mr. Mime"
RETURN d.name AS Destination, c.catch_type AS `Catch Type`

看来唯一可以捕获魔墙人偶的地方是镜穴 (Reflection Cave)。幸运的是,这是标准捕获,所以我们不需要带任何特别的东西。现在,镜穴在哪里?!我们怎么从密阿雷市到达那里?

获取从密阿雷市到镜穴的最短路径方向

MATCH x = shortestPath((o:City)-[:CONNECTS_TO*]-(d:Cave))
WHERE o.name = "Lumiose City" AND d.name = "Reflection Cave"
RETURN EXTRACT(n IN NODES(x) | n.name) AS Directions

视觉方向

MATCH x = shortestPath((o:City)-[:CONNECTS_TO*]-(d:Cave))
WHERE o.name = "Lumiose City" AND d.name = "Reflection Cave"
RETURN x

现在我们已经规划好了行程,接下来我们来弄清楚沿途可以做些什么。例如,如果我们真的很喜欢钓鱼,我们可以找到沿途应该在哪里停留去钓鱼。具体来说,假设我们对密阿雷市和镜穴之间可以使用高级鱼竿捕获宝可梦的站点以及这些宝可梦是什么感兴趣:

密阿雷市和镜穴之间可以使用高级鱼竿钓鱼的站点

MATCH x = shortestPath((o:City)-[:CONNECTS_TO*]-(d:Cave))
WHERE o.name = "Lumiose City" AND d.name = "Reflection Cave"
WITH NODES(x) AS stops
MATCH (p:Pokemon)-[c:CAUGHT_IN]->(s)
WHERE c.catch_type = "Super Rod" AND (s IN stops)
WITH s, COLLECT(p.name) AS pokemon
RETURN s.name AS Stop, pokemon AS `Pokemon Catchable with a Super Rod`
ORDER BY Stop

因此,我们可以计划在 12 号路和海翼市 (Shalour City) 停留,使用我们的大师球钓鱼,并且我们知道在每个站点可以捕获哪些宝可梦。

视觉方向

MATCH x = shortestPath((o:City)-[:CONNECTS_TO*]-(d:Cave))
WHERE o.name = "Lumiose City" AND d.name = "Reflection Cave"
WITH x
MATCH y = (p:Pokemon)-[c:CAUGHT_IN]->(s)
WHERE (s IN NODES(x)) AND c.catch_type = "Super Rod"
RETURN x, y

控制台

使用下面的控制台来回答您自己的问题。这里有一些模板可以帮助您开始:

查找可以在哪里捕获特定的宝可梦以及它是哪种捕获类型

将 POKEMON_NAME 替换为宝可梦的名称

MATCH (p:Pokemon)-[c:CAUGHT_IN]->(d)
WHERE p.name = "POKEMON_NAME"
RETURN d.name AS Destination, c.catch_type AS `Catch Type`

查找所有具有特定景点的位置

将 ATTRACTION_NAME 替换为景点的名称。

MATCH (d)-[:HAS]->(a:Attraction)
WHERE a.name = "ATTRACTION_NAME"
RETURN d.name AS Destination

获取从一个地方到另一个地方的最短路径方向

将 ORIGIN_NAME 替换为起始城市/路线/洞穴/森林/兴趣点的名称,将 DESTINATION_NAME 替换为目的地城市/路线/洞穴/森林/兴趣点的名称。

MATCH x = shortestPath((o)-[:CONNECTS_TO*]-(d))
WHERE o.name = "ORIGIN_NAME" AND d.name = "DESTINATION_NAME"
RETURN EXTRACT(n IN NODES(x) | n.name) AS Directions

所有宝可梦名称、景点名称和城市/路线/洞穴/森林/兴趣点名称都可以通过展开设置下的数据初始化查询找到。


关于我

© . All rights reserved.