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
- l: right
- u: undo
- r: restart
## Running

View File

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