瀏覽代碼

Implement non recursive uncover

DricomDragon 5 年之前
父節點
當前提交
15150156f9
共有 1 個文件被更改,包括 14 次插入1 次删除
  1. 14 1
      tp/mine-sweeper/main.hs

+ 14 - 1
tp/mine-sweeper/main.hs

@@ -99,11 +99,24 @@ applyi f i xs =
     let (xs1, xs2) = splitAt i xs in
     concat [xs1, ( (f (head xs2)) : tail xs2 )]
 
+applyij::(a -> a) -> Int -> Int -> [[a]] -> [[a]]
+applyij f i j xss = applyi (applyi f j) i xss
+
+uncover::(Int, Int) -> Grid -> Grid
+uncover (i, j) g =
+    let Grid cm = g in
+    let neighbours = tail [(i', j') | i' <- [0, -1, 1], j' <- [0, -1, 1]] in
+    let uncoverOneCell = \c -> case c of 
+            Covered 0 _ _ -> Uncovered 0 -- TODO : recursion
+            Covered n _ _ -> Uncovered n
+    in
+    Grid (applyij uncoverOneCell i j cm)
+
 
 -- Testing data
 
 dtTinyGrid = Grid [
-                    [Covered 2 True False, Uncovered 2, Covered 2 True False],
+                    [Covered 2 True False, Uncovered 2, Covered 0 True False],
                     [Selected, Uncovered 0, Covered 2 True True]
                 ]