GraphGists


灵感

我偶然发现了这篇 Reddit 帖子,用户/u/Bobdor发布了一张关于 X & Y 游戏中可捕捉精灵的非常棒的图表。 点击此处查看高分辨率图像。 我建议你将图表打开在一个新的标签页或第二个显示器上,这样你就可以跟着做!


模型

该图包含以下类型的节点

  • 精灵

  • 城市

  • 洞穴

  • 森林

  • 路线

  • 兴趣点

  • 景点

以及以下关系

  • CONNECTS_TO

  • CAUGHT_IN

  • HAS

该模型最好通过 Bobdor 创建的图表来解释

x3V0mjw

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

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

景点包括冲浪、钓鱼、使用碎石破解找到物品,或该地点是否有精灵中心或道馆。

CAUGHT_IN 关系有一个属性 catch_type,它表示捕获需要什么,例如,是否需要冲浪才能捕捉精灵,是否需要钓竿才能捕捉精灵,等等。 这些总结如下,以及来自 Bobdor 地图关键的描述

catch_type描述
标准标准捕获(灌木丛、步行等)
特殊特殊捕获(摇晃灌木丛等)
浅水在浅水中可捕获
碎石破解使用碎石破解可捕获
成群结队在成群结队中可捕获
冲浪使用冲浪可捕获
旧钓竿使用旧钓竿钓鱼可捕获
好钓竿使用好钓竿钓鱼可捕获
超级钓竿使用超级钓竿钓鱼可捕获
互动捕获需要互动
礼物作为礼物收到的精灵

设置


旅行计划

假设你刚开始游戏,现在在香草镇。 你要开始你的旅程,想知道从香草镇到最近有精灵中心的城镇或城市之间,你需要穿过哪些有野生精灵的路线。

从香草镇到最近有精灵中心的城镇或城市之间有野生精灵的路线

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

通过可视化,我们可以看到,我们会经过水脉镇和香草森林,然后才能到达最近有精灵中心的城镇或城市——香草市。 我们也知道,1 号路显然没有野生精灵,因为它没有在我们之前的查询中返回。


现在,假设你已经找到了你的路线,到达了光之镇——一个中心城市,并且无法决定应该走哪条路离开。 我们可以找到从光之镇出发的路线、每条路线可以捕捉到的精灵以及路线的目的地,所有这些都在一个查询中

从光之镇出发的路线、每条路线可以捕捉到的精灵以及路线的目的地

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

寻找精灵和更多旅行计划

假设我们对上面查询中看到的精灵清单不太满意。 事实上,我们心中有一个特定的精灵:梦梦。 我们可以找到所有可以捕捉到梦梦的地点以及你需要捕捉它可能需要的东西

找到捕捉梦梦的地方

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

看来我们唯一可以捕捉到梦梦的地方是幻影洞穴。 幸运的是,这是一个标准的捕获,所以我们不需要带任何特殊的东西。 现在,幻影洞穴在哪里?! 我们如何从光之镇到达那里?

获取从光之镇到幻影洞穴的最短路径路线

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 号路和密阿雷市停留,用超级钓竿钓鱼,我们知道每个停留点可以捕捉到哪些精灵。

视觉路线

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

所有神奇宝贝名称、景点名称以及城市/路线/洞穴/森林/兴趣点名称都可以在设置下的数据初始化查询展开后找到。


关于我