more levels

This commit is contained in:
Eric Mertens 2022-12-05 08:13:26 -08:00
parent 997c624465
commit d93374c5c6

View File

@ -1,14 +1,13 @@
module Main where
module Main (main) where
import Data.Map qualified as Map
import Graphics.Vty
import Control.Exception ( bracket )
import Data.List.NonEmpty (NonEmpty(..))
import Data.List.NonEmpty qualified as NonEmpty
import Data.Set qualified as Set
import System.Environment ( getArgs )
import Data.Map (Map)
import Data.Map qualified as Map
import Data.Set qualified as Set
import Graphics.Vty
import System.Environment ( getArgs )
import Model
import Rendering ( render )
@ -108,14 +107,20 @@ worldList :: Map.Map String World
worldList = Map.fromList
[ ("world0", world0)
, ("small", smallWorld)
, ("enter2", enter2)
, ("eat11", eat11)
, ("center8", center8)
, ("center13", center13)
, ("clone11", clone11)
, ("transfer8", transfer8)
, ("transfer14", transfer14)
, ("transfer20", transfer20)
, ("transfer26", transfer26)
, ("transfer27", transfer27)
, ("open4", open4)
, ("swap3", swap3)
, ("swap4", swap4)
, ("swap5", swap5)
, ("cycle10", cycle10)
, ("player10", player10)
, ("player11", player11)
@ -176,6 +181,61 @@ smallWorld =
Set.empty
(Location 'b' 0 0)
enter2 :: World
enter2 = parse
"player p\n\
\block t white boring\n\
\\n\
\\n\
\\n\
\\n\
\ta\n\
\\n\
\\n\
\\n\
\\n\
\block a white interesting\n\
\\n\
\ \n\
\ cpb \n\
\ \n\
\ \n\
\ =\n\
\ -\n\
\ \n\
\\n\
\block c yellow interesting\n\
\\n\
\\n\
\\n\
\ \n\
\ \n\
\ \n\
\\n\
\\n\
\\n\
\block b blue boring\n\
\\n\
\\n\
\\n\
\\n\
\\n\
\\n\
\\n\
\\n\
\\n\
\block p magenta boring\n\
\\n\
\\n\
\ \n\
\\n\
\\n\
\\n\
\\n\
\\n\
\\n"
center8 :: World
center8 = parse
"player p\n\
@ -284,6 +344,81 @@ center13 = parse
\\n\
\\n"
transfer8 :: World
transfer8 = parse
"player p\n\
\block t cyan boring\n\
\\n\
\\n\
\\n\
\\n\
\ta\n\
\\n\
\\n\
\\n\
\\n\
\block a cyan interesting\n\
\\n\
\\n\
\ \n\
\ xb \n\
\ g\n\
\ py \n\
\ \n\
\\n\
\\n\
\block g green interesting\n\
\ \n\
\ \n\
\ \n\
\ \n\
\ = \n\
\ \n\
\ \n\
\ \n\
\ \n\
\block b blue interesting\n\
\ \n\
\ \n\
\ \n\
\ \n\
\ \n\
\ \n\
\ \n\
\ \n\
\ \n\
\block x yellow boring\n\
\\n\
\\n\
\\n\
\\n\
\\n\
\\n\
\\n\
\\n\
\\n\
\block y yellow boring\n\
\\n\
\\n\
\\n\
\\n\
\\n\
\\n\
\\n\
\\n\
\\n\
\block p magenta boring\n\
\\n\
\\n\
\ \n\
\\n\
\\n\
\\n\
\\n\
\\n\
\\n"
clone11 :: World
clone11 = parse
"player p\n\
@ -590,86 +725,213 @@ world0 = World {
]
}
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)
swap3 :: World
swap3 = parse
"player p\n\
\block b blue interesting\n\
\\n\
\\n\
\\n\
\ \n\
\ b y \n\
\ \n\
\ p g \n\
\ \n\
\ \n\
\block g green interesting\n\
\\n\
\\n\
\\n\
\\n\
\ -\n\
\ -\n\
\= -\n\
\\n\
\\n\
\block y yellow interesting\n\
\\n\
\\n\
\\n\
\\n\
\\n\
\\n\
\\n\
\\n\
\\n\
\block p magenta boring\n\
\\n\
\\n\
\ \n\
\\n\
\\n\
\\n\
\\n\
\\n\
\\n"
swap4 :: World
swap4 = parse
"player p\n\
\block b blue interesting\n\
\\n\
\ \n\
\ b g \n\
\ - \n\
\ = p \n\
\ - \n\
\ y \n\
\ \n\
\\n\
\block g green interesting\n\
\\n\
\ \n\
\ \n\
\ \n\
\ \n\
\ \n\
\- \n\
\ \n\
\ \n\
\block p magenta boring\n\
\\n\
\\n\
\ \n\
\\n\
\\n\
\\n\
\\n\
\\n\
\\n\
\block y yellow boring\n\
\\n\
\\n\
\\n\
\\n\
\\n\
\\n\
\\n\
\\n\
\\n"
swap5 :: World
swap5 = parse
"player p\n\
\block b blue interesting\n\
\\n\
\ \n\
\ \n\
\ g y \n\
\ p \n\
\ b r \n\
\ \n\
\ \n\
\\n\
\block g green interesting\n\
\\n\
\ \n\
\ \n\
\ - - \n\
\ = \n\
\ - - \n\
\ \n\
\ \n\
\ \n\
\block y yellow interesting\n\
\\n\
\ \n\
\ \n\
\ \n\
\ \n\
\ \n\
\ \n\
\ \n\
\\n\
\block r red interesting\n\
\ \n\
\ \n\
\ \n\
\ \n\
\ \n\
\ \n\
\ \n\
\ \n\
\\n\
\block p magenta boring\n\
\\n\
\\n\
\ \n\
\\n\
\\n\
\\n\
\\n\
\\n\
\\n"
cycle10 :: World
cycle10 = parse
"player p\n\
\block g green interesting\n\
\c\n\
\1\n\
\ \n\
\ \n\
\ G p \n\
\ \n\
\ 2 3 \n\
\ g\n\
\ \n\
\link G g green\n\
\block c yellow interesting\n\
\\n\
\\n\
\\n\
\ \n\
\ = \n\
\ \n\
\\n\
\\n\
\\n\
\block p magenta boring\n\
\\n\
\\n\
\ \n\
\\n\
\\n\
\\n\
\\n\
\\n\
\\n\
\block 1 red boring\n\
\\n\
\\n\
\\n\
\\n\
\\n\
\\n\
\\n\
\\n\
\\n\
\block 2 red boring\n\
\\n\
\\n\
\\n\
\\n\
\\n\
\\n\
\\n\
\\n\
\\n\
\block 3 red boring\n\
\\n\
\\n\
\\n\
\\n\
\\n\
\\n\
\\n\
\\n\
\\n"
player10 :: World
player10 =
@ -1227,6 +1489,70 @@ infiniteEnter20 =
Set.empty
(Location 'w' (-3) 3)
eat11 :: World
eat11 = parse
"player p\n\
\block t red boring\n\
\\n\
\\n\
\\n\
\\n\
\tr\n\
\\n\
\\n\
\\n\
\\n\
\block r red interesting\n\
\\n\
\\n\
\ \n\
\ p y \n\
\ \n\
\ b g \n\
\= -\n\
\\n\
\\n\
\block p magenta boring\n\
\\n\
\\n\
\ \n\
\\n\
\\n\
\\n\
\\n\
\\n\
\\n\
\block b blue interesting\n\
\\n\
\\n\
\ \n\
\ \n\
\ \n\
\ \n\
\ \n\
\\n\
\\n\
\block g green interesting\n\
\\n\
\\n\
\\n\
\\n\
\-\n\
\ \n\
\ \n\
\ \n\
\-\n\
\block y yellow boring\n\
\\n\
\\n\
\\n\
\\n\
\\n\
\\n\
\\n\
\\n\
\\n"
multiInfinite5 :: World
multiInfinite5 = parse
"player p\n\
@ -1283,31 +1609,31 @@ multiInfinite8 = parse
\epsilon 1 b blue\n\
\ \n\
\ \n\
\ \n\
\ \n\
\ B \n\
\ \n\
\ \n\
\ \n\
\ \n\
\ B \n\
\ \n\
\ \n\
\ \n\
\ \n\
\epsilon 2 1 blue\n\
\ \n\
\ \n\
\ \n\
\ \n\
\ \n\
\ \n\
\ \n\
\ \n\
\ \n\
\ \n\
\ \n\
\ \n\
\ \n\
\ C x \n\
\epsilon 3 2 blue\n\
\ \n\
\ \n\
\ \n\
\ \n\
\ = \n\
\ \n\
\ \n\
\ \n\
\ \n\
\ = \n\
\ \n\
\ \n\
\ \n\
\ \n\
\block x yellow boring\n\