minesweeper 0.9.2 → 0.9.2.1
raw patch · 4 files changed
+48/−10 lines, 4 filesdep ~basedep ~binary
Dependency ranges changed: base, binary
Files
- Core/SetContainer.lhs +1/−1
- GTK.hs +38/−5
- GTK/Square.hs +6/−1
- minesweeper.cabal +3/−3
Core/SetContainer.lhs view
@@ -20,8 +20,8 @@ > type SetContainerElem c > > empty :: c -> components :: c -> [Component (SetContainerElem c)] > insert :: SetContainerElem c -> c -> c +> components :: c -> [Component (SetContainerElem c)] > relatedElems :: SetContainerElem c -> c -> [(SetContainerElem c, c)] > data Component e
GTK.hs view
@@ -19,6 +19,8 @@ import Graphics.Rendering.Cairo (liftIO) -- ??? import Data.Time.Clock+import qualified Data.Function+import Data.List (sortBy) import Control.Monad (when) import Control.Concurrent @@ -217,13 +219,44 @@ backgroundColor <- styleGetBackground style StateNormal (width, height) <- drawableGetSize win let ss = (fromIntegral width / fromIntegral (xSize s), fromIntegral height / fromIntegral (ySize s))- mapM_ (drawSquare win (backgroundColor, blue, green, dangerColor, black, white, between 0.5 black blue, color 1 0.9 0.7) ss) l+ let gs = groupSquares [(coords p, ss) | (p, ss) <- l]+-- putStrLn $ show (sum $ map (\(_,_,x)->length x) gs) ++ " sqares " ++ show (length gs) ++ " groups"+ mapM_ (drawSquare win (backgroundColor, blue, green, dangerColor, black, white, between 0.5 black blue, color 1 0.9 0.7) ss) $ gs +joinBy p (a: b: xs) = case p a b of+ Just c -> joinBy p (c: xs)+ Nothing -> a: joinBy p (b: xs)+joinBy _ xs = xs -drawSquare win style (a, b) (p, xx) = do- let (x, y) = coords p- drawWindowBeginPaintRect win $ Rectangle (round $ a*fromIntegral (x-1)) (round $ b*fromIntegral (y-1)) (ceiling a) (ceiling b)- renderWithDrawable win $ renderSquare style (a, b) (x, y) xx+groupSquares :: [((Int, Int), SquareState)] -> [((Int,Int), (Int,Int), [((Int,Int), SquareState)])]+groupSquares = joinBy col . joinBy row . map init . joinBy eqq . sortBy (compare `Data.Function.on` fst) where++ init (p, ss) = (p, (1,1), [(p, ss)])++ eqq ((x1,y1),xs1) ((x2,y2),_)+ | y1 == y2 && x1 == x2+ = Just ((x1,y1),xs1)+ eqq _ _ = Nothing++ col ((x1,y1),(w1,h1),xs1) ((x2,y2),(w2,h2),xs2)+ | y1 == y2 && h1 == h2 && x2 == x1 + w1+ = Just ((x1,y1),(w1 + w2, h1),xs1 ++ xs2)+-- | y1 == y2 && h1 == h2 && x1 == x2 + w2+-- = Just ((x2,y1),(w1 + w2, h1),xs1 ++ xs2)+ col _ _ = Nothing++ row ((x1,y1),(w1,h1),xs1) ((x2,y2),(w2,h2),xs2)+ | x1 == x2 && w1 == w2 && y2 == y1 + h1+ = Just ((x1,y1),(w1, h1 + h2),xs1 ++ xs2)+-- | x1 == x2 && w1 == w2 && y1 == y2 + h1+-- = Just ((x1,y2),(w1, h1 + h2),xs1 ++ xs2)+ row _ _ = Nothing++drawSquare win style (a, b) ((x,y),(w,h), xx) = do+ drawWindowBeginPaintRect win $+ Rectangle (round $ a*fromIntegral (x-1)) (round $ b*fromIntegral (y-1))+ (ceiling $ a * fromIntegral w) (ceiling $ b * fromIntegral h)+ renderWithDrawable win $ mapM_ (uncurry $ renderSquare style (a, b)) xx drawWindowEndPaint win ------------------------
GTK/Square.hs view
@@ -12,10 +12,15 @@ ----------------------------------------- +saveAndRestore m = do+ save+ _ <- m+ restore+ renderSquare :: (Color, Color, Color, Int -> Color, Color, Color, Color, Color) -> (Double, Double) -> (Int, Int) -> SquareState -> Render () renderSquare (background, activeColor, prelightColor, dangerColor, black, white, darkblue, yellow) - (a, b) (x, y) squareState = do+ (a, b) (x, y) squareState = saveAndRestore $ do scale a b translate (fromIntegral x - 0.5) (fromIntegral y - 0.5)
minesweeper.cabal view
@@ -1,5 +1,5 @@ name: minesweeper-version: 0.9.2+version: 0.9.2.1 category: Game synopsis: Minesweeper game which is always solvable without guessing description:@@ -35,14 +35,14 @@ CPP build-depends:- base >= 3 && < 4.7,+ base >= 3 && < 4.8, containers >= 0.3 && < 0.6, time >= 1.2 && < 1.5, random >= 1.0 && < 1.1, -- mersenne-random-pure64 == 0.2.*, directory >= 1.0 && < 1.3, filepath >= 1.1 && < 1.4,- binary >= 0.5 && < 0.7,+ binary >= 0.5 && < 0.8, binary-generic >= 0.2 && < 0.3, bytestring >= 0.9 && < 0.11, gtk >= 0.11 && < 0.13,