module Board where import GridProto type State = (Int, Int, Bool) -- (x, y, quit?) main :: IO () main = runGridProto example (0, 0, False) example :: GridProto State example = defaultGridProto { title = "Board Example" , rows = 8 , cols = 8 , tilePixelSize = 64 , updateFn = update , viewFn = view 8 , quitFn = quit } update :: Input -> State -> IO (State, [String]) update Input{mouse=Mouse{mousePosition=(mx,my),mouseButton=mouseButton},keys=keys} _ | mouseButton == Pressed = return ((mx,my, mx == 0 && my == 0), []) | otherwise = return ((mx, my, lookupKey keys Escape == Released), []) view :: Int -> State -> View view sides (mx,my,click) = fromList $ do y <- [0..(sides - 1)] x <- [0..(sides - 1)] let color = Just $ if (mx,my) == (x,y) -- Mouse color then if click then Green1 else Red1 -- Alternate background colors else if (x + y) `mod` 2 == 0 then Brown1 else Brown2 let (symbol, shape) = if (x + y) `mod` 2 == 1 then (Nothing, Nothing) else if y >= 0 && y <= 2 then (Just ('W', White1), Just (Circle, White1)) else if y >= 5 && y <= 7 then (Just ('B', Black1), Just (Circle, Black1)) else (Nothing, Nothing) return ((x,y), Tile symbol shape color) quit :: State -> Bool quit (_,_,q) = q