Skip to content

Instantly share code, notes, and snippets.

@timvisher
Last active August 29, 2015 14:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save timvisher/f580f8ee19bdfcf7232a to your computer and use it in GitHub Desktop.
Save timvisher/f580f8ee19bdfcf7232a to your computer and use it in GitHub Desktop.
(ns nhss.standard-level-data-macros)
(defn features []
{:down-stair \>
:up-stair \<
:space \·
:boulder \0
:hole \^
:player \@
:empty \space
:wall #{\┴ \┼ \┤ \┌ \├ \─ \└ \┐ \┬ \┘ \│}})
(defn level->cells [level]
(into [] (map (comp (partial apply vector) seq) level)))
(defn cells->floor [cells]
(mapv (fn [cells]
(mapv (fn [cell]
(cond (or (= (:boulder (features)) cell)
(= (:hole (features)) cell))
(:space (features))
((:wall (features)) cell)
(:empty (features))
(= (:player (features)) cell)
(:down-stair (features))
:default
cell))
cells))
cells))
(defn deflevel [title info & level]
(let [cells (level->cells level)
floor (cells->floor cells)]
{:title title
:info info
:cells cells
:floor floor}))
(deflevel
"NetHack Sokoban 1a"
""
"┌─┬────┐ ┌────┐"
"│<│@···└─┘····│"
"│^├┐·00····0··│"
"│^││··00│·0·0·│"
"│^││····│·····│"
"│^│└───┬┘0────┤"
"│^│ │······│"
"│^└────┘······│"
"│··^^^^0000···│"
"│??┌───┐······│"
"└──┘ └──────┘")
;; {:title "NetHack Sokoban 1a", :info "", :cells [[\┌ \─ \┬ \─ \─ \─ \─ \┐ \space \┌ \─ \─ \─ \─ \┐] [\│ \< \│ \@ \· \· \· \└ \─ \┘ \· \· \· \· \│] [\│ \^ \├ \┐ \· \0 \0 \· \· \· \· \0 \· \· \│] [\│ \^ \│ \│ \· \· \0 \0 \│ \· \0 \· \0 \· \│] [\│ \^ \│ \│ \· \· \· \· \│ \· \· \· \· \· \│] [\│ \^ \│ \└ \─ \─ \─ \┬ \┘ \0 \─ \─ \─ \─ \┤] [\│ \^ \│ \space \space \space \space \│ \· \· \· \· \· \· \│] [\│ \^ \└ \─ \─ \─ \─ \┘ \· \· \· \· \· \· \│] [\│ \· \· \^ \^ \^ \^ \0 \0 \0 \0 \· \· \· \│] [\│ \? \? \┌ \─ \─ \─ \┐ \· \· \· \· \· \· \│] [\└ \─ \─ \┘ \space \space \space \└ \─ \─ \─ \─ \─ \─ \┘]], :floor [[\space \space \space \space \space \space \space \space \space \space \space \space \space \space \space] [\space \< \space \> \· \· \· \space \space \space \· \· \· \· \space] [\space \· \space \space \· \· \· \· \· \· \· \· \· \· \space] [\space \· \space \space \· \· \· \· \space \· \· \· \· \· \space] [\space \· \space \space \· \· \· \· \space \· \· \· \· \· \space] [\space \· \space \space \space \space \space \space \space \· \space \space \space \space \space] [\space \· \space \space \space \space \space \space \· \· \· \· \· \· \space] [\space \· \space \space \space \space \space \space \· \· \· \· \· \· \space] [\space \· \· \· \· \· \· \· \· \· \· \· \· \· \space] [\space \? \? \space \space \space \space \space \· \· \· \· \· \· \space] [\space \space \space \space \space \space \space \space \space \space \space \space \space \space \space]]}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment