我正在使用頂點和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