Cleanup
This commit is contained in:
parent
06646746c6
commit
7ef2e3cd09
40
arc.bqn
40
arc.bqn
|
@ -4,11 +4,11 @@
|
|||
#
|
||||
# Arc
|
||||
# The level is a 2d matrix of lists (tiles)
|
||||
# Each list contains the objects of the game represented as ints
|
||||
# Each list contains the objects of the game represented as numbers
|
||||
⟨ansi⟩←•Import "ansi.bqn"
|
||||
|
||||
moves←⟨0‿0⟩ # list of moves, each move is a direction, we start without moving
|
||||
chars←" λ$⊕⭍#/\-|+<>^v" # legal characters
|
||||
chars←" λ$⊕⭍#/\-|+<>^v" # legal characters:
|
||||
⟨floor,player,box,machine,pmachine,wall,lmirror,rmirror,hbeam,vbeam,xbeam,llaser,rlaser,ulaser,dlaser⟩←↕≠chars
|
||||
beams←hbeam‿vbeam‿xbeam
|
||||
mirrors←lmirror‿rmirror
|
||||
|
@ -19,8 +19,8 @@ empties←floor∾beams # floor and laser beams
|
|||
|
||||
colors←(≠chars)⥊<ansi.defaultB # start with all glyphs being the default color
|
||||
colors ansi.yellow˙⌾(pmachine⊸⊑)↩
|
||||
colors ansi.cyan¨⌾(lmirror‿rmirror⊸⊏)↩
|
||||
colors ansi.red¨⌾(hbeam‿vbeam‿xbeam⊸⊏)↩
|
||||
colors ansi.cyan¨⌾(mirrors⊸⊏)↩
|
||||
colors ansi.red¨⌾(beams⊸⊏)↩
|
||||
Colorize←{𝕩∾˜colors⊑˜⊑chars⊐𝕩} # 𝕩: character | Turn character into color+character
|
||||
|
||||
lTiles←{⊑𝕩∊movables ? 𝕩‿floor; ≍𝕩}¨↕≠chars # list of all the possible tiles as lists of numbers
|
||||
|
@ -60,7 +60,7 @@ Bounce←{(w‿d)S x:{
|
|||
Shoot←{𝕩 {𝕨Bounce´⌽𝕩} ∾⟨<0‿¯1,<0‿1,<¯1‿0,<1‿0⟩(⊣⋈˜¨+)¨ FindIdx⟜(⊑¨𝕩)¨ lasers}
|
||||
Step←{Push⌾((𝕨 Tiles ⊑player FindIdx ⊑¨𝕩)⊸⊑)𝕩} # 𝕨 S 𝕩 | 𝕨: direction | 𝕩:level | Step the game
|
||||
Draw←{∾´¨<˘Colorize¨chars⊏˜+´¨Shoot 𝕨 Step´ ⌽𝕩} # 𝕨 Draw 𝕩 | 𝕨: levels | 𝕩: moves | Draw the game in ASCII
|
||||
Win←{¬∨´∨˝3=⊑¨Shoot 𝕩}# W 𝕩 | 𝕩: level | [W]in condition, no unpowered goals after shooting laser
|
||||
Win←{¬∨´∨˝machine=⊑¨Shoot 𝕩}# W 𝕩 | 𝕩: level | [W]in condition, no unpowered machines after shooting laser
|
||||
Next←{moves↩moves∾<𝕩}
|
||||
Undo←{𝕊:moves↩(-1<≠)⊸↓moves}
|
||||
|
||||
|
@ -73,30 +73,26 @@ e←ansi.e
|
|||
•Out e∾"[?25l"∾e∾"[2J"∾e∾"[H" # Cursor to origin, hide it and clear screen
|
||||
clear←""
|
||||
{𝕤 # Loop until the user wins
|
||||
•Out e∾"[H" # Cursor to origin
|
||||
•Out clear∾e∾"[H" # Cursor to origin
|
||||
clear↩""
|
||||
•Out "Level: "∾•Repr 1+currentLevel
|
||||
•Out e∾"7" # Save cursor position
|
||||
•Out ansi.yellow∾"⭍"∾ansi.defaultB∾" Power the machines (⊕) by moving the mirrors ("∾ansi.cyan∾"\/"∾ansi.defaultB∾") "
|
||||
•Out "Controls: (hjkl or wasd) to move, u to undo, r to reset level, q to quit"
|
||||
•Out¨ (currentLevel⊑levels) Draw moves
|
||||
key←•term.CharB @
|
||||
{𝕤⋄Next ⊑("hjkl"=key)/⟨0‿¯1,1‿0,¯1‿0,0‿1⟩}⍟(⊑key∊"hjkl")@
|
||||
{𝕤⋄Next ⊑("aswd"=key)/⟨0‿¯1,1‿0,¯1‿0,0‿1⟩}⍟(⊑key∊"aswd")@
|
||||
{𝕤⋄Undo @}⍟(key='u')@
|
||||
{𝕤⋄•Out e∾"[?12l"∾e∾"[?25h"⋄•Exit 0}⍟(key='q')@
|
||||
{𝕤⋄moves↩⟨0‿0⟩}⍟(key='r')@
|
||||
{𝕤⋄clear↩e∾"[2J"}⍟(((1⊸+>○(⌊1+10⋆⁼1⌈⊢)⊢)¯1+≠moves)∧key='u')@
|
||||
•Out e∾"8" # Restore cursor position
|
||||
{𝕤⋄•Out clear∾ansi.yellow∾"⭍"∾ansi.defaultB∾" Power the machines (⊕) by moving the mirrors ("∾ansi.cyan∾"\/"∾ansi.defaultB∾")"∾(@+10)∾"Controls: (hjkl or wasd) to move, u to undo, r to reset level, q to quit"}⍟(⊑key∊"wasdhjkluqr")@
|
||||
{𝕤⋄•Out "Invalid key: (hjkl or wasd) to move, u to undo, r to reset level"}⍟(¬⊑key∊"wasdhjkluqr")@
|
||||
•Out¨ (currentLevel⊑levels) Draw moves
|
||||
•Out "Moves: "∾•Repr ¯1+≠moves
|
||||
{𝕤
|
||||
Win (currentLevel⊑levels) Step´⌽moves ?
|
||||
•Out "Good job!, press any key to continue to the next level"
|
||||
•term.CharB @
|
||||
•Out e∾"[H"∾e∾"[0J"
|
||||
key←•term.CharB @
|
||||
clear↩e∾"[2J"
|
||||
currentLevel↩currentLevel+1⋄moves↩⟨0‿0⟩
|
||||
}⍟(Win (currentLevel⊑levels) Step´⌽moves)@
|
||||
{𝕤⋄•Out e∾"[?12l"∾e∾"[?25h"⋄•Exit 0}⍟(key='q')@
|
||||
;
|
||||
key←•term.CharB @
|
||||
{𝕤⋄Next ⊑("hjklaswd"=key)/∾˜⟨0‿¯1,1‿0,¯1‿0,0‿1⟩}⍟(⊑key∊"hjklaswd")@
|
||||
{𝕤⋄Undo @}⍟(key='u')@
|
||||
{𝕤⋄•Out e∾"[?12l"∾e∾"[?25h"⋄•Exit 0}⍟(key='q')@
|
||||
{𝕤⋄clear↩e∾"[2J"⋄moves↩⟨0‿0⟩}⍟(key='r')@
|
||||
{𝕤⋄clear↩e∾"[2J"}⍟(((1⊸+>○(⌊1+10⋆⁼1⌈⊢)⊢)¯1+≠moves)∧key='u')@
|
||||
}•_While_{𝕤⋄currentLevel<≠levels}@
|
||||
•Out "Well played, you win!"
|
||||
•Out e∾"[?12l"∾e∾"[?25h"
|
||||
|
|
Loading…
Reference in New Issue