我正在构建一个扫雷游戏,其中游戏板是一个二维数组。
要生成游戏板,我需要获取一个二维数组,随机放置一些炸弹,计算每个格子的所有相邻炸弹,然后将它们与另一个值(是否暴露)一起打包到地图中,这应该是每个格子的最终值。
似乎为了完成所有这些操作,我需要使用像map、filter、nth或zip等函数,但它们不应该在列表上工作,而应该在二维数组上进行操作。我已经开始构建这些函数,但似乎这条路走错了。
有没有一些很酷的抽象方法可以帮助我在二维数组上使用现有的函数?还是已经存在处理二维数组的函数?
编辑:在认为应该有更好的方法之前,我正在使用以下方式进行操作:
要生成游戏板,我需要获取一个二维数组,随机放置一些炸弹,计算每个格子的所有相邻炸弹,然后将它们与另一个值(是否暴露)一起打包到地图中,这应该是每个格子的最终值。
似乎为了完成所有这些操作,我需要使用像map、filter、nth或zip等函数,但它们不应该在列表上工作,而应该在二维数组上进行操作。我已经开始构建这些函数,但似乎这条路走错了。
有没有一些很酷的抽象方法可以帮助我在二维数组上使用现有的函数?还是已经存在处理二维数组的函数?
编辑:在认为应该有更好的方法之前,我正在使用以下方式进行操作:
(defn mapmap [f xxs]
(for [xs xxs]
(map f xs)))
(defn mapmap-coords [f xxs]
(for [[i xs] (map-indexed list xxs)]
(map-indexed (fn [j x] (f j i)) xs)))
(defn get-value [board x y]
(if (or (< x 0) (< y 0) (< (dec (count board)) y))
false
(let [xs (nth board y)]
(if (< (dec (count xs)) x)
false
(nth xs x)))))