我正在使用顶点和Data.Map
尝试为跳棋游戏制作捕捉棋步。我正在使用函数changeKey
来更新地图中的当前键和函数cMove
以使捕捉移动。现在,cMove
需要一个顶点,顶点列表(与对手棋子一起)以及包含顶点和布尔值的地图来指示棋子属于哪个棋手。 cMove
检查第一个顶点元组是否在地图中(以知道板上的位置是否为空,因为计算发现有效移动的位置)。如果是,将会调用changeKey
。循环遍历字典并删除键
changeKey :: (Integer, Integer) -> (Integer, Integer) -> Map (Integer, Integer) Bool -> Map (Integer, Integer) Bool
changeKey k0 k1 myMap = case M.updateLookupWithKey (\_ _ -> Nothing) k0 myMap of
(Nothing, _ ) -> myMap
(Just e, myMap) -> M.insert k1 e myMap
cMove :: (Integer, Integer) -> [(Integer, Integer)] -> Map (Integer, Integer) Bool -> Map (Integer, Integer) Bool
cMove k [k1] myMap = if M.notMember (2*fst k1 - fst k, 2*snd k1 - snd k) myMap
then
changeKey k (2*fst k1 - fst k, 2*snd k1 - snd k) myMap
else myMap
这里我的问题就在于,我在黑暗中与如何我可以通过顶点列表,如果列表中包含多于一个元组(作为球员能做捕获的无限量的环每回合)。此外,我如何确保代表对手棋子的每个键都将从地图上删除。
你不应该使用函数调用看起来像这样的:'FST(K1) '。你应该改用'fst k1',就像'2 * fst k1 - fst k'一样。 –
已修改。感谢您的反馈。 –
通过名称的拼写判断,'ChangeKey'不能作为函数。 – 2016-12-31 00:08:50