#!/bin/sed -nf
# Author: Laurent Le Brun <llb [at] fr.fm>
### commands ###
/^q/ q
/^h/ {
r game_readme.txt
b end
}
/^v/ b v
# welcome message
1 {
i\
Welcome.\
\
During the game, type 'h' for help.\
Level (1..5) ?
d
b end
}
2 {
/^1/ s/.*/\
LEVEL 1\
\
########## \
#X1111111# \
#12222221# \
#11111111# \
#11111111# \
########## \
\
(#)/
/^2/ s/.*/\
LEVEL 2\
\
########## \
#X1122111# \
#122221#1# \
#12211222# \
#111111#1# \
######111# \
########## \
\
(#)/
/^3/ s/.*/\
LEVEL 3\
\
######## \
#X12122# \
###2#12# \
#113223# \
#1#32#1# \
#112111# \
######## \
\
(#)/
/^4/ s/.*/\
LEVEL 4\
\
########### \
#X22222222# \
#111#####1# \
#1#1#####1# \
#222222222# \
########### \
\
(#)/
/^5/ s/.*/\
LEVEL 5\
\
############ \
#X222222221# \
##1###1##### \
#1211#22222# \
#1##1#11112# \
#11121####1# \
####1211111# \
############ \
\
(#)/
# ok, let's start
/LEVEL/ {
b print
}
# error (bad level)
i\
Unbound level.
q
} ;#end 3
### input ###
:input
# arrow keys support
s/\[A/e/g
s/\[B/d/g
s/\[C/f/g
s/\[D/s/g
# moves
/^e/ {
s///
x
/#.\{13\}X/ b collision
s/\(.\)\(.\{13\}\)X\(.*\)(\(.\))/X\2\4\3(\1)/
b turn
}
/^s/ {
s///
x
/#X/ b collision
s/\(.\)X\(.*\)(\(.\))/X\3\2(\1)/
b turn
}
/^d/ {
s///
x
/X.\{13\}#/ b collision
s/X\(.\{13\}\)\(.\)\(.*\)(\(.\))/\4\1X\3(\2)/
b turn
}
/^f/ {
s///
x
/X#/ b collision
s/X\(.\)\(.*\)(\(.\))/\3X\2(\1)/
b turn
}
i\
Oups, bad input.
s/.*//
x
b print
### Collision ###
:collision
i\
Hey! You can't go there!
b print
### New turn ###
:turn
s/(1)/(#)/
s/(2)/(1)/
s/(3)/(2)/
s/(4)/(3)/
s/(5)/(4)/
s/(6)/(5)/
### print ###
:print
# sexy colors
s/X/[31;1m&[m/g
s/#/[46;36m&[m/g
p
# remove sexy colors
s/\[[0-9;]*m//g
### victory ###
/#.*[1-9]/ !{
:v
i\
Victory is yours!
s///
q
}
x
:end
s/.*//
### colorized by sedsed, a debugger and code formatter for sed scripts
### original script: http://laurent.le-brun.eu/pub/puzzle.sed