Add restart key and improve comments

This commit is contained in:
Rampoina 2022-04-18 01:57:07 +02:00
parent 93b60a4e47
commit 3298ebccc4
2 changed files with 12 additions and 11 deletions

View File

@ -8,6 +8,7 @@ Vim style movement keys
- k: up - k: up
- l: right - l: right
- u: undo - u: undo
- r: restart
## Running ## Running

View File

@ -17,10 +17,10 @@
moves00 # list of moves, each move is a direction, we start without moving moves00 # list of moves, each move is a direction, we start without moving
chars" @$.+*#" # legal characters chars" @$.+*#" # legal characters
SplitOnEmpty{𝕩˜(-˜+`׬)0=¨𝕩} SplitOnEmpty{𝕩˜(-˜+`׬)0=¨𝕩}
Ascii2Matrix{(chars𝕩)0,10,20,3,13,23,6}¨(˝·¬2+) Ascii2Matrix{(chars𝕩)0,10,20,3,13,23,6}¨(˝·¬2+)
# 𝕨 Tiles 𝕩 | 𝕩: object coordinate (3‿1) | 𝕨: direction vector (¯1‿0) # 𝕨 Tiles 𝕩 | 𝕩: object coordinate (3‿1) | 𝕨: direction vector (¯1‿0)
# result: ⟨ ⟨ 3 1 ⟩ ⟨ 2 1 ⟩ ⟨ 1 1 ⟩ ⟩ # result: ⟨ ⟨ 3 1 ⟩ ⟨ 2 1 ⟩ ⟨ 1 1 ⟩ ⟩
# returns 3 tiles in the specified direction from the # returns 3 tiles in the specified direction from the
@ -40,34 +40,34 @@ Move←{a‿b:⟨1↓a,(⊑a)∾b⟩}⍟{´(⥊1‿2≍⌜0‿3)≡⌜<⊑¨
# and afterwards try to move the first one (player) if possible # and afterwards try to move the first one (player) if possible
PushMove(2)Move(1) PushMove(2)Move(1)
S{Push((𝕨 Tiles Player 𝕩 ))𝕩} # 𝕨 S 𝕩 | 𝕨: direction | 𝕩:level | step the game S{Push((𝕨 Tiles Player 𝕩 ))𝕩} # 𝕨 S 𝕩 | 𝕨: direction | 𝕩:level | Step the game
Draw{chars˜+´¨𝕨 S´ 𝕩} # Draw 𝕩 | 𝕩: moves | Draw the game in ASCII Draw{chars˜+´¨𝕨 S´ 𝕩} # 𝕨 Draw 𝕩 | 𝕨: levels | 𝕩: moves | Draw the game in ASCII
W{(2¨¨𝕩) =(+´) (<23)¨𝕩} # W 𝕩 | 𝕩: level | [W]in condition W{(2¨¨𝕩) =(+´) (<23)¨𝕩} # W 𝕩 | 𝕩: level | [W]in condition
N{movesmoves<𝕩} N{movesmoves<𝕩}
Undo{𝕊:moves(-1<)moves} Undo{𝕊:moves(-1<)moves}
While {𝕨{𝕊𝔾𝔽𝕩}𝕩@}´ While {𝕨{𝕊𝔾𝔽𝕩}𝕩@}´
# Main loop # Main loop
# Load file containing levels levelsAscii2Matrix¨>¨SplitOnEmpty•FLines "levels" # Load file containing levels
levelsAscii2Matrix¨>¨SplitOnEmpty•FLines "levels"
currentLevel0 currentLevel0
•term.RawMode 1 # set terminal to raw mode •term.RawMode 1 # set terminal to raw mode
•Out "[?25l" # Cursor to origin, hide it and clear screen •Out "[?25l" # Cursor to origin, hide it and clear screen
clear"" clear""
While {𝕤currentLevel<levels}{𝕤 # Loop until the user wins While {𝕤currentLevel<levels}{𝕤 # Loop until the user wins
•Out "" •Out "" # Cursor to origin
•Out "Level: "•Repr 1+currentLevel •Out "Level: "•Repr 1+currentLevel
•Out "7" •Out "7" # Save cursor position
•Out "Press key" •Out "Controls: (hjkl) to move, u to undo, r to reset level"
•Out˘ (currentLevellevels) Draw moves •Out˘ (currentLevellevels) Draw moves
key•term.CharB @ key•term.CharB @
{𝕤N ("hjkl"=key)/0¯1,10,¯10,01}(key"hjkl")@ {𝕤N ("hjkl"=key)/0¯1,10,¯10,01}(key"hjkl")@
{𝕤Undo @}(key='u')@ {𝕤Undo @}(key='u')@
{𝕤•Out "[?12l[?25h"•Exit 0}(key='q')@ {𝕤•Out "[?12l[?25h"•Exit 0}(key='q')@
{𝕤moves00}(key='r')@
{𝕤clear""}(((1+>(1+101))¯1+moves)key='u')@ {𝕤clear""}(((1+>(1+101))¯1+moves)key='u')@
•Out "8" •Out "8" # Restore cursor position
{𝕤•Out clear"Press key"}(key"hjklu")@ {𝕤•Out clear"Controls: (hjkl) to move, u to undo, r to reset level"}(key"hjkluqr")@
{𝕤•Out "Wrong key"}(¬key"hjkluq")@ {𝕤•Out "Invalid key: (hjkl) to move, u to undo, r to reset level"}(¬key"hjkluqr")@
•Out˘ (currentLevellevels) Draw moves •Out˘ (currentLevellevels) Draw moves
•Out "Moves: "•Repr ¯1+moves •Out "Moves: "•Repr ¯1+moves
{𝕤•Out ""currentLevelcurrentLevel+1moves00}(W (currentLevellevels) S´moves)@ {𝕤•Out ""currentLevelcurrentLevel+1moves00}(W (currentLevellevels) S´moves)@