From b77716c6bc4ef87227516ae2ac056beec3d4fda4 Mon Sep 17 00:00:00 2001 From: Eric Mertens Date: Sat, 3 Dec 2022 13:33:02 -0800 Subject: [PATCH] hide boring blocks --- app/Main.hs | 381 ++++++++++++++++++++++++++++++++++++++++++----- app/Model.hs | 3 +- app/Rendering.hs | 4 +- 3 files changed, 344 insertions(+), 44 deletions(-) diff --git a/app/Main.hs b/app/Main.hs index 3aecb9d..a6e801c 100644 --- a/app/Main.hs +++ b/app/Main.hs @@ -63,6 +63,10 @@ worldList = Map.fromList , ("clone11", clone11) , ("transfer14", transfer14) , ("open4", open4) + , ("cycle10", cycle10) + , ("player10", player10) + , ("player11", player11) + , ("player18", player18) ] smallWorld :: World @@ -82,32 +86,32 @@ smallWorld = "▓ ▓", "▓▓▓▓▓▓▓▓▓" ])) - (withForeColor defAttr black)), + (withForeColor defAttr black) False), ('1', Box (Location 'a' (-3) (-3)) (Original (makeWalls (replicate 9 (replicate 9 ' ')))) - (withForeColor defAttr yellow)), + (withForeColor defAttr yellow) False), ('2', Box (Location 'a' (-3) (-2)) (Original (makeWalls (replicate 9 (replicate 9 ' ')))) - (withForeColor defAttr magenta)), + (withForeColor defAttr magenta) False), ('3', Box (Location 'a' (-2) (-3)) (Original (makeWalls (replicate 9 (replicate 9 ' ')))) - (withForeColor defAttr blue)), + (withForeColor defAttr blue) False), ('4', Box (Location 'a' (-2) (-2)) (Original (makeWalls (replicate 9 (replicate 9 ' ')))) - (withForeColor defAttr green)), + (withForeColor defAttr green) False), ('b', Box (Location '1' 0 0) (Original (solid 9)) - (withForeColor defAttr red)) + (withForeColor defAttr red) True) ]) 'b' Set.empty (Location 'b' 0 0) @@ -129,7 +133,8 @@ center8 = "▓ ▓▓ ▓▓", "▓▓▓▓▓▓▓▓▓" ])) - (withForeColor defAttr black)), + (withForeColor defAttr black) + False), ('1', Box (Location 'a' 0 0) @@ -144,17 +149,20 @@ center8 = " ", " " ])) - (withForeColor defAttr green)), + (withForeColor defAttr green) + False), ('2', Box (Location '1' (-4) 0) (Original (solid 9)) - (withForeColor defAttr yellow)), + (withForeColor defAttr yellow) + True), ('b', Box (Location 'a' (-1) 0) (Original (solid 9)) - (withForeColor defAttr red)) + (withForeColor defAttr red) + True) ]) 'b' Set.empty (Location 'a' 3 2) @@ -176,7 +184,8 @@ center13 = "▓ ▓▓ ▓", "▓▓▓▓▓▓▓▓▓" ])) - (withForeColor defAttr cyan)), + (withForeColor defAttr cyan) + False), ('1', Box (Location 'a' (-1) 1) @@ -191,17 +200,20 @@ center13 = " ▓▓▓▓▓▓▓ ", " " ])) - (withForeColor defAttr green)), + (withForeColor defAttr green) + False), ('2', Box (Location 'a' (-1) (-1)) (Original (solid 9)) - (withForeColor defAttr yellow)), + (withForeColor defAttr yellow) + True), ('b', Box (Location 'a' (-3) 0) (Original (solid 9)) - (withForeColor defAttr red)) + (withForeColor defAttr red) + True) ]) 'b' Set.empty (Location 'a' 2 0) @@ -224,17 +236,20 @@ clone11 = "▓▓▓ ▓▓▓", "▓▓▓▓▓▓▓▓▓" ])) - (withForeColor defAttr green)), + (withForeColor defAttr green) + False), ('A', Box (Location 'a' 0 2) (Link 'a') - (withForeColor defAttr green)), + (withForeColor defAttr green) + True), ('b', Box (Location 'a' 0 (-2)) (Original (solid 9)) - (withForeColor defAttr red)) + (withForeColor defAttr red) + True) ]) 'b' (Set.fromList [Location 'a' (-1) (-3), Location 'a' (-2) (-3)]) @@ -257,7 +272,8 @@ transfer14 = " ", " " ])) - (withForeColor defAttr cyan)), + (withForeColor defAttr cyan) + False), ('g', Box (Location 'a' (-1) (-1)) @@ -272,7 +288,8 @@ transfer14 = " ", " ▓ " ])) - (withForeColor defAttr green)), + (withForeColor defAttr green) + False), ('x', Box (Location 'g' 3 (-3)) @@ -287,12 +304,14 @@ transfer14 = " ", " " ])) - (withForeColor defAttr magenta)), + (withForeColor defAttr magenta) + False), ('b', Box (Location 'a' 1 (-1)) (Original (solid 9)) - (withForeColor defAttr red)) + (withForeColor defAttr red) + True) ]) 'b' (Set.fromList [Location 'g' (-2) 0]) @@ -315,7 +334,8 @@ open4 = "▓▓ ▓", "▓▓ ▓" ])) - (withForeColor defAttr cyan)), + (withForeColor defAttr cyan) + False), ('g', Box (Location 'a' 2 (-1)) @@ -330,7 +350,8 @@ open4 = "▓▓▓▓ ▓▓▓▓", "▓▓▓▓ ▓▓▓▓" ])) - (withForeColor defAttr green)), + (withForeColor defAttr green) + False), ('y', Box (Location 'a' 2 1) @@ -345,12 +366,14 @@ open4 = "▓▓▓▓▓▓▓▓▓", "▓▓▓▓▓▓▓▓▓" ])) - (withForeColor defAttr yellow)), + (withForeColor defAttr yellow) + False), ('b', Box (Location 'a' 0 1) (Original (solid 9)) - (withForeColor defAttr red)) + (withForeColor defAttr red) + True) ]) 'b' Set.empty @@ -376,7 +399,8 @@ world0 = World { "▓ ▓", "▓ ▓", "▓ ▓▓▓▓▓ ▓" - ] + ], + boxBoring = False }), ('2', Box { boxColor = withForeColor defAttr cyan, @@ -391,12 +415,14 @@ world0 = World { "▓ ▓", " ", "▓ ▓▓ ▓▓ ▓" - ] + ], + boxBoring = False }), ('₂', Box { boxColor = withForeColor defAttr cyan, boxLocation = Location '1' 2 (-1), - boxType = Link '2' + boxType = Link '2', + boxBoring = True }), ('3', Box { boxColor = withForeColor defAttr blue, @@ -411,7 +437,8 @@ world0 = World { "▓▓ ▓▓▓▓", "▓▓ ▓▓▓▓", "▓▓▓▓ ▓▓▓▓" - ] + ], + boxBoring = False }), ('4', Box { boxColor = withForeColor defAttr black, @@ -426,7 +453,8 @@ world0 = World { "▓ ▓", "▓ ▓", "▓▓▓▓ ▓▓▓▓" - ] + ], + boxBoring = False }), ('b', Box { boxColor = withForeColor defAttr red, @@ -441,7 +469,8 @@ world0 = World { "▓ ▓", "▓ ▓", "▓▓▓▓▓▓▓▓▓" - ] + ], + boxBoring = True }), ('x', Box { boxColor = withForeColor defAttr yellow, @@ -456,8 +485,8 @@ world0 = World { " ▓▓▓ ", " ▓ ▓▓▓ ", " ", - "▓ ▓ ▓" - ] + "▓ ▓ ▓"], + boxBoring = False }), ('y', Box { boxColor = withForeColor defAttr magenta, @@ -471,33 +500,303 @@ world0 = World { "▓▓▓▓ ", "▓▓ ▓▓▓ ", " ", - "▓ ▓ ▓" - ] + "▓ ▓ ▓"], + boxBoring = False }), ('i', Box { boxColor = withForeColor defAttr black, boxLocation = Location 'b' 0 (-2), - boxType = Original $ solid 9 + boxType = Original $ solid 9, + boxBoring = True }), ('j', Box { boxColor = withForeColor defAttr black, boxLocation = Location 'b' 0 (-1), - boxType = Original $ solid 9 + boxType = Original $ solid 9, + boxBoring = True }), ('k', Box { boxColor = withForeColor defAttr black, boxLocation = Location 'b' 0 0, - boxType = Original $ solid 9 + boxType = Original $ solid 9, + boxBoring = True }), ('l', Box { boxColor = withForeColor defAttr black, boxLocation = Location 'b' 0 1, - boxType = Original $ solid 9 + boxType = Original $ solid 9, + boxBoring = True }), ('₁', Box { boxColor = withForeColor defAttr green, boxLocation = Location '1' 2 1, - boxType = Link '1' + boxType = Link '1', + boxBoring = True }) ] - } \ No newline at end of file + } + +cycle10 :: World +cycle10 = + World + (Map.fromList + [('g', + Box (Location 'g' 3 3) + (Original (makeWalls [ + "▓▓▓▓ ▓▓▓▓", + "▓▓▓▓ ▓▓▓▓", + "▓▓▓▓ ▓▓▓▓", + "▓ ▓▓▓", + "▓ ▓▓▓", + "▓ ▓▓▓", + "▓ ▓▓▓", + "▓ ▓ ▓", + "▓ ▓ ▓" + ])) + (withForeColor defAttr green) + False), + ('G', + Box + (Location 'g' 0 (-2)) + (Link 'g') + (withForeColor defAttr green) + True), + ('p', + Box + (Location 'g' 0 0) + (Original (makeWalls [ + "▓▓▓▓▓▓▓▓▓", + "▓▓▓▓▓▓▓▓▓", + "▓▓ ▓▓▓ ▓▓", + "▓▓▓▓▓▓▓▓▓", + "▓▓▓▓▓▓▓▓▓", + "▓▓▓▓▓▓▓▓▓", + "▓▓▓▓▓▓▓▓▓", + "▓▓▓▓▓▓▓▓▓", + "▓▓▓▓▓▓▓▓▓" + ])) + (withForeColor defAttr magenta) + True), + ('y', + Box + (Location 'g' (-4) 0) + (Original (makeWalls [ + "▓▓▓▓▓▓▓▓▓", + "▓▓▓▓▓▓▓▓▓", + "▓▓▓▓▓▓▓▓▓", + "▓▓▓▓▓▓▓▓▓", + "▓▓▓▓▓▓▓ ", + "▓▓▓▓▓▓▓▓▓", + "▓▓▓▓▓▓▓▓▓", + "▓▓▓▓▓▓▓▓▓", + "▓▓▓▓▓▓▓▓▓" + ])) + (withForeColor defAttr yellow) + False), + ('1', + Box + (Location 'g' (-2) 0) + (Original (solid 9)) + (withForeColor defAttr red) + True), + ('2', + Box + (Location 'g' 2 0) + (Original (solid 9)) + (withForeColor defAttr red) + True), + ('3', + Box + (Location 'g' 2 (-2)) + (Original (solid 9)) + (withForeColor defAttr red) + True) + ]) + 'p' + Set.empty + (Location 'y' 0 3) + + +player10 :: World +player10 = + World + (Map.fromList + [('a', + Box (Location 'a' 3 3) + (Original (makeWalls [ + "▓▓▓▓▓▓▓▓▓", + "▓▓ ▓▓", + "▓▓ ▓▓", + "▓▓ ▓▓", + "▓▓ ▓▓", + "▓▓ ▓▓▓▓▓▓", + "▓▓ ▓▓▓", + "▓▓ ▓ ▓", + "▓▓▓▓▓▓▓▓▓" + ])) + (withForeColor defAttr cyan) + False), + ('p', + Box + (Location 'a' (-2) 0) + (Link 'c') + (withForeColor defAttr magenta) + True), + ('C', + Box + (Location 'a' 0 2) + (Link 'c') + (withForeColor defAttr magenta) + True), + ('c', + Box + (Location 'a' (-1) 0) + (Original (makeWalls [ + "▓▓▓▓▓▓▓▓▓", + "▓▓▓▓▓▓▓▓▓", + "▓▓▓▓▓▓▓▓▓", + "▓▓▓▓▓ ", + "▓▓▓▓▓ ", + "▓▓▓▓▓ ", + "▓▓▓▓▓▓▓▓▓", + "▓▓▓▓▓▓▓▓▓", + "▓▓▓▓▓▓▓▓▓" + ])) + (withForeColor defAttr magenta) + False), + ('1', + Box + (Location 'a' (-3) 2) + (Original (solid 9)) + (withForeColor defAttr blue) + True) + ]) + 'p' + (Set.singleton (Location 'a' 2 1)) + (Location 'a' 3 1) + +player11 :: World +player11 = + World + (Map.fromList + [('_', + Box (Location '_' 3 3) + (Original (makeWalls [ + "▓▓▓▓▓▓▓▓▓", + "▓▓▓▓▓▓▓▓▓", + "▓▓▓▓▓▓▓▓▓", + "▓▓▓▓▓▓▓▓▓", + "▓▓▓▓ ▓▓▓▓", + "▓▓▓▓▓▓▓▓▓", + "▓▓▓▓▓▓▓▓▓", + "▓▓▓▓▓▓▓ ▓", + "▓▓▓▓▓▓▓▓▓" + ])) + (withForeColor defAttr cyan) + True), + ('a', + Box + (Location '_' 0 0) + (Original (makeWalls [ + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " + ])) + (withForeColor defAttr magenta) + True), + ('A', + Box + (Location 'a' 0 0) + (Link 'a') + (withForeColor defAttr brightMagenta) + True), + ('b', + Box + (Location 'a' (-1) (-4)) + (Original (makeWalls [ + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " + ])) + (withForeColor defAttr yellow) + False), + ('1', + Box + (Location 'a' 0 4) + (Original (solid 9)) + (withForeColor defAttr blue) + True) + ]) + 'A' + (Set.fromList [Location 'a' 1 4, Location 'a' (-1) 4]) + (Location 'a' 1 (-4)) + +player18 :: World +player18 = + World + (Map.fromList + [('c', + Box (Location 'c' (-1) (-1)) + (Original (makeWalls [ + "▓▓▓▓▓▓▓▓▓", + "▓▓▓▓▓▓▓▓▓", + "▓▓ ▓▓", + "▓▓ ▓▓", + "▓▓ ", + "▓▓ ▓▓", + "▓▓ ▓▓", + "▓▓▓▓▓▓▓▓▓", + "▓▓▓▓▓▓▓▓▓" + ])) + (withForeColor defAttr yellow) + False), + ('u', + Box + (Location 'c' 0 0) + (Original (makeWalls [ + "▓▓▓▓ ▓▓▓▓", + "▓▓▓▓ ▓▓▓▓", + "▓▓▓▓ ▓▓▓▓", + "▓▓ ▓▓", + "▓▓ ▓▓", + "▓▓ ▓▓", + "▓▓▓▓▓▓▓▓▓", + "▓▓▓▓▓▓▓▓▓", + "▓▓▓▓▓▓▓▓▓" + ])) + (withForeColor defAttr magenta) + False), + ('1', + Box + (Location 'c' (-1) 1) + (Original (solid 9)) + (withForeColor defAttr blue) + True), + ('2', + Box + (Location 'c' 1 (-1)) + (Original (solid 9)) + (withForeColor defAttr blue) + True), + ('3', + Box + (Location 'c' 1 1) + (Original (solid 9)) + (withForeColor defAttr blue) + True) + ]) + 'u' + (Set.singleton (Location 'u' (-1) 2)) + (Location 'u' 1 (-2)) \ No newline at end of file diff --git a/app/Model.hs b/app/Model.hs index 6078270..1afa5fc 100644 --- a/app/Model.hs +++ b/app/Model.hs @@ -14,7 +14,8 @@ type Coord = (Int, Int) data Box = Box { boxLocation :: Location, boxType :: BoxType, - boxColor :: Attr + boxColor :: Attr, + boxBoring :: Bool } deriving (Show, Read, Eq) diff --git a/app/Rendering.hs b/app/Rendering.hs index d428d36..7feb490 100644 --- a/app/Rendering.hs +++ b/app/Rendering.hs @@ -71,7 +71,7 @@ renderBox world locMap box name scale = | let ((ylo,xlo),(yhi,xhi)) = bounds (boxWalls world box) , y <- [ylo .. yhi] ] - + render :: Bool {- ^ show flat overlay -} -> World -> @@ -104,7 +104,7 @@ renderFlat locMap world = intersperse (char borderAttr ' ') [renderBox world locMap b n 2 | (n,b) <- Map.assocs (worldBoxes world) - , Original{} <- [boxType b]] + , not (boxBoring b)] drawNestedWorld :: Map Location Char -> World -> Image drawNestedWorld locMap world =