精华内容
下载资源
问答
  • shell脚本游戏五子棋

    2019-09-18 06:33:34
    #!/bin/bashP1=6;P2=1P3=20;P4=1P5=14;P6=48 function Chess_board (){printf "\n\n\n";printf "%32s " " ";printf "\e[33m----->>FIVE STONE GAME<<-----\e[0m";...Information:&g...

    #!/bin/bash
    P1=6;P2=1
    P3=20;P4=1
    P5=14;P6=48

    function Chess_board ()
    {
    printf "\n\n\n";printf "%32s " " ";printf "\e[33m----->>FIVE STONE GAME<<-----\e[0m";printf "\n"
    printf "<Information:>\n"
    printf "%30s\e[43m ";printf "\e[43m \e[0m\n"
    for i in {15..1}
    do
    for j in {1..15}
    do
    if [ $j = 1 ]
    then
    if [ $i -le 9 ]
    then
    printf "%30s" " ";echo -ne "\e[43m\e[30m"" "$i" "; printf "\e[43m\e[30m+ \e[0m"
    else
    printf "%30s" " ";echo -ne "\e[43m\e[30m"$i" "; printf "\e[43m\e[30m+ \e[0m"
    fi
    elif [ $j = 15 ]
    then
    printf "\e[43m\e[30m+ \e[0m"
    elif [ $j = 8 ] && [ $i = 8 ]
    then
    printf "\e[43m\e[30m.\e[43m \e[0m"
    elif [ $j = 4 ] && [ $i = 4 ]
    then
    printf "\e[43m\e[30m.\e[43m \e[0m"
    elif [ $j = 12 ] && [ $i = 4 ]
    then
    printf "\e[43m\e[30m.\e[43m \e[0m"
    elif [ $j = 4 ] && [ $i = 12 ]
    then
    printf "\e[43m\e[30m.\e[43m \e[0m"
    elif [ $j = 12 ] && [ $i = 12 ]
    then
    printf "\e[43m\e[30m.\e[43m \e[0m"
    else
    printf "\e[43m\e[30m+ \e[0m"
    fi
    done
    printf "\n"
    done
    printf "%30s\e[43m\e[30m A B C D E F G H I J K L M N O ";printf "\e[43m \e[0m\n"
    }
    function Location_cursor()
    {
    h=$1;l=$2
    printf "\e[$h;$l;H"
    }
    function Moving_cursor ()
    {
    stty cbreak -echo
    dd if=/dev/tty bs=1 count=1 2>/dev/null
    stty -cbreak echo
    }
    function Choose ()
    {
    x=0;y=0;
    while true
    do
    case $(Moving_cursor) in
    i|I) printf "\e[1A";((x--));; # Up
    k|K) printf "\e[1B";((x++));; # Down
    j|J) printf "\e[2D";((y--));; # Left
    l|L) printf "\e[2C";((y++));; # Right
    " ") break;; # Play
    b|B) Start_game;; # Quit the game
    esac
    done
    }
    function Test_array ()
    {
    point=$1;arr=$2
    test=$(eval echo \${$arr[@]})
    [[ $test == ${test/$point/} ]]
    }
    function y_n ()
    {
    arr=$1
    eval echo \${$arr[@]}|tr ' ' '\n'|sort -t',' -k1,1n -k2,2n|tr ',' ' '|Score $2 $3
    }
    function x_n (){
    arr=$1
    eval echo \${$arr[@]}|tr ' ' '\n' |awk -F, '{print $2" "$1}' |sort -k1n -k2n |Score $2 $3
    }
    function xy_l_n(){
    arr=$1
    eval echo \${$arr[@]}|tr ' ' '\n' |awk -F, '{print $1+$2" "$1}' |sort -k1n -k2n |Score $2 $3
    }
    function xy_r_n(){
    arr=$1
    eval echo \${$arr[@]}|tr ' ' '\n' |awk -F, '{print $1-$2" "$1}' |sort -k1n -k2n |Score $2 $3
    }
    function Score(){
    num=$2;
    if [ $1 == 1 ]
    then
    awk -vn=$num '{if($1==v1){
    if($2==v2+1){a[$1]++}
    else{a[$1]=1}}
    else{a[$1]=1}
    v1=$1
    v2=$2}
    END{for(i in a)
    if(a[i]>=n){print "1";exit}
    print "0"}
    '
    else
    awk -vn=$num '{if($1==v1){
    if($2==v2+1){a[$1]++}
    else{a[$1]=1}}
    else{a[$1]=1}
    v1=$1
    v2=$2}
    END{for(i in a){
    if(a[i]>=n){print sum="1000000000";exit}
    sum+=a[i]==4?"10000000":10*10^a[i]};
    print sum}
    '
    fi
    }
    function Computer_decision(){
    i=0
    unset max_w
    unset max_b
    ((sum_w_old=$(xy_r_n array_white 0 5)+$(xy_l_n array_white 0 5)+$(x_n array_white 0 5)+$(y_n array_white 0 5)))
    ((sum_b_old=$(xy_r_n array_black 0 5)+$(xy_l_n array_black 0 5)+$(x_n array_black 0 5)+$(y_n array_black 0 5)))br/>while((i<${#All_pos[@]}))
    do
    blackpoint="$black_point ${All_pos[$i]}"
    arrayblack=(${blackpoint:1})
    whilepoint="$white_point ${All_pos[$i]}"
    arraywhite=(${whilepoint:1})
    ((sum_w=$(xy_r_n arraywhite 0 5)+$(xy_l_n arraywhite 0 5)+$(x_n arraywhite 0 5)+$(y_n arraywhite 0 5)))
    ((sum_b=$(xy_r_n arrayblack 0 5)+$(xy_l_n arrayblack 0 5)+$(x_n arrayblack 0 5)+$(y_n arrayblack 0 5)))
    ((increase_score_b=sum_b-sum_b_old))
    ((increase_score_w=sum_w-sum_w_old))
    if ((sum_w>=1000000000))||((sum_b>=1000000000))
    then
    echo ${All_pos[$i]}&&s=1&&break
    else
    if ((max_b>increase_score_b))
    then
    ((max_b=max_b))
    else
    ((max_b=increase_score_b,index_b=i))
    fi

                        if ((max_w>increase_score_w))
                        then
                                ((max_w=max_w))
                        else
                                ((max_w=increase_score_w,index_w=i))
                        fi       
                        s=0;
                fi
                ((i++))
        done
        if [ $s != 1 ]
        then
                if ((max_b >= max_w))
                then
                        echo ${All_pos[$index_b]}
                else
                        echo ${All_pos[$index_w]}
                fi
        fi

    }
    if_continue ()
    {
    Location_cursor 40 1
    read -p "Do you want one more game? Y/N: " answer1
    case $answer1 in
    y|Y) clear;
    echo -e '\n\n\n\n\n\n Do you want to continue player vs player\e[31m(1)\e[0m, or try player vs computer\e[33m(2)\e[0m? '
    read -p " Please choose: " answer2;
    case $answer2 in
    1) Main_program_player_vs_player ;;
    2) Main_program_player_vs_computer ;;
    esac;;
    n|N) echo " Thanks!!! ";exit;;
    esac
    }
    function Winif ()
    {
    who
    =$1;
    [ xy_r_n $1 $2 $3 == 1 ]||[ xy_l_n $1 $2 $3 == 1 ]||[ x_n $1 $2 $3 == 1 ]||[ y_n $1 $2 $3 == 1 ]&& Locationcursor 12 1 && echo "The ${who##_} win!!!" && Location_cursor $Cx $Cy && echo -e "\e[47m\e[30m+ \e[0m" && Location_cursor $Cx $Cy &&if_continue
    }
    function Main_program_player_vs_player ()
    {
    clear # CygWin use echo -e "\e[2J"
    Chess_board
    Location_cursor $P5 $P6
    ((Cx=P5,Cy=P6))
    unset test_point step step_b step_w black_point white_point
    array_white=(); array_black=()
    while true
    do
    Choose
    Location_cursor $P3 $P4
    echo -e " \n \n "
    ((Cx=Cx+x,Cy=2
    y+Cy))
    ((abs_x=P5-Cx,abs_y=((Cy-P6))/2))
    test_point="$abs_x,$abs_y"

                if (($abs_x <= 7)) && (($abs_x >= -7)) && (($abs_y <= 7)) && (($abs_y >= -7))
                then
                        if ! Test_array $test_point array_white || ! Test_array $test_point array_black
                        then
                                Location_cursor $P3 $P4       
                                echo -e "Not allowed\nPlease try again!!!" && test_result=1
                        fi
                else
                        Location_cursor $P3 $P4
                        echo -e "Out of chess broad\nNot allowed\nPlease try again!!!" && test_result=1
                fi
    
                if [ "$test_result" == 1 ]
                then
                        ((Cx=P5-abs_x,Cy=2*abs_y+P6)) && test_result=0
                        Location_cursor $Cx $Cy
                else
                        ((step++))
                        ((who_go=step%2)) 
                        Location_cursor $P1 $P2
                        if [ $who_go = 1 ]
                                then
                                ((step_b++))
                                black_point="$black_point $abs_x,$abs_y"
                                array_black=(${black_point:1})
                                Win_if array_black 1 5
                                Location_cursor $P1 $P2
                                echo -e "\e[31m The Black \e[0m"
                                echo -e "\e[31mStep= $step_b\e[0m" 
                                echo "-->The White's turn<--"
                                echo "Step= $step_w"
                                Location_cursor $Cx $Cy
                                echo -e "\e[40m+ \e[0m"
                                Location_cursor $Cx $Cy
                        else
                                ((step_w++))
                                white_point="$white_point $abs_x,$abs_y" 
                                array_white=(${white_point:1})
                                Win_if array_white 1 5
                                Location_cursor $P1 $P2               
                                echo -e "\e[31m The White \e[0m"
                                echo -e "\e[31mStep= $step_w\e[0m" 
                                echo  "-->The Black's turn<--" 
                                echo  "Step= $step_b"
                                Location_cursor $Cx $Cy
                                echo -e "\e[47m\e[30m+ \e[0m"
                                Location_cursor $Cx $Cy
                        fi
                fi
        done

    }
    #Main_program
    function Main_program_player_vs_computer ()
    {
    clear # CygWin use echo -e "\e[2J"
    All_pos=($(echo {-7..7},{-7..7}))
    Chess_board
    Location_cursor $P5 $P6
    ((Cx=P5,Cy=P6))
    unset test_point step step_b step_w black_point white_point
    array_white=(); array_black=()

        while true
        do
                Choose
                Location_cursor $P3 $P4
                echo -e "                          \n                           \n                            "
    
                ((Cx=Cx+x,Cy=2*y+Cy))
                ((abs_x=P5-Cx,abs_y=((Cy-P6))/2))
                test_point="$abs_x,$abs_y"       
                if (($abs_x <= 7)) && (($abs_x >= -7)) && (($abs_y <= 7)) && (($abs_y >= -7))
                then
                        if ! Test_array $test_point array_white
                        then
                                Location_cursor $P3 $P4       
                                echo -e "Not allowed\nPlease try again!!!" && test_result=1
                        fi
                else
                        Location_cursor $P3 $P4
                        echo -e "Out of chess broad\nNot allowed\nPlease try again!!!" && test_result=1
                fi
    
                if [ "$test_result" == 1 ]
                then
                        ((Cx=P5-abs_x,Cy=2*abs_y+P6)) && test_result=0
                        Location_cursor $Cx $Cy
    
                else
                        Location_cursor $P1 $P2
    
                        ((step_b++))
                        black_point="$black_point $abs_x,$abs_y"
                        array_black=(${black_point:1})
                        Location_cursor $((P3+2)) $P4
                        Win_if array_black 1 5
    
                        Location_cursor $P1 $P2
                        echo -e "\e[31mThe Player \e[0m"
                        echo -e "\e[31mStep= $step_b\e[0m"
                        echo "-->The Computer's turn<--"
                        echo "Step= $step_w"
                        Location_cursor $Cx $Cy
                        echo -e "\e[40m+ \e[0m"
                        Location_cursor $Cx $Cy
                        All_pos=(`echo ${All_pos[@]}|sed "s/ $abs_x,$abs_y / /"`)
    
                # computer:
                        Comp_pos=$(Computer_decision)
                        ((step_w++))
                        white_point="$white_point $Comp_pos"
                        array_white=(${white_point:1})
                        abs_x=${Comp_pos%,*}
                        abs_y=${Comp_pos#*,}
                        ((Cx=P5-abs_x,Cy=2*abs_y+P6))
                        Win_if array_white 1 5
                        All_pos=(`echo ${All_pos[@]}|sed "s/ $Comp_pos / /"`)
                        Location_cursor $P1 $P2
                        echo -e "\e[31mThe Computer \e[0m"
                        echo -e "\e[31mStep= $step_w\e[0m"
                        echo -e "-->The Player's turn<--"
                        echo -e "Step= $step_b"
                        Location_cursor $Cx $Cy
                        echo -e "\e[47m\e[30m+ \e[0m"
                        Location_cursor $Cx $Cy
                fi
        done

    }
    function Start_game()
    {
    clear; # CygWin use echo -e "\e[2J"
    cat <<Mainpage

                                  ----->>FIVE STONE GAME<<-----
                                         <<How to play>>
                        *****************************************************
                        *   Game Types:                                            *
                        *       (1) Main_program_player_vs_player           *
                        *       (2) Main_program_player_vs_computer         *
                        *   Control Keys:                                   *
                        *       (i|I)Up                                            *
                        *       (k|K)Down                                   *
                        *       (j|J)Left                                   *
                        *       (l|L)Right                                  *
                        *       (space)Play                                 *
                        *       (B|b)Back to the mainpage                   *
                        *       (q|Q)Quit the game                          *
                        *****************************************************

    Mainpage
    read -p " Please choose the game you want to play, or quit the game: " answer;
    case $answer in
    1) Main_program_player_vs_player ;;
    2) Main_program_player_vs_computer ;;
    q|Q) exit;;
    esac
    }
    Start_game

    展开全文
  • #!/bin/bash #Author:丁丁历险(Jacob) #定义数组,保存所有出拳的可能性 game=(石头 剪刀 布) num=$[RANDOM%3] computer=${game[$num]} #通过随机数获取计算机的出拳 #出拳的可能性保存在一个数组中,game[0],game[1...
    #!/bin/bash
    #Author:丁丁历险(Jacob)
    #定义数组,保存所有出拳的可能性
    game=(石头 剪刀 布)
    num=$[RANDOM%3]
    computer=${game[$num]}
    #通过随机数获取计算机的出拳
    #出拳的可能性保存在一个数组中,game[0],game[1],game[2]分别是3中不同的可能
     
    echo "请根据下列提示选择您的出拳手势"
    echo "1.石头"
    echo "2.剪刀"
    echo "3.布"
     
    read  -p  "请选择1-3:"  person
    #提示用户出拳,根据提示出拳即可
    #再通过case语句判断用户输入的值是1还是2还是3,根据不同的输入判断不同的结果
    case  $person  in
    1)
           if [ $num -eq 0 ];then
                  echo "平局"
           elif [ $num -eq 1 ];then
                  echo "你赢"
           else
                  echo "计算机赢"
           fi;;
    2)    
           if [ $num -eq 0 ];then
                  echo "计算机赢"
           elif [ $num -eq 1 ];then
                  echo "平局"
           else
                  echo "你赢"
           fi;;
    3)
           if [ $num -eq 0 ];then
                  echo "你赢"
           elif [ $num -eq 1 ];then
                  echo "计算机赢"
           else
                  echo "平局"
           fi;;
    *)
           echo "必须输入1-3的数字"
    esac
    
    展开全文
  • #改游戏使用两个进程,一个用于接收输入,一个用于游戏流程和显示界面; #当前者接收到上下左右等按键时,通过向后者发送signal的方式通知后者。 sigRotate=25 sigLeft=26 sigRight=27 sigDown=28 sigAllDown=29 ...

     

    # 俄罗斯方块.sh

     

    标题

    )

    vim elsfk.sh

    
    
    #!/bin/bash
    #Tetris Game
    #10.21.2003 xhchen<[email]xhchen@winbond.com.tw[/email]>
      
    #APP declaration
    APP_NAME="${0##*[\\/]}"
    APP_VERSION="1.0"
      
      
    #颜色定义
    cRed=1
    cGreen=2
    cYellow=3
    cBlue=4
    cFuchsia=5
    cCyan=6
    cWhite=7
    colorTable=($cRed $cGreen $cYellow $cBlue $cFuchsia $cCyan $cWhite)
      
    #位置和大小
    iLeft=3
    iTop=2
    ((iTrayLeft = iLeft + 2))
    ((iTrayTop = iTop + 1))
    ((iTrayWidth = 10))
    ((iTrayHeight = 15))
      
    #颜色设置
    cBorder=$cGreen
    cScore=$cFuchsia
    cScoreValue=$cCyan
      
    #控制信号
    #改游戏使用两个进程,一个用于接收输入,一个用于游戏流程和显示界面;
    #当前者接收到上下左右等按键时,通过向后者发送signal的方式通知后者。
    sigRotate=25
    sigLeft=26
    sigRight=27
    sigDown=28
    sigAllDown=29
    sigExit=30
      
    #七中不同的方块的定义
    #通过旋转,每种方块的显示的样式可能有几种
    box0=(0 0 0 1 1 0 1 1)
    box1=(0 2 1 2 2 2 3 2 1 0 1 1 1 2 1 3)
    box2=(0 0 0 1 1 1 1 2 0 1 1 0 1 1 2 0)
    box3=(0 1 0 2 1 0 1 1 0 0 1 0 1 1 2 1)
    box4=(0 1 0 2 1 1 2 1 1 0 1 1 1 2 2 2 0 1 1 1 2 0 2 1 0 0 1 0 1 1 1 2)
    box5=(0 1 1 1 2 1 2 2 1 0 1 1 1 2 2 0 0 0 0 1 1 1 2 1 0 2 1 0 1 1 1 2)
    box6=(0 1 1 1 1 2 2 1 1 0 1 1 1 2 2 1 0 1 1 0 1 1 2 1 0 1 1 0 1 1 1 2)
    #所有其中方块的定义都放到box变量中
    box=(${box0[@]} ${box1[@]} ${box2[@]} ${box3[@]} ${box4[@]} ${box5[@]} ${box6[@]})
    #各种方块旋转后可能的样式数目
    countBox=(1 2 2 2 4 4 4)
    #各种方块再box数组中的偏移
    offsetBox=(0 1 3 5 7 11 15)
      
    #每提高一个速度级需要积累的分数
    iScoreEachLevel=50        #be greater than 7
      
    #运行时数据
    sig=0                #接收到的signal
    iScore=0        #总分
    iLevel=0        #速度级
    boxNew=()        #新下落的方块的位置定义
    cBoxNew=0        #新下落的方块的颜色
    iBoxNewType=0        #新下落的方块的种类
    iBoxNewRotate=0        #新下落的方块的旋转角度
    boxCur=()        #当前方块的位置定义
    cBoxCur=0        #当前方块的颜色
    iBoxCurType=0        #当前方块的种类
    iBoxCurRotate=0        #当前方块的旋转角度
    boxCurX=-1        #当前方块的x坐标位置
    boxCurY=-1        #当前方块的y坐标位置
    iMap=()                #背景方块图表
      
    #初始化所有背景方块为-1, 表示没有方块
    for ((i = 0; i < iTrayHeight * iTrayWidth; i++)); do iMap[$i]=-1; done
      
      
    #接收输入的进程的主函数
    function RunAsKeyReceiver()
    {
            local pidDisplayer key aKey sig cESC sTTY
      
            pidDisplayer=$1
            aKey=(0 0 0)
      
            cESC=`echo -ne "\033"`
            cSpace=`echo -ne "\040"`
      
            #保存终端属性。在read -s读取终端键时,终端的属性会被暂时改变。
            #如果在read -s时程序被不幸杀掉,可能会导致终端混乱,
            #需要在程序退出时恢复终端属性。
            sTTY=`stty -g`
      
            #捕捉退出信号
            trap "MyExit;" INT TERM
            trap "MyExitNoSub;" $sigExit
      
            #隐藏光标
            echo -ne "\033[?25l"
      
      
            while :
            do
                    #读取输入。注-s不回显,-n读到一个字符立即返回
                    read -s -n 1 key
      
                    aKey[0]=${aKey[1]}
                    aKey[1]=${aKey[2]}
                    aKey[2]=$key
                    sig=0
      
                    #判断输入了何种键
                    if [[ $key == $cESC && ${aKey[1]} == $cESC ]]
                    then
                            #ESC键
                            MyExit
                    elif [[ ${aKey[0]} == $cESC && ${aKey[1]} == "[" ]]
                    then
                            if [[ $key == "A" ]]; then sig=$sigRotate        #<向上键>
                           elif [[ $key == "B" ]]; then sig=$sigDown        #<向下键>
                            elif [[ $key == "D" ]]; then sig=$sigLeft        #<向左键>
                            elif [[ $key == "C" ]]; then sig=$sigRight        #<向右键>
                            fi
                    elif [[ $key == "W" || $key == "w" ]]; then sig=$sigRotate        #W, w
                    elif [[ $key == "S" || $key == "s" ]]; then sig=$sigDown        #S, s
                    elif [[ $key == "A" || $key == "a" ]]; then sig=$sigLeft        #A, a
                    elif [[ $key == "D" || $key == "d" ]]; then sig=$sigRight        #D, d
                    elif [[ "[$key]" == "[]" ]]; then sig=$sigAllDown        #空格键
                    elif [[ $key == "Q" || $key == "q" ]]                        #Q, q
                    then
                            MyExit
                    fi
      
                    if [[ $sig != 0 ]]
                    then
                            #向另一进程发送消息
                            kill -$sig $pidDisplayer
                    fi
            done
    }
      
    #退出前的恢复
    function MyExitNoSub()
    {
            local y
      
            #恢复终端属性
            stty $sTTY
            ((y = iTop + iTrayHeight + 4))
      
            #显示光标
            echo -e "\033[?25h\033[${y};0H"
            exit
    }
      
      
    function MyExit()
    {
            #通知显示进程需要退出
            kill -$sigExit $pidDisplayer
      
            MyExitNoSub
    }
      
      
    #处理显示和游戏流程的主函数
    function RunAsDisplayer()
    {
            local sigThis
            InitDraw
      
            #挂载各种信号的处理函数
            trap "sig=$sigRotate;" $sigRotate
            trap "sig=$sigLeft;" $sigLeft
            trap "sig=$sigRight;" $sigRight
            trap "sig=$sigDown;" $sigDown
            trap "sig=$sigAllDown;" $sigAllDown
            trap "ShowExit;" $sigExit
      
            while :
            do
                    #根据当前的速度级iLevel不同,设定相应的循环的次数
                    for ((i = 0; i < 21 - iLevel; i++))
                    do
                            sleep 0.02
                            sigThis=$sig
                            sig=0
      
                            #根据sig变量判断是否接受到相应的信号
                            if ((sigThis == sigRotate)); then BoxRotate;        #旋转
                            elif ((sigThis == sigLeft)); then BoxLeft;        #左移一列
                            elif ((sigThis == sigRight)); then BoxRight;        #右移一列
                            elif ((sigThis == sigDown)); then BoxDown;        #下落一行
                            elif ((sigThis == sigAllDown)); then BoxAllDown;        #下落到底
                            fi
                    done
                    #kill -$sigDown $$
                    BoxDown        #下落一行
            done
    }
      
      
    #BoxMove(y, x), 测试是否可以把移动中的方块移到(x, y)的位置, 返回0则可以, 1不可以
    function BoxMove()
    {
            local j i x y xTest yTest
            yTest=$1
            xTest=$2
            for ((j = 0; j < 8; j += 2))
            do
                    ((i = j + 1))
                    ((y = ${boxCur[$j]} + yTest))
                    ((x = ${boxCur[$i]} + xTest))
                    if (( y < 0 || y >= iTrayHeight || x < 0 || x >= iTrayWidth))
                    then
                            #撞到墙壁了
                            return 1
                    fi
                    if ((${iMap[y * iTrayWidth + x]} != -1 ))
                    then
                            #撞到其他已经存在的方块了
                            return 1
                    fi
            done
            return 0;
    }
      
      
    #将当前移动中的方块放到背景方块中去,
    #并计算新的分数和速度级。(即一次方块落到底部)
    function Box2Map()
    {
            local j i x y xp yp line
      
            #将当前移动中的方块放到背景方块中去
            for ((j = 0; j < 8; j += 2))
            do
                    ((i = j + 1))
                    ((y = ${boxCur[$j]} + boxCurY))
                    ((x = ${boxCur[$i]} + boxCurX))
                    ((i = y * iTrayWidth + x))
                    iMap[$i]=$cBoxCur
            done
      
            #消去可被消去的行
            line=0
            for ((j = 0; j < iTrayWidth * iTrayHeight; j += iTrayWidth))
            do
                    for ((i = j + iTrayWidth - 1; i >= j; i--))
                    do
                            if ((${iMap[$i]} == -1)); then break; fi
                    done
                    if ((i >= j)); then continue; fi
      
                    ((line++))
                    for ((i = j - 1; i >= 0; i--))
                    do
                            ((x = i + iTrayWidth))
                            iMap[$x]=${iMap[$i]}
                    done
                    for ((i = 0; i < iTrayWidth; i++))
                    do
                            iMap[$i]=-1
                    done
            done
      
            if ((line == 0)); then return; fi
      
            #根据消去的行数line计算分数和速度级
            ((x = iLeft + iTrayWidth * 2 + 7))
            ((y = iTop + 11))
            ((iScore += line * 2 - 1))
            #显示新的分数
            echo -ne "\033[1m\033[3${cScoreValue}m\033[${y};${x}H${iScore}         "
            if ((iScore % iScoreEachLevel < line * 2 - 1))
            then
                    if ((iLevel < 20))
                    then
                            ((iLevel++))
                           ((y = iTop + 14))
                            #显示新的速度级
                            echo -ne "\033[3${cScoreValue}m\033[${y};${x}H${iLevel}        "
                    fi
            fi
            echo -ne "\033[0m"
      
      
            #重新显示背景方块
            for ((y = 0; y < iTrayHeight; y++))
            do
                    ((yp = y + iTrayTop + 1))
                    ((xp = iTrayLeft + 1))
                    ((i = y * iTrayWidth))
                    echo -ne "\033[${yp};${xp}H"
                    for ((x = 0; x < iTrayWidth; x++))
                    do
                            ((j = i + x))
                            if ((${iMap[$j]} == -1))
                            then
                                    echo -ne "  "
                            else
                                    echo -ne "\033[1m\033[7m\033[3${iMap[$j]}m\033[4${iMap[$j]}m[]\033[0m"
                            fi
                    done
            done
    }
    
    #下落一行
    function BoxDown()
    {
            local y s
            ((y = boxCurY + 1))        #新的y坐标
            if BoxMove $y $boxCurX        #测试是否可以下落一行
            then
                    s="`DrawCurBox 0`"        #将旧的方块抹去
                    ((boxCurY = y))
                    s="$s`DrawCurBox 1`"        #显示新的下落后方块
                    echo -ne $s
            else
                    #走到这儿, 如果不能下落了
                    Box2Map                #将当前移动中的方块贴到背景方块中
                    RandomBox        #产生新的方块
            fi
    }
      
    #左移一列
    function BoxLeft()
    {
            local x s
            ((x = boxCurX - 1))
            if BoxMove $boxCurY $x
            then
                    s=`DrawCurBox 0`
                    ((boxCurX = x))
                    s=$s`DrawCurBox 1`
                    echo -ne $s
            fi
    }
      
    #右移一列
    function BoxRight()
    {
            local x s
            ((x = boxCurX + 1))
            if BoxMove $boxCurY $x
            then
                    s=`DrawCurBox 0`
                    ((boxCurX = x))
                    s=$s`DrawCurBox 1`
                    echo -ne $s
            fi
    }
      
      
    #下落到底
    function BoxAllDown()
    {
            local k j i x y iDown s
            iDown=$iTrayHeight
      
            #计算一共需要下落多少行
            for ((j = 0; j < 8; j += 2))
            do
                    ((i = j + 1))
                    ((y = ${boxCur[$j]} + boxCurY))
                    ((x = ${boxCur[$i]} + boxCurX))
                    for ((k = y + 1; k < iTrayHeight; k++))
                    do
                            ((i = k * iTrayWidth + x))
                            if (( ${iMap[$i]} != -1)); then break; fi
                    done
                    ((k -= y + 1))
                    if (( $iDown > $k )); then iDown=$k; fi
            done
      
            s=`DrawCurBox 0`        #将旧的方块抹去
            ((boxCurY += iDown))
            s=$s`DrawCurBox 1`        #显示新的下落后的方块
            echo -ne $s
            Box2Map                #将当前移动中的方块贴到背景方块中
            RandomBox        #产生新的方块
    }
      
      
    #旋转方块
    function BoxRotate()
    {
            local iCount iTestRotate boxTest j i s
            iCount=${countBox[$iBoxCurType]}        #当前的方块经旋转可以产生的样式的数目
      
            #计算旋转后的新的样式
            ((iTestRotate = iBoxCurRotate + 1))
            if ((iTestRotate >= iCount))
            then
                    ((iTestRotate = 0))
            fi
      
            #更新到新的样式, 保存老的样式(但不显示)
            for ((j = 0, i = (${offsetBox[$iBoxCurType]} + $iTestRotate) * 8; j < 8; j++, i++))
            do
                    boxTest[$j]=${boxCur[$j]}
                    boxCur[$j]=${box[$i]}
            done
      
            if BoxMove $boxCurY $boxCurX        #测试旋转后是否有空间放的下
            then
                    #抹去旧的方块
                    for ((j = 0; j < 8; j++))
                    do
                            boxCur[$j]=${boxTest[$j]}
                    done
                    s=`DrawCurBox 0`
      
                    #画上新的方块
                    for ((j = 0, i = (${offsetBox[$iBoxCurType]} + $iTestRotate) * 8; j < 8; j++, i++))
                    do
                            boxCur[$j]=${box[$i]}
                    done
                    s=$s`DrawCurBox 1`
                    echo -ne $s
                    iBoxCurRotate=$iTestRotate
            else
                    #不能旋转,还是继续使用老的样式
                    for ((j = 0; j < 8; j++))
                    do
                            boxCur[$j]=${boxTest[$j]}
                    done
            fi
    }
      
      
    #DrawCurBox(bDraw), 绘制当前移动中的方块, bDraw为1, 画上, bDraw为0, 抹去方块。
    function DrawCurBox()
    {
            local i j t bDraw sBox s
            bDraw=$1
      
            s=""
            if (( bDraw == 0 ))
            then
                    sBox="\040\040"
            else
                    sBox="[]"
                    s=$s"\033[1m\033[7m\033[3${cBoxCur}m\033[4${cBoxCur}m"
            fi
      
            for ((j = 0; j < 8; j += 2))
            do
                    ((i = iTrayTop + 1 + ${boxCur[$j]} + boxCurY))
                    ((t = iTrayLeft + 1 + 2 * (boxCurX + ${boxCur[$j + 1]})))
                    #\033[y;xH, 光标到(x, y)处
                    s=$s"\033[${i};${t}H${sBox}"
            done
            s=$s"\033[0m"
            echo -n $s
    }
      
      
    #更新新的方块
    function RandomBox()
    {
            local i j t
      
            #更新当前移动的方块
            iBoxCurType=${iBoxNewType}
            iBoxCurRotate=${iBoxNewRotate}
            cBoxCur=${cBoxNew}
            for ((j = 0; j < ${#boxNew[@]}; j++))
            do
                    boxCur[$j]=${boxNew[$j]}
            done
      
      
            #显示当前移动的方块
            if (( ${#boxCur[@]} == 8 ))
            then
                    #计算当前方块该从顶端哪一行"冒"出来
                    for ((j = 0, t = 4; j < 8; j += 2))
                    do
                            if ((${boxCur[$j]} < t)); then t=${boxCur[$j]}; fi
                    done
                    ((boxCurY = -t))
                    for ((j = 1, i = -4, t = 20; j < 8; j += 2))
                    do
                            if ((${boxCur[$j]} > i)); then i=${boxCur[$j]}; fi
                            if ((${boxCur[$j]} < t)); then t=${boxCur[$j]}; fi
                    done
                    ((boxCurX = (iTrayWidth - 1 - i - t) / 2))
      
                    #显示当前移动的方块
                    echo -ne `DrawCurBox 1`
      
                    #如果方块一出来就没处放,Game over!
                    if ! BoxMove $boxCurY $boxCurX
                    then
                            kill -$sigExit ${PPID}
                            ShowExit
                    fi
            fi
      
      
      
            #清除右边预显示的方块
            for ((j = 0; j < 4; j++))
            do
                    ((i = iTop + 1 + j))
                    ((t = iLeft + 2 * iTrayWidth + 7))
                    echo -ne "\033[${i};${t}H        "
            done
      
            #随机产生新的方块
            ((iBoxNewType = RANDOM % ${#offsetBox[@]}))
            ((iBoxNewRotate = RANDOM % ${countBox[$iBoxNewType]}))
            for ((j = 0, i = (${offsetBox[$iBoxNewType]} + $iBoxNewRotate) * 8; j < 8; j++, i++))
            do
                    boxNew[$j]=${box[$i]};
            done
      
            ((cBoxNew = ${colorTable[RANDOM % ${#colorTable[@]}]}))
      
            #显示右边预显示的方块
            echo -ne "\033[1m\033[7m\033[3${cBoxNew}m\033[4${cBoxNew}m"
            for ((j = 0; j < 8; j += 2))
            do
                    ((i = iTop + 1 + ${boxNew[$j]}))
                    ((t = iLeft + 2 * iTrayWidth + 7 + 2 * ${boxNew[$j + 1]}))
                    echo -ne "\033[${i};${t}H[]"
            done
            echo -ne "\033[0m"
    }
      
      
    #初始绘制
    function InitDraw()
    {
            clear
            RandomBox        #随机产生方块,这时右边预显示窗口中有方快了
            RandomBox        #再随机产生方块,右边预显示窗口中的方块被更新,原先的方块将开始下落
            local i t1 t2 t3
      
            #显示边框
            echo -ne "\033[1m"
            echo -ne "\033[3${cBorder}m\033[4${cBorder}m"
      
            ((t2 = iLeft + 1))
            ((t3 = iLeft + iTrayWidth * 2 + 3))
            for ((i = 0; i < iTrayHeight; i++))
            do
                    ((t1 = i + iTop + 2))
                    echo -ne "\033[${t1};${t2}H||"
                    echo -ne "\033[${t1};${t3}H||"
            done
      
            ((t2 = iTop + iTrayHeight + 2))
            for ((i = 0; i < iTrayWidth + 2; i++))
            do
                    ((t1 = i * 2 + iLeft + 1))
                    echo -ne "\033[${iTrayTop};${t1}H=="
                    echo -ne "\033[${t2};${t1}H=="
            done
            echo -ne "\033[0m"
      
      
            #显示"Score"和"Level"字样
            echo -ne "\033[1m"
            ((t1 = iLeft + iTrayWidth * 2 + 7))
            ((t2 = iTop + 10))
            echo -ne "\033[3${cScore}m\033[${t2};${t1}HScore"
            ((t2 = iTop + 11))
            echo -ne "\033[3${cScoreValue}m\033[${t2};${t1}H${iScore}"
            ((t2 = iTop + 13))
            echo -ne "\033[3${cScore}m\033[${t2};${t1}HLevel"
            ((t2 = iTop + 14))
            echo -ne "\033[3${cScoreValue}m\033[${t2};${t1}H${iLevel}"
            echo -ne "\033[0m"
    }
      
      
    #退出时显示GameOVer!
    function ShowExit()
    {
            local y
            ((y = iTrayHeight + iTrayTop + 3))
            echo -e "\033[${y};0HGameOver!\033[0m"
            exit
    }
      
      
    #显示用法.
    function Usage
    {
            cat << EOF
    Usage: $APP_NAME
    Start tetris game.
      
      -h, --help              display this help and exit
          --version           output version information and exit
    EOF
    }
      
      
    #游戏主程序在这儿开始.
    if [[ "$1" == "-h" || "$1" == "--help" ]]; then
            Usage
    elif [[ "$1" == "--version" ]]; then
            echo "$APP_NAME $APP_VERSION"
    elif [[ "$1" == "--show" ]]; then
            #当发现具有参数--show时,运行显示函数
            RunAsDisplayer
    else
            bash $0 --show&        #以参数--show将本程序再运行一遍
            RunAsKeyReceiver $!        #以上一行产生的进程的进程号作为参数
    fi

    chmod +x elsfk.sh

    bash elsfk.sh

    然后就可以愉快的玩耍了

    ↑为变化键

    ←为左移

    →为右移

    ↓为加速下降

    展开全文
  • linux shell脚本游戏之推箱子

    千次阅读 2015-10-12 17:24:30
    #! /bin/sed -nf #r sokoban.sed - 2002-03-15 aur閘io marinho jargas #r ----------- #r motivated by reading the amazing Adventure (Colossal Cave) history #r ...#r GPL levels took from Mike Sharp
    #! /bin/sed -nf
    #r sokoban.sed - 2002-03-15 aur閘io marinho jargas <aurelio@verde666.org>
    #r -----------
    #r motivated by reading the amazing Adventure (Colossal Cave) history
    #r      <http://www.rickadams.org/adventure/a_history.html>
    #r GPL levels took from Mike Sharpe's sokoban.vim <http://vim.sourceforge.net>
    #r
    #r THE GAME
    #r you know sokoban. everybody knows sokoban.
    #r right, if you don't, it's a box pushing game. you have a mess, boxes all
    #r over the room and must place them on the boxes place. to move a box
    #r you must push it. you can only push a box if it's way is clear with
    #r no wall or other box on the way (you are not that strong).
    #r
    #r MOVING AROUND
    #r h or <left-arrow>  - move left
    #r j or <down-arrow>  - move down
    #r k or <up-arrow>    - move up
    #r l or <right-arrow> - move right
    #r
    #r ACTORS
    #r % wall
    #r o box
    #r . box place
    #r O box placed right
    #r @ you
    #r ! you over a box place
    #r 
    #r RUNNING
    #r prompt$ ./sokoban.sed<enter>
    #r <enter>
    #r 1
    #r now just move! (:q quits)
    #r
    #r DETAILS
    #r it's all written in SED, so we've got some limitations:
    #r - as a line-oriented editor, you MUST hit <ENTER> after *any* move.
    #r   yes, that sucks. but you can accumulate various movements and hit
    #r   <ENTER> just once.
    #r - when you run sokoban.sed, you must first press any key to feed SED
    #r   and then you'll see the welcome message.
    #r - the text you type in, is printed directly on the screen, so
    #r   there's no way to clear it on this sed script. screen control
    #r   chars can do it, but i'm trying to avoid them for now.
    #r - these #r comments is because vim syntax doesn't handle sed
    #r   comments very well
    #r - if your sed is not on /bin, edit the first line of this script
    #r
    #r and always remember, it's cool because it's SED. if you don't like it
    #r you can try xsokoban instead <http://www.cs.cornell.edu/andru/xsokoban.html>


    #r TODO :n, :p, :r commands (next/prev/restart)






    #r quit command
    /^:q/q


    #r welcome message
    1{ i\
           Welcome to the SED Sokoban\
    \
    Please select a level to begin [1-90]:
    d
    }


    #r loading map
    2{


    #r --------------------
      /^1$/s/.*/\
    SED Sokoban - LEVEL 1\
    \
         %%%%%            \
         %   %            \
         %o  %            \
       %%%  o%%           \
       %  o o %           \
     %%% % %% %   %%%%%%  \
     %   % %% %%%%%  ..%  \
     % o  o          ..%  \
     %%%%% %%% %@%%  ..%  \
         %     %%%%%%%%%  \
         %%%%%%%          \
    \
    \
    \
    \
    \
    \
    /
    #r --------------------
      /^2$/s/.*/\
    SED Sokoban - LEVEL 2\
    \
     %%%%%%%%%%%%         \
     %..  %     %%%       \
     %..  % o  o  %       \
     %..  %o%%%%  %       \
     %..    @ %%  %       \
     %..  % %  o %%       \
     %%%%%% %%o o %       \
       % o  o o o %       \
       %    %     %       \
       %%%%%%%%%%%%       \
    \
    \
    \
    \
    \
    \
    \
    /
    #r --------------------
      /^3$/s/.*/\
    SED Sokoban - LEVEL 3\
    \
             %%%%%%%%     \
             %     @%     \
             % o%o %%     \
             % o  o%      \
             %%o o %      \
     %%%%%%%%% o % %%%    \
     %....  %% o  o  %    \
     %%...    o  o   %    \
     %....  %%%%%%%%%%    \
     %%%%%%%%             \
    \
    \
    \
    \
    \
    \
    \
    /
    #r --------------------
      /^4$/s/.*/\
    SED Sokoban - LEVEL 4\
    \
                %%%%%%%%  \
                %  ....%  \
     %%%%%%%%%%%%  ....%  \
     %    %  o o   ....%  \
     % ooo%o  o %  ....%  \
     %  o     o %  ....%  \
     % oo %o o o%%%%%%%%  \
     %  o %     %         \
     %% %%%%%%%%%         \
     %    %    %%         \
     %     o   %%         \
     %  oo%oo  @%         \
     %    %    %%         \
     %%%%%%%%%%%          \
    \
    \
    \
    /
    #r --------------------
      /^5$/s/.*/\
    SED Sokoban - LEVEL 5\
    \
             %%%%%        \
             %   %%%%%    \
             % %o%%  %    \
             %     o %    \
     %%%%%%%%% %%%   %    \
     %....  %% o  o%%%    \
     %....    o oo %%     \
     %....  %%o  o @%     \
     %%%%%%%%%  o  %%     \
             % o o  %     \
             %%% %% %     \
               %    %     \
               %%%%%%     \
    \
    \
    \
    \
    /
    #r --------------------
      /^6$/s/.*/\
    SED Sokoban - LEVEL 6\
    \
     %%%%%%  %%%          \
     %..  % %%@%%         \
     %..  %%%   %         \
     %..     oo %         \
     %..  % % o %         \
     %..%%% % o %         \
     %%%% o %o  %         \
        %  o% o %         \
        % o  o  %         \
        %  %%   %         \
        %%%%%%%%%         \
    \
    \
    \
    \
    \
    \
    /
    #r --------------------
      /^7$/s/.*/\
    SED Sokoban - LEVEL 7\
    \
            %%%%%         \
      %%%%%%%   %%        \
     %% % @%% oo %        \
     %    o      %        \
     %  o  %%%   %        \
     %%% %%%%%o%%%        \
     % o  %%% ..%         \
     % o o o ...%         \
     %    %%%...%         \
     % oo % %...%         \
     %  %%% %%%%%         \
     %%%%                 \
    \
    \
    \
    \
    \
    /
    #r --------------------
      /^8$/s/.*/\
    SED Sokoban - LEVEL 8\
    \
       %%%%               \
       %  %%%%%%%%%%%     \
       %    o   o o %     \
       % o% o %  o  %     \
       %  o o  %    %     \
     %%% o% %  %%%% %     \
     %@%o o o  %%   %     \
     %    o %o%   % %     \
     %   o    o o o %     \
     %%%%%  %%%%%%%%%     \
       %      %           \
       %      %           \
       %......%           \
       %......%           \
       %......%           \
       %%%%%%%%           \
    \
    /
    #r --------------------
      /^9$/s/.*/\
    SED Sokoban - LEVEL 9\
    \
               %%%%%%%    \
               %  ...%    \
           %%%%%  ...%    \
           %      . .%    \
           %  %%  ...%    \
           %% %%  ...%    \
          %%% %%%%%%%%    \
          % ooo %%        \
      %%%%%  o o %%%%%    \
     %%   %o o   %   %    \
     %@ o  o    o  o %    \
     %%%%%% oo o %%%%%    \
          %      %        \
          %%%%%%%%        \
    \
    \
    \
    /
    #r --------------------
      /^10$/s/.*/\
    SED Sokoban - LEVEL 10\
    \
      %%%  %%%%%%%%%%%%%  \
     %%@%%%%       %   %  \
     % oo   oo  o o ...%  \
     %  ooo%    o  %...%  \
     % o   % oo oo %...%  \
     %%%   %  o    %...%  \
     %     % o o o %...%  \
     %    %%%%%% %%%...%  \
     %% %  %  o o  %...%  \
     %  %% % oo o o%%..%  \
     % ..% %  o      %.%  \
     % ..% % ooo ooo %.%  \
     %%%%% %       % %.%  \
         % %%%%%%%%% %.%  \
         %           %.%  \
         %%%%%%%%%%%%%%%  \
    \
    /
    #r --------------------
      /^11$/s/.*/\
    SED Sokoban - LEVEL 11\
    \
               %%%%       \
          %%%% %  %       \
        %%% @%%%o %       \
       %%      o  %       \
      %%  o oo%% %%       \
      %  %o%%     %       \
      % % o oo % %%%      \
      %   o %  % o %%%%%  \
     %%%%    %  oo %   %  \
     %%%% %% o         %  \
     %.    %%%  %%%%%%%%  \
     %.. ..% %%%%         \
     %...%.%              \
     %.....%              \
     %%%%%%%              \
    \
    \
    /
    #r --------------------
      /^12$/s/.*/\
    SED Sokoban - LEVEL 12\
    \
     %%%%%%%%%%%%%%%%     \
     %              %     \
     % % %%%%%%     %     \
     % %  o o o o%  %     \
     % %   o@o   %% %%    \
     % %  o o o%%%...%    \
     % %   o o  %%...%    \
     % %%%ooo o %%...%    \
     %     % %% %%...%    \
     %%%%%   %% %%...%    \
         %%%%%     %%%    \
             %     %      \
             %%%%%%%      \
    \
    \
    \
    \
    /
    #r --------------------
      /^13$/s/.*/\
    SED Sokoban - LEVEL 13\
    \
        %%%%%%%%%         \
       %%   %%  %%%%%     \
     %%%     %  %    %%%  \
     %  o %o %  %  ... %  \
     % % o%@o%% % %.%. %  \
     %  % %o  %    . . %  \
     % o    o % % %.%. %  \
     %   %%  %%o o . . %  \
     % o %   %  %o%.%. %  \
     %% o  o   o  o... %  \
      %o %%%%%%    %%  %  \
      %  %    %%%%%%%%%%  \
      %%%%                \
    \
    \
    \
    \
    /
    #r --------------------
      /^14$/s/.*/\
    SED Sokoban - LEVEL 14\
    \
            %%%%%%%       \
      %%%%%%%     %       \
      %     % o@o %       \
      %oo %   %%%%%%%%%   \
      % %%%......%%   %   \
      %   o......%% % %   \
      % %%%......     %   \
     %%   %%%% %%% %o%%   \
     %  %o   %  o  % %    \
     %  o ooo  % o%% %    \
     %   o o %%%oo % %    \
     %%%%%     o   % %    \
         %%% %%%   % %    \
           %     %   %    \
           %%%%%%%%  %    \
                  %%%%    \
    \
    /
    #r --------------------
      /^15$/s/.*/\
    SED Sokoban - LEVEL 15\
    \
        %%%%%%%%          \
        %   %  %          \
        %  o   %          \
      %%% %o   %%%%       \
      %  o  %%o   %       \
      %  % @ o % o%       \
      %  %      o %%%%    \
      %% %%%%o%%     %    \
      % o%.....% %   %    \
      %  o..**. o% %%%    \
     %%  %.....%   %      \
     %   %%% %%%%%%%      \
     % oo  %  %           \
     %  %     %           \
     %%%%%%   %           \
          %%%%%           \
    \
    /
    #r --------------------
      /^16$/s/.*/\
    SED Sokoban - LEVEL 16\
    \
     %%%%%                \
     %   %%               \
     %    %  %%%%         \
     % o  %%%%  %         \
     %  oo o   o%         \
     %%%@ %o    %%        \
      %  %%  o o %%       \
      % o  %% %% .%       \
      %  %o%%o  %.%       \
      %%%   o..%%.%       \
       %    %.*...%       \
       % oo %.....%       \
       %  %%%%%%%%%       \
       %  %               \
       %%%%               \
    \
    \
    /
    #r --------------------
      /^17$/s/.*/\
    SED Sokoban - LEVEL 17\
    \
        %%%%%%%%%%        \
        %..  %   %        \
        %..      %        \
        %..  %  %%%%      \
       %%%%%%%  %  %%     \
       %            %     \
       %  %  %%  %  %     \
     %%%% %%  %%%% %%     \
     %  o  %%%%% %  %     \
     % % o  o  % o  %     \
     % @o  o   %   %%     \
     %%%% %% %%%%%%%      \
        %    %            \
        %%%%%%            \
    \
    \
    \
    /
    #r --------------------
      /^18$/s/.*/\
    SED Sokoban - LEVEL 18\
    \
          %%%%%%%%%%%     \
          %  .  %   %     \
          % %.    @ %     \
      %%%%% %%..% %%%%    \
     %%  % ..%%%     %%%  \
     % o %...   o %  o %  \
     %    .. %%  %% %% %  \
     %%%%o%%o% o %   % %  \
       %% %    %o oo % %  \
       %  o % %  % o%% %  \
       %               %  \
       %  %%%%%%%%%%%  %  \
       %%%%         %%%%  \
    \
    \
    \
    \
    /
    #r --------------------
      /^19$/s/.*/\
    SED Sokoban - LEVEL 19\
    \
       %%%%%%             \
       %   @%%%%          \
     %%%%% o   %          \
     %   %%    %%%%       \
     % o %  %%    %       \
     % o %  %%%%% %       \
     %% o  o    % %       \
     %% o o %%% % %       \
     %% %  o  % % %       \
     %% % %o%   % %       \
     %% %%%   % % %%%%%%  \
     %  o  %%%% % %....%  \
     %    o    o   ..%.%  \
     %%%%o  o% o   ....%  \
     %       %  %% ....%  \
     %%%%%%%%%%%%%%%%%%%  \
    \
    /
    #r --------------------
      /^20$/s/.*/\
    SED Sokoban - LEVEL 20\
    \
         %%%%%%%%%%       \
     %%%%%        %%%%    \
     %     %   o  %@ %    \
     % %%%%%%%o%%%%  %%%  \
     % %    %% %  %o ..%  \
     % % o     %  %  %.%  \
     % % o  %     %o ..%  \
     % %  %%% %%     %.%  \
     % %%%  %  %  %o ..%  \
     % %    %  %%%%  %.%  \
     % %o   o  o  %o ..%  \
     %    o % o o %  %.%  \
     %%%% o%%%    %o ..%  \
        %    oo %%%....%  \
        %      %% %%%%%%  \
        %%%%%%%%          \
    \
    /
    #r --------------------
      /^21$/s/.*/\
    SED Sokoban - LEVEL 21\
    \
     %%%%%%%%%            \
     %       %            \
     %       %%%%         \
     %% %%%% %  %         \
     %% %@%%    %         \
     % ooo o  oo%         \
     %  % %% o  %         \
     %  % %%  o %%%%      \
     %%%%  ooo o%  %      \
      %   %%   ....%      \
      % %   % %.. .%      \
      %   % % %%...%      \
      %%%%% o  %...%      \
          %%   %%%%%      \
           %%%%%          \
    \
    \
    /
    #r --------------------
      /^22$/s/.*/\
    SED Sokoban - LEVEL 22\
    \
     %%%%%%     %%%%      \
     %    %%%%%%%  %%%%%  \
     %   o%  %  o  %   %  \
     %  o  o  o % o o  %  \
     %%o o   % @% o    %  \
     %  o %%%%%%%%%%% %%  \
     % %   %.......% o%   \
     % %%  % ......%  %   \
     % %   o........o %   \
     % % o %.... ..%  %   \
     %  o o%%%%o%%%% o%   \
     % o   %%% o   o  %%  \
     % o     o o  o    %  \
     %% %%%%%% o %%%%% %  \
     %         %       %  \
     %%%%%%%%%%%%%%%%%%%  \
    \
    /
    #r --------------------
      /^23$/s/.*/\
    SED Sokoban - LEVEL 23\
    \
         %%%%%%%          \
         %  %  %%%%       \
     %%%%% o%o %  %%      \
     %.. %  %  %   %      \
     %.. % o%o %  o%%%%   \
     %.  %     %o  %  %   \
     %..   o%  % o    %   \
     %..@%  %o %o  %  %   \
     %.. % o%     o%  %   \
     %.. %  %oo%o  %  %%  \
     %.. % o%  %  o%o  %  \
     %.. %  %  %   %   %  \
     %%. %%%%  %%%%%   %  \
      %%%%  %%%%   %%%%%  \
    \
    \
    \
    /
    #r --------------------
      /^24$/s/.*/\
    SED Sokoban - LEVEL 24\
    \
     %%%%%%%%%%%%%%%      \
     %..........  .%%%%   \
     %..........oo.%  %   \
     %%%%%%%%%%%o %   %%  \
     %      o  o     o %  \
     %% %%%%   %  o %  %  \
     %      %   %%  % %%  \
     %  o%  % %%  %%% %%  \
     % o %o%%%    %%% %%  \
     %%%  o %  %  %%% %%  \
     %%%    o %% %  % %%  \
      % o  %  o  o o   %  \
      %  o  o%ooo  %   %  \
      %  %  o      %%%%%  \
      % @%%  %  %  %      \
      %%%%%%%%%%%%%%      \
    \
    /
    #r --------------------
      /^25$/s/.*/\
    SED Sokoban - LEVEL 25\
    \
     %%%%                 \
     %  %%%%%%%%%%%%%%    \
     %  %   ..%......%    \
     %  % % %%%%% ...%    \
     %%o%    ........%    \
     %   %%o%%%%%%  %%%%  \
     % o %     %%%%%%@ %  \
     %%o % o   %%%%%%  %  \
     %  o %ooo%%       %  \
     %      %    %o%o%%%  \
     % %%%% %ooooo    %   \
     % %    o     %   %   \
     % %   %%        %%%  \
     % %%%%%%o%%%%%% o %  \
     %        %    %   %  \
     %%%%%%%%%%    %%%%%  \
    \
    /
    #r --------------------
      /^26$/s/.*/\
    SED Sokoban - LEVEL 26\
    \
      %%%%%%%             \
      %  %  %%%%%         \
     %%  %  %...%%%       \
     %  o%  %...  %       \
     % o %oo ...  %       \
     %  o%  %... .%       \
     %   % o%%%%%%%%      \
     %%o       o o %      \
     %%  %  oo %   %      \
      %%%%%%  %%oo@%      \
           %      %%      \
           %%%%%%%%       \
    \
    \
    \
    \
    \
    /
    #r --------------------
      /^27$/s/.*/\
    SED Sokoban - LEVEL 27\
    \
      %%%%%%%%%%%%%%%%%   \
      %...   %    %   %%  \
     %%.....  o%% % %o %  \
     %......%  o  %    %  \
     %......%  %  % %  %  \
     %%%%%%%%% o  o o  %  \
       %     %o%%o %%o%%  \
      %%   o    % o    %  \
      %  %% %%% %  %%o %  \
      % o oo     o  o  %  \
      % o    o%%o %%%%%%  \
      %%%%%%%  @ %%       \
            %%%%%%        \
    \
    \
    \
    \
    /
    #r --------------------
      /^28$/s/.*/\
    SED Sokoban - LEVEL 28\
    \
              %%%%%       \
          %%%%%   %       \
         %% o  o  %%%%    \
     %%%%% o  o o %%.%    \
     %       oo  %%..%    \
     %  %%%%%% %%%.. %    \
     %% %  %    %... %    \
     % o   %    %... %    \
     %@ %o %% %%%%...%    \
     %%%%  o oo  %%..%    \
        %%  o o  o...%    \
         % oo  o %  .%    \
         %   o o  %%%%    \
         %%%%%%   %       \
              %%%%%       \
    \
    \
    /
    #r --------------------
      /^29$/s/.*/\
    SED Sokoban - LEVEL 29\
    \
     %%%%%                \
     %   %%               \
     % o  %%%%%%%%%       \
     %% % %       %%%%%%  \
     %% %   o%o%@  %   %  \
     %  %      o %   o %  \
     %  %%% %%%%%%%%% %%  \
     %  %% ..*..... % %%  \
     %% %% *.*..*.* % %%  \
     % o%%%%%%%%%% %%o %  \
     %  o   o  o    o  %  \
     %  %   %   %   %  %  \
     %%%%%%%%%%%%%%%%%%%  \
    \
    \
    \
    \
    /
    #r --------------------
      /^30$/s/.*/\
    SED Sokoban - LEVEL 30\
    \
            %%%%%%%%%%%   \
            %   %     %   \
     %%%%%  %     o o %   \
     %   %%%%% o%% % %%   \
     % o %%   % %% o  %   \
     % o  @oo % %%ooo %   \
     %% %%%   % %%    %   \
     %% %   %%% %%%%%o%   \
     %% %     o  %....%   \
     %  %%% %% o %....%%  \
     % o   o %   %..o. %  \
     %  %% o %  %%.... %  \
     %%%%%   %%%%%%...%%  \
         %%%%%    %%%%%   \
    \
    \
    \
    /
    #r --------------------
      /^31$/s/.*/\
    SED Sokoban - LEVEL 31\
    \
       %%%%               \
       %  %%%%%%%%%       \
      %%  %%  %   %       \
      %  o% o@o   %%%%    \
      %o  o  % o o%  %%   \
     %%  o%% %o o     %   \
     %  %  % %   ooo  %   \
     % o    o  o%% %%%%   \
     % o o %o%  %  %      \
     %%  %%%  %%%o %      \
      %  %....     %      \
      %%%%......%%%%      \
        %....%%%%         \
        %...%%            \
        %...%             \
        %%%%%             \
    \
    /
    #r --------------------
      /^32$/s/.*/\
    SED Sokoban - LEVEL 32\
    \
           %%%%           \
       %%%%%  %           \
      %%     o%           \
     %% o  %% %%%         \
     %@o o % o  %         \
     %%%% %%   o%         \
      %....%o o %         \
      %....%   o%         \
      %....  oo %%        \
      %... % o   %        \
      %%%%%%o o  %        \
           %   %%%        \
           %o %%%         \
           %  %           \
           %%%%           \
    \
    \
    /
    #r --------------------
      /^33$/s/.*/\
    SED Sokoban - LEVEL 33\
    \
      %%%%%%%%%%%         \
      %     %%  %         \
      %   o   o %         \
     %%%% %% oo %         \
     %   o %    %         \
     % ooo % %%%%         \
     %   % % o %%         \
     %  %  %  o %         \
     % o% o%    %         \
     %   ..% %%%%         \
     %%%%.. o %@%         \
     %.....% o% %         \
     %%....%  o %         \
      %%..%%    %         \
       %%%%%%%%%%         \
    \
    \
    /
    #r --------------------
      /^34$/s/.*/\
    SED Sokoban - LEVEL 34\
    \
      %%%%%%%%%           \
      %....   %%          \
      %.%.%  o %%         \
     %%....% % @%%        \
     % ....%  %  %%       \
     %     %o %%o %       \
     %% %%%  o    %       \
      %o  o o o%  %       \
      % %  o o %% %       \
      %  %%%  %%  %       \
      %    %% %% %%       \
      %  o %  o  %        \
      %%%o o   %%%        \
        %  %%%%%          \
        %%%%              \
    \
    \
    /
    #r --------------------
      /^35$/s/.*/\
    SED Sokoban - LEVEL 35\
    \
     %%%%%%%%%%%% %%%%%%  \
     %   %    % %%%....%  \
     %   oo%   @  .....%  \
     %   % %%%   % ....%  \
     %% %% %%%  %  ....%  \
      % o o     % % %%%%  \
      %  o o%%  %      %  \
     %%%% %  %%%% % %% %  \
     %  % %o   %% %    %  \
     % o  o  % %% %   %%  \
     % % o o    % %   %   \
     %  o %% %% % %%%%%   \
     % oo     oo  %       \
     %% %% %%% o  %       \
      %    % %    %       \
      %%%%%% %%%%%%       \
    \
    /
    #r --------------------
      /^36$/s/.*/\
    SED Sokoban - LEVEL 36\
    \
                 %%%%%    \
     %%%%%  %%%%%%   %    \
     %   %%%%  o o o %    \
     % o   %% %% %%  %%   \
     %   o o     o  o %   \
     %%% o  %% %%     %%  \
       % %%%%% %%%%%oo %  \
      %%o%%%%% @%%     %  \
      % o  %%%o%%% o  %%  \
      % o  %   %%%  %%%   \
      % oo o %   oo %     \
      %     %   %%  %     \
      %%%%%%%.. .%%%      \
         %.........%      \
         %.........%      \
         %%%%%%%%%%%      \
    \
    /
    #r --------------------
      /^37$/s/.*/\
    SED Sokoban - LEVEL 37\
    \
     %%%%%%%%%%%          \
     %......   %%%%%%%%%  \
     %......   %  %%   %  \
     %..%%% o    o     %  \
     %... o o %   %%   %  \
     %...%o%%%%%    %  %  \
     %%%    %   %o  %o %  \
       %  oo o o  o%%  %  \
       %  o   %o%o %%o %  \
       %%% %% %    %%  %  \
        %  o o %% %%%%%%  \
        %    o  o  %      \
        %%   % %   %      \
         %%%%%@%%%%%      \
             %%%          \
    \
    \
    /
    #r --------------------
      /^38$/s/.*/\
    SED Sokoban - LEVEL 38\
    \
           %%%%           \
     %%%%%%% @%           \
     %     o  %           \
     %   o%% o%           \
     %%o%...% %           \
      % o...  %           \
      % %. .% %%          \
      %   % %o %          \
      %o  o    %          \
      %  %%%%%%%          \
      %%%%                \
    \
    \
    \
    \
    \
    \
    /
    #r --------------------
      /^39$/s/.*/\
    SED Sokoban - LEVEL 39\
    \
                  %%%%%%  \
      %%%%%%%%%%%%%....%  \
     %%   %%     %%....%  \
     %  oo%%  o @%%....%  \
     %      oo o%  ....%  \
     %  o %% oo % % ...%  \
     %  o %% o  %  ....%  \
     %% %%%%% %%% %%.%%%  \
     %%   o  o %%   .  %  \
     % o%%%  % %%%%% %%%  \
     %   o   %       %    \
     %  o %o o o%%%  %    \
     % ooo% o   % %%%%    \
     %    %  oo %         \
     %%%%%%   %%%         \
          %%%%%           \
    \
    /
    #r --------------------
      /^40$/s/.*/\
    SED Sokoban - LEVEL 40\
    \
         %%%%%%%%%%%%     \
         %          %%    \
         %  % %oo o  %    \
         %o %o%  %% @%    \
        %% %% % o % %%    \
        %   o %o  % %     \
        %   % o   % %     \
        %% o o   %% %     \
        %  %  %%  o %     \
        %    %% oo% %     \
     %%%%%%oo   %   %     \
     %....%  %%%%%%%%     \
     %.%... %%            \
     %....   %            \
     %....   %            \
     %%%%%%%%%            \
    \
    /
    #r --------------------
      /^41$/s/.*/\
    SED Sokoban - LEVEL 41\
    \
                %%%%%     \
               %%   %%    \
              %%     %    \
             %%  oo  %    \
            %% oo  o %    \
            % o    o %    \
     %%%%   %   oo %%%%%  \
     %  %%%%%%%% %%    %  \
     %.            ooo@%  \
     %.% %%%%%%% %%   %%  \
     %.% %%%%%%%. %o o%%  \
     %........... %    %  \
     %%%%%%%%%%%%%%  o %  \
                  %%  %%  \
                   %%%%   \
    \
    \
    /
    #r --------------------
      /^42$/s/.*/\
    SED Sokoban - LEVEL 42\
    \
          %%%%%%%%        \
       %%%%      %%%%%%   \
       %    %% o o   @%   \
       % %% %%o%o o o%%   \
     %%% ......%  oo %%   \
     %   ......%  %   %   \
     % % ......%o  o  %   \
     % %o...... oo% o %   \
     %   %%% %%%o  o %%   \
     %%%  o  o  o  o %    \
       %  o  o  o  o %    \
       %%%%%%   %%%%%%    \
            %%%%%         \
    \
    \
    \
    \
    /
    #r --------------------
      /^43$/s/.*/\
    SED Sokoban - LEVEL 43\
    \
             %%%%%%%      \
         %%%%%  %  %%%%   \
         %   %   o    %   \
      %%%% %oo %% %%  %   \
     %%      % %  %% %%%  \
     %  %%% o%o  o  o  %  \
     %...    % %%  %   %  \
     %...%    @ % %%% %%  \
     %...%  %%%  o  o  %  \
     %%%%%%%% %%   %   %  \
               %%%%%%%%%  \
    \
    \
    \
    \
    \
    \
    /
    #r --------------------
      /^44$/s/.*/\
    SED Sokoban - LEVEL 44\
    \
      %%%%%               \
      %   %               \
      % % %%%%%%%         \
      %      o@%%%%%%     \
      % o %%o %%%   %     \
      % %%%% o    o %     \
      % %%%%% %  %o %%%%  \
     %%  %%%% %%o      %  \
     %  o%  o  % %% %% %  \
     %         % %...% %  \
     %%%%%%  %%%  ...  %  \
          %%%% % %...% %  \
               % %%% % %  \
               %       %  \
               %%%%%%%%%  \
    \
    \
    /
    #r --------------------
      /^45$/s/.*/\
    SED Sokoban - LEVEL 45\
    \
     %%%%% %%%%           \
     %...% %  %%%%        \
     %...%%%  o  %        \
     %....%% o  o%%%      \
     %%....%%   o  %      \
     %%%... %% o o %      \
     % %%    %  o  %      \
     %  %% % %%% %%%%     \
     % o % %o  o    %     \
     %  o @ o    o  %     \
     %   % o oo o %%%     \
     %  %%%%%%  %%%       \
     % %%    %%%%         \
     %%%                  \
    \
    \
    \
    /
    #r --------------------
      /^46$/s/.*/\
    SED Sokoban - LEVEL 46\
    \
     %%%%%%%%%%           \
     %        %%%%        \
     % %%%%%% %  %%       \
     % % o o o  o %       \
     %       %o   %       \
     %%%o  oo%  %%%       \
       %  %% % o%%        \
       %%o%   o @%        \
        %  o o %%%        \
        % %   o  %        \
        % %%   % %        \
       %%  %%%%% %        \
       %         %        \
       %.......%%%        \
       %.......%          \
       %%%%%%%%%          \
    \
    /
    #r --------------------
      /^47$/s/.*/\
    SED Sokoban - LEVEL 47\
    \
              %%%%        \
      %%%%%%%%%  %%       \
     %%  o      o %%%%%   \
     %   %% %%   %%...%   \
     % %oo o oo%o%%...%   \
     % %   @   %   ...%   \
     %  o% %%%oo   ...%   \
     % o  oo  o %%....%   \
     %%%o       %%%%%%%   \
       %  %%%%%%%         \
       %%%%               \
    \
    \
    \
    \
    \
    \
    /
    #r --------------------
      /^48$/s/.*/\
    SED Sokoban - LEVEL 48\
    \
       %%%%%%%%%          \
       %*.*%*.*%          \
       %.*.*.*.%          \
       %*.*.*.*%          \
       %.*.*.*.%          \
       %*.*.*.*%          \
       %%%   %%%          \
         %   %            \
     %%%%%% %%%%%%        \
     %           %        \
     % o o o o o %        \
     %% o o o o %%        \
      %o o o o o%         \
      %   o@o   %         \
      %  %%%%%  %         \
      %%%%   %%%%         \
    \
    /
    #r --------------------
      /^49$/s/.*/\
    SED Sokoban - LEVEL 49\
    \
            %%%%          \
            %  %%         \
            %   %%        \
            % oo %%       \
          %%%o  o %%      \
       %%%%    o   %      \
     %%%  % %%%%%  %      \
     %    % %....o %      \
     % %   o ....% %      \
     %  o % %.*..% %      \
     %%%  %%%% %%% %      \
       %%%% @o  %%o%%     \
          %%% o     %     \
            %  %%   %     \
            %%%%%%%%%     \
    \
    \
    /
    #r --------------------
      /^50$/s/.*/\
    SED Sokoban - LEVEL 50\
    \
           %%%%%%%%%%%%   \
          %%..    %   %   \
         %%..* o    o %   \
        %%..*.% % % o%%   \
        %..*.% % % o  %   \
     %%%%...%  %    % %   \
     %  %% %          %   \
     % @o o %%%  %   %%   \
     % o   o   % %   %    \
     %%%oo   % % % % %    \
       %   o   % % %%%%%  \
       % o% %%%%%      %  \
       %o   %   %    % %  \
       %  %%%   %%     %  \
       %  %      %    %%  \
       %%%%      %%%%%%   \
    \
    /
    #r --------------------
      /^51$/s/.*/\
    SED Sokoban - LEVEL 51\
    \
      %%%%%%%%%           \
      %       %           \
      % o oo o%           \
     %%% %  o %           \
     %.%   oo %%          \
     %.%%%   o %          \
     %.%. o %% %%%%       \
     %...  o%% o  %       \
     %...o   o    %       \
     %..%%%o%%% %@%       \
     %..% %     %%%       \
     %%%% %%%%%%%         \
    \
    \
    \
    \
    \
    /
    #r --------------------
      /^52$/s/.*/\
    SED Sokoban - LEVEL 52\
    \
                %%%%%%%%  \
                %......%  \
        %%%%    %......%  \
        %  %%%%%%%%%...%  \
        % o   o    %...%  \
        %  % % % % %   %  \
     %%%%% % % %@% %   %  \
     %   % %%% %%% %% %%  \
     %    o % o o o % %   \
     % ooo  o   %     %   \
     %   % %%%o%%%o%% %   \
     %%% %  o   %     %   \
      %% o  % o o o %%%   \
      %  % %%% %%% %%     \
      % o          %      \
      %  %%%%%%%%%%%      \
      %%%%                \
    /
    #r --------------------
      /^53$/s/.*/\
    SED Sokoban - LEVEL 53\
    \
     %%%%%%%%%%%%%%%%%%   \
     %                %%  \
     % o%   o %%  o    %  \
     %    o%%%    % oo %  \
     %.%%%     o o %%  %% \
     %...%  %  %    %o  % \
     %..%%oo%%%% o  %   % \
     %...%      o %%  %%% \
     %...o  %%%  %    % % \
     %%..  o%  %%   %%@ % \
      %%.%              % \
       %%%%%%%%%%%%%%%%%% \
    \
    \
    \
    \
    \
    /
    #r --------------------
      /^54$/s/.*/\
    SED Sokoban - LEVEL 54\
    \
     %%%%%%%%%%%%%%%%%%%% \
     %   %    %   %   %@% \
     % o      o   o   % % \
     %% %%%..%% %%%     % \
     %   %....%o%  o%%% % \
     % o %....%  o  o o % \
     %   %....% % % o o % \
     %   %%..%%   %o%   % \
     %%o%%    %%  %  %o%% \
     %   o  o     %  %  % \
     %   %    %   %     % \
     %%%%%%%%%%%%%%%%%%%% \
    \
    \
    \
    \
    \
    /
    #r --------------------
      /^55$/s/.*/\
    SED Sokoban - LEVEL 55\
    \
     %%%%%%%%%%%%%%%%%%%% \
     %    @%%      %   %% \
     %    %%    o    o %% \
     %  %%%....% % %  %%% \
     %   %....% % % o   % \
     %%% %...%  %       % \
     %%  %%.%     o   o % \
     %%  o o %%%  % % %%% \
     %% o       % % o   % \
     %%%% o  o% % % % o % \
     %%%%         % %  %% \
     %%%%%%%%%%%%%%%%%%%% \
    \
    \
    \
    \
    \
    /
    #r --------------------
      /^56$/s/.*/\
    SED Sokoban - LEVEL 56\
    \
     %%%%%%%%%%%%%%%%%%%% \
     %  %  %%    %   @%%% \
     %%    o    % o%%%  % \
     %%o% o %%o% o o    % \
     %   o%    o      %%% \
     % %%   o %%%  %....% \
     % % o% % % % %....%% \
     %    o o %  %....%%% \
     %%o %%%  o %....%%%% \
     %  % o        %%%%%% \
     %      % %    %%%%%% \
     %%%%%%%%%%%%%%%%%%%% \
    \
    \
    \
    \
    \
    /
    #r --------------------
      /^57$/s/.*/\
    SED Sokoban - LEVEL 57\
    \
     %%%%%%%%%%%%%%%%%%%% \
     %@     %%%   %  %  % \
     % % %  %  o  o     % \
     %%%%%     % o o%o% % \
     %.%..%    %%o o    % \
     %.....    o   %   %% \
     %.....    %%%o%%o%%% \
     %.%..%    o    %   % \
     %%%%%     %  %o  o % \
     %%%%%  %  o    o o % \
     %%%%%  %  %  %  %  % \
     %%%%%%%%%%%%%%%%%%%% \
    \
    \
    \
    \
    \
    /
    #r --------------------
      /^58$/s/.*/\
    SED Sokoban - LEVEL 58\
    \
     %%%%%%%%%%%%%%%%%%%% \
     %%...   %% %    %  % \
     %....         o %% % \
     %....% % %o%%%o    % \
     %...%    %       % % \
     %%.%  %o %     o%% % \
     %  %  % o o %%%  o % \
     %     o  o %  % %% % \
     %% % %% %oo% o%  % % \
     %  %   o o %      %% \
     %    %     %  %   @% \
     %%%%%%%%%%%%%%%%%%%% \
    \
    \
    \
    \
    \
    /
    #r --------------------
      /^59$/s/.*/\
    SED Sokoban - LEVEL 59\
    \
     %%%%%%%%%%%%%%%%%%%% \
     %   %  %@% %%  %%%%% \
     % % %  o    o  %%%%% \
     % %    %%%%%% o  %%% \
     %   %  %....%  oo  % \
     %%o%%o%%....%      % \
     %      %....%%o%%o%% \
     %  oo  %....%      % \
     % o  o  %  %  %%%  % \
     %%%%%  o   o    o  % \
     %%%%% %    %  %   %% \
     %%%%%%%%%%%%%%%%%%%% \
    \
    \
    \
    \
    \
    /
    #r --------------------
      /^60$/s/.*/\
    SED Sokoban - LEVEL 60\
    \
     %%%%%%%%%%%%%%%%%%%% \
     % %     %          % \
     %       o  %% %%% %% \
     %%%%%  %%   o  o   % \
     %%..%%  % % o % %  % \
     %....  o     %%o% %% \
     %....  o%%%%%   %o%% \
     %%..% %  %   %  o  % \
     %%%.% %  o   o  % @% \
     %%  o  o %   %  %%%% \
     %%       %%%%%%%%%%% \
     %%%%%%%%%%%%%%%%%%%% \
    \
    \
    \
    \
    \
    /
    #r --------------------
      /^61$/s/.*/\
    SED Sokoban - LEVEL 61\
    \
     %%%%%%%%%%%%%%%%%%%% \
     %     %%%..%%%     % \
     % oo  %%%..%%%  o@ % \
     %  % %%......%  o  % \
     %     %......%  o  % \
     %%%%  %%%..%%%%%%o % \
     %   ooo %..%    %  % \
     % o%   o  o  oo %o % \
     %  %  %% o  %%  %  % \
     % o    o %% o    o % \
     %  %  %%    %%  %  % \
     %%%%%%%%%%%%%%%%%%%% \
    \
    \
    \
    \
    \
    /
    #r --------------------
      /^62$/s/.*/\
    SED Sokoban - LEVEL 62\
    \
     %%%%%%%%%%%%%%%%%%%% \
     %    %  % %  %  %  % \
     % @% % %% o   o   %% \
     %%%% %    %  % o   % \
     %    % %% %o %% %% % \
     %      o   o   o   % \
     %..%%%oo%% o%%o %% % \
     %..%.%  % o   o %  % \
     %....% oo   %%o %%%% \
     %....%  %%%%%      % \
     %...%%%        %%  % \
     %%%%%%%%%%%%%%%%%%%% \
    \
    \
    \
    \
    \
    /
    #r --------------------
      /^63$/s/.*/\
    SED Sokoban - LEVEL 63\
    \
     %%%%%%%%%%%%%%%%%%%% \
     %....%       %  %  % \
     %....% % o  o      % \
     %.... %%  o% % o%o % \
     %...%   o   o%  o  % \
     %..%%%%  % o   oo  % \
     %      %%%% %%%% %%% \
     %        %   %     % \
     % %%   %   o % o o % \
     % %%    o %% o  o  % \
     %     @%     %   % % \
     %%%%%%%%%%%%%%%%%%%% \
    \
    \
    \
    \
    \
    /
    #r --------------------
      /^64$/s/.*/\
    SED Sokoban - LEVEL 64\
    \
     %%%%%%%%%%%%%%%%%%%% \
     %....%%%           % \
     %....%%%%% %  %o% %% \
     %....%%%   %o  o   % \
     %....%%%    o  %oo%% \
     %%  %%%% o%  %o o  % \
     %%  %%%%  o  o  %  % \
     %@  %%%%o%%%o%% o  % \
     %%        %  %  o  % \
     %%   %%%  %  o  %%%% \
     %%%%%%%%  %  %     % \
     %%%%%%%%%%%%%%%%%%%% \
    \
    \
    \
    \
    \
    /
    #r --------------------
      /^65$/s/.*/\
    SED Sokoban - LEVEL 65\
    \
     %%%%%%%%%%%%%%%%%%%% \
     %     %     @%...%%% \
     %     %      %%...%% \
     % % % %%o%% %% ....% \
     %   o %   ooo  ....% \
     %%%o%%% oo  %%% %%.% \
     %     o  %    % %%%% \
     %  o  %  %%%  % %  % \
     %% %o%%    o  oo   % \
     %   o %%   %  % %  % \
     %     %    %  %    % \
     %%%%%%%%%%%%%%%%%%%% \
    \
    \
    \
    \
    \
    /
    #r --------------------
      /^66$/s/.*/\
    SED Sokoban - LEVEL 66\
    \
     %%%%%%%%%%%%%%%%%%%% \
     %     %  %...%@    % \
     % %       ....%    % \
     %  o  %   %....%   % \
     % %%o%%%% %%....%  % \
     % o   o  %  %...%  % \
     % oo %   %   % oo  % \
     %%%  ooo%   oo  o  % \
     % o  %  %    % o%  % \
     %   o%  %       o  % \
     %  %    %    %  %  % \
     %%%%%%%%%%%%%%%%%%%% \
    \
    \
    \
    \
    \
    /
    #r --------------------
      /^67$/s/.*/\
    SED Sokoban - LEVEL 67\
    \
     %%%%%%%%%%%%%%%%%%%% \
     %%%%%@%%%.%%...%%  % \
     %%%%%o  ..%...%    % \
     %%%%    ......%  o % \
     %%%  o %.....%% % %% \
     %%  oo% %%%%%  o o % \
     %% o% o    %%  oo  % \
     %%  %  %    % o  o % \
     %%   oo %%% %o%%   % \
     %% o%      o o  o %% \
     %%%    %    %    %%% \
     %%%%%%%%%%%%%%%%%%%% \
    \
    \
    \
    \
    \
    /
    #r --------------------
      /^68$/s/.*/\
    SED Sokoban - LEVEL 68\
    \
     %%%%%%%%%%%%%%%%%%%% \
     %@     %   %       % \
     %% %%% %%  %%%% % %% \
     %    % %  oo       % \
     %  % % % o % o %% %% \
     %     o %  %oo %   % \
     %  %%%  %      %% %% \
     %..%.% o %  o %    % \
     %..%.%  o % %% oo  % \
     %....%%   oo  o  % % \
     %.....%%        %  % \
     %%%%%%%%%%%%%%%%%%%% \
    \
    \
    \
    \
    \
    /
    #r --------------------
      /^69$/s/.*/\
    SED Sokoban - LEVEL 69\
    \
     %%%%%%%%%%%%%%%%%%%% \
     %  %      %   %   %% \
     % o% o o %%...o  o % \
     %  o  % %%....% o  % \
     % %% o %%....%   o % \
     % o    %....%% o   % \
     % o%%  %...%       % \
     %   ooo%%o%%  %%% %% \
     % % %  %   %  %    % \
     % o %  o  %%       % \
     %    %    %@       % \
     %%%%%%%%%%%%%%%%%%%% \
    \
    \
    \
    \
    \
    /
    #r --------------------
      /^70$/s/.*/\
    SED Sokoban - LEVEL 70\
    \
     %%%%%%%%%%%%%%%%%%%% \
     %  %  % %    %  %  % \
     %   o      o o     % \
     %% %  %o%%%o%%  %% % \
     %   o     o  %  o  % \
     % %%%o%%o%   % o   % \
     % %   o o  %%%%%% o% \
     % o  oo o  %@%.%...% \
     % %     %  % %.%...% \
     % %%%%%%%%%% %.....% \
     %            %.....% \
     %%%%%%%%%%%%%%%%%%%% \
    \
    \
    \
    \
    \
    /
    #r --------------------
      /^71$/s/.*/\
    SED Sokoban - LEVEL 71\
    \
     %%%%%%%%%%%%%%%%%%%% \
     %  %     %  %%    %% \
     % o%   o %     %%  % \
     % o  o  %..%     o % \
     % o o  %....%   % %% \
     % o%  %......%%% o % \
     %   %  %....%  %o  % \
     % o  %%%%..%   %   % \
     %% o   %% % % o  o%% \
     %%% o    o%@o o%   % \
     %%%%   %       %   % \
     %%%%%%%%%%%%%%%%%%%% \
    \
    \
    \
    \
    \
    /
    #r --------------------
      /^72$/s/.*/\
    SED Sokoban - LEVEL 72\
    \
     %%%%%%%%%%%%%%%%%%%% \
     %      ....%    %%%% \
     %      ....        % \
     % % %%%%%%%%%%     % \
     % %o   %      %%%..% \
     %  o   %oo%%%   %..% \
     % o %%% o   o   %..% \
     % o %   o o %  %%..% \
     %  %  oo % o %%   %% \
     %@%% o%  o  o     %% \
     %%       %%   %  %%% \
     %%%%%%%%%%%%%%%%%%%% \
    \
    \
    \
    \
    \
    /
    #r --------------------
      /^73$/s/.*/\
    SED Sokoban - LEVEL 73\
    \
     %%%%%%%%%%%%%%%%%%%% \
     %        %   %@ %  % \
     % oo  %oo% % %  %% % \
     %  % o o %oo %     % \
     %% %  %  % % %  %  % \
     %   %%       %     % \
     %   % o %   %   %  % \
     % o %o %   %  o %..% \
     %%o %  %%%%    %...% \
     %  o          %....% \
     %   %  %     %.....% \
     %%%%%%%%%%%%%%%%%%%% \
    \
    \
    \
    \
    \
    /
    #r --------------------
      /^74$/s/.*/\
    SED Sokoban - LEVEL 74\
    \
     %%%%%%%%%%%%%%%%%%%% \
     %     %   %%%%%    % \
     %% o  %   %%%%  o  % \
     %%%% oo   %..%  %  % \
     %  o  o  %%..%%%% %% \
     % o   %%%....   oo % \
     %  %o%   ....% % o % \
     % %  % o ..%%%o%   % \
     % %   o %..%   %%  % \
     %   o%  %%%%   % o%% \
     % %  %    @%      %% \
     %%%%%%%%%%%%%%%%%%%% \
    \
    \
    \
    \
    \
    /
    #r --------------------
      /^75$/s/.*/\
    SED Sokoban - LEVEL 75\
    \
     %%%%%%%%%%%%%%%%%%%% \
     %   %   %    %   %@% \
     %   o  o     % o % % \
     %%o% o%%% %    oo% % \
     %  %  %.%%%  %o o  % \
     %  %o%....%  % %%% % \
     % o  %.....%%    % % \
     %%o  %.%....%oo o  % \
     %  %%%%%%..%% %  % % \
     %  o         o %%% % \
     %   %   %        % % \
     %%%%%%%%%%%%%%%%%%%% \
    \
    \
    \
    \
    \
    /
    #r --------------------
      /^76$/s/.*/\
    SED Sokoban - LEVEL 76\
    \
     %%%%%%%%%%%%%%%%%%%% \
     % % % %   %@%%   % % \
     %             o    % \
     %  %%o% %%%%% o % %% \
     %%    %%.....%  %  % \
     %%o%%o%.....%%%o%o % \
     %   % %%.....%  % %% \
     %  o    %%..%%  %  % \
     % o %   o   o  ooo % \
     %% o  o% %  %  o   % \
     %   %%   %  %      % \
     %%%%%%%%%%%%%%%%%%%% \
    \
    \
    \
    \
    \
    /
    #r --------------------
      /^77$/s/.*/\
    SED Sokoban - LEVEL 77\
    \
     %%%%%%%%%%%%%%%%%%%% \
     %    %%   %    %   % \
     %  o  o     %% o   % \
     %% %%%%%  .%%%%%% %% \
      % %%  %%....%%%% %% \
     %% %%o %%%..%%     % \
     %      %... .% o o % \
     % o %% %% . %%% %%%% \
     % % o    %.%% % %    \
     % o o %   .%%%% %%   \
     % %  %% % %%  %  %%  \
     %%%%%%%  o%%o   o %  \
           %%      o %@%  \
            %  %% %%%%%%  \
            %%%%%%%       \
    \
    \
    /
    #r --------------------
      /^78$/s/.*/\
    SED Sokoban - LEVEL 78\
    \
            %%%%%%%%%%%   \
            %         %   \
            %    o o  %   \
     %%%%%% % o %%%%% %   \
     %    %%%%% o  %%o%   \
     %       o o      %   \
     %          %% %% %   \
     %    %%@%%%%% %% %   \
     %    %%%%   % %% %%  \
     %....%      % o   %  \
     %....%      %     %  \
     %%%%%%      %%%%%%%  \
    \
    \
    \
    \
    \
    /
    #r --------------------
      /^79$/s/.*/\
    SED Sokoban - LEVEL 79\
    \
     %%%%%%%%%%%%%        \
     %           %        \
     % %%% oo    %        \
     %   % o  o  %        \
     %  o%%%%o%%%%%%      \
     % o %%        %%%%%  \
     %  oo o        ...%  \
     %%% %% oo%     ...%  \
       % %%   %     ...%  \
       %      %     ...%  \
       %%%@%%%%%%%%%%%%%  \
         %%%              \
    \
    \
    \
    \
    \
    /
    #r --------------------
      /^80$/s/.*/\
    SED Sokoban - LEVEL 80\
    \
       %%%%%%%%%%%%%%%%%  \
     %%%@%%         ...%  \
     %    %         ...%  \
     % o  %         ...%  \
     % oo %         ...%  \
     %% o %%%o%%%%%%%%%%  \
      % %%%  o %          \
     %%   o  o %          \
     %  o %  o %          \
     % o  %    %          \
     %  o %    %          \
     %    %    %          \
     %%%%%%%%%%%          \
    \
    \
    \
    \
    /
    #r --------------------
      /^81$/s/.*/\
    SED Sokoban - LEVEL 81\
    \
                   %%%%%  \
          %%%%%%%%%%   %  \
          %        %   %  \
          %  o o    oo %  \
          % %%%%% %% o %  \
          %oo   %o%% o %  \
          % %%% % %%o  %  \
     %%%%%% %%% o o    %  \
     %....        %%   %  \
     %....        %%%%%%  \
     %....        %       \
     %%%%%%%%%%%@%%       \
               %%%        \
    \
    \
    \
    \
    /
    #r --------------------
      /^82$/s/.*/\
    SED Sokoban - LEVEL 82\
    \
         %%%%%%           \
      %%%%    %           \
      %    %% %           \
      % o     %           \
     %%% %%%% %%%%%%%%    \
     %  o   o %%  ...%    \
     %   oo oo    ...%    \
     %    o  o%%  ...%    \
     %%@%% %% %%  ...%    \
      %%%  o  %%%%%%%%    \
      %   oo  %           \
      %    %  %           \
      %%%%%%%%%           \
    \
    \
    \
    \
    /
    #r --------------------
      /^83$/s/.*/\
    SED Sokoban - LEVEL 83\
    \
     %%%%%%% %%%%%%%%%    \
     %     % %   %%  %    \
     % %%% % %   o   %    \
     % % o %%%   o   %    \
     %   oo      %%o %    \
     %    %%%%   %%  %    \
     %@%%%%%%%%%%%% %%    \
     %%%..    %%%%%o %    \
       %..    %%%%   %    \
       %..       oo  %    \
       %..    %%%% o %    \
       %..    %  %   %    \
       %%%%%%%%  %%%%%    \
    \
    \
    \
    \
    /
    #r --------------------
      /^84$/s/.*/\
    SED Sokoban - LEVEL 84\
    \
     %%%%%%%              \
     %     %%%%%%%%%%     \
     %     %    %  %%     \
     % o   %   o o  %     \
     %  o  %  o %%  %     \
     % oo  %%o o    %     \
     %% %  %% %%%%%%%     \
     %% %  %%    ...%     \
     %  %o       ...%     \
     %   oo      ...%     \
     %     %%@%  ...%     \
     %%%%%%%%%%%%%%%%     \
    \
    \
    \
    \
    \
    /
    #r --------------------
      /^85$/s/.*/\
    SED Sokoban - LEVEL 85\
    \
     %%%%%%%%%%%%         \
     %      %   %%        \
     % o  o   %  %%%%%%   \
     %%%%  %%%%%      %   \
      %..  %     %%%% %   \
      %.%%%%  %%%%    %   \
      %....    %  o %%%%  \
      % ...%   % ooo%  %% \
     %%%.%%%% %%  o@o   % \
     %     %%%%% o %    % \
     % %.% o      o%%%o % \
     % %.%%%%%%%%  %  o % \
     % %..        %%  o % \
     % % %%%%%%% o % %  % \
     %   %     %       %% \
     %%%%%     %%%%%%%%%% \
    \
    /
    #r --------------------
      /^86$/s/.*/\
    SED Sokoban - LEVEL 86\
    \
     %%%%%%%%%%%%%%%%     \
     %       %@ %   %     \
     % % % % % o  oo%     \
     % %...% %ooo   %     \
     %  ...% % o  oo%%    \
     % %%.%% % %%    %    \
     % %...     o    %    \
     % %% %%%  %%%%%%%    \
     %    % %%%%          \
     %%%%%%               \
    \
    \
    \
    \
    \
    \
    \
    /
    #r --------------------
      /^87$/s/.*/\
    SED Sokoban - LEVEL 87\
    \
         %%%%%            \
      %%%%   %% %%%%%     \
      %  o    %%%   %     \
      % o@o o    o  %     \
      % %o%%%%%%%% %%     \
      % %  o  %     %     \
      % % o o % %   %     \
     %% %  o% % %%%%%     \
     %  %%    %     %     \
     %    o % %%%   %     \
     %%%%% %%  %....%     \
     %    o     ....%     \
     %         %....%     \
     %%%%%%%%%%%%%%%%     \
    \
    \
    \
    /
    #r --------------------
      /^88$/s/.*/\
    SED Sokoban - LEVEL 88\
    \
     %%%%%%%%%%%%%        \
     %........%%%%        \
     %...%%%% %  %%%%%    \
     %...%  %%%    o %    \
     %...oo     o o  %    \
     %  .%  o o% o  %%    \
     %...% %o%   o  %     \
     %.% % o   o    %     \
     %.  %o%%%o%%%%o%     \
     %%  %   o o    %     \
      %  %  o@o  %  %     \
      %  % %%%% o  o%     \
      %  %    %%%   %     \
      %  % oo % %%%%%     \
      %  %    %           \
      %%%%%%%%%           \
    \
    /
    #r --------------------
      /^89$/s/.*/\
    SED Sokoban - LEVEL 89\
    \
      %%%%%%%%%%%%%%%%%%  \
      %   o       ...%.%% \
      %       %%%%..... % \
      % %%%%%%%  %..... % \
      % %    o o %%....%% \
      % %  o % % %%%...%  \
      % % o@o o  %%%%% %  \
     %% %  o  o oo   o %  \
     %  %o% o%   % o%% %  \
     % %%    %% %% o % %  \
     % % o% o o  %     %  \
     % %         %%%%%%%  \
     % %%%%%%%%o%%   %    \
     %        %  o   %    \
     %%%%%%%%    %%%%%    \
            %%%  %        \
              %%%%        \
    /
    #r --------------------
      /^90$/s/.*/\
    SED Sokoban - LEVEL 90\
    \
     %%%%%%%%%%%%%%%%%%%% \
     %..%    %          % \
     %.o  o  %oo  o%% o%% \
     %.o%  %%%  %% %%   % \
     %  % o %  oo   o   % \
     % %%%  % %  %o  %%%% \
     %  %% % o   %@ %   % \
     % o    o  %%.%%  o % \
     %  % o% o% o     %%% \
     %  %  %  %   %%%   % \
     %  %%%%%%%% %      % \
     %           %  %.%.% \
     %%o%%%%%%%%o%   ...% \
     %    .*  %    %%.%.% \
     % .*...*   o  .....% \
     %%%%%%%%%%%%%%%%%%%% \
                          \
    /


    /SED Soko/!{s/.*/there is no '&' level!/p;q;}
    x
    }


    #r put cursor back jump terminal command on map
    3{x;s/^/[22F/;x;}




    #r here the party begins
    :ini


    #r refresh screen command
    /^p\|^ /{x;bx;}


    #r supporting arrow key also
    s/\[A/k/g
    s/\[B/j/g
    s/\[C/l/g
    s/\[D/h/g


    #r wipe trash
    s/[^kjlh]//g




    #r -------------[ LEFT ]--------------------------


    /^h/{


    #r del current move and save others
      s///;x


    #r clear path
      / @/{s//@ /;bx;}
    #r push load
      / o@/{s//o@ /;bx;}


    #r enter overdot
      /\.@/{s//! /;bx;}
    #r continue overdot
      /\.!/{s//!./;bx;}
    #r out overdot
      / !/{s//@./;bx;}


    #r enter load overdot
      /\.o@/{s//O@ /;bx;}
    #r enter overdot with load
      /\.O@/{s//O! /;bx;}
    #r continue overdot with load
      /\.O!/{s//O!./;bx;}
    #r out load overdot / enter overdot
      / O@/{s//o! /;bx;}
    #r out load overdot / continue overdot
      / O!/{s//o!./;bx;}
    #r out overdot with load
      / o!/{s//o@./;bx;}
    #r out overdot with load / enter overdot
      /\.o!/{s//O@./;bx;}


    #r can't pass
      bx


    }




    #r -------------[ RIGHT ]-------------------------


    /^l/{


    #r del current move and save others
      s///;x


    #r clear path
      /@ /{s// @/;bx;}
    #r push load
      /@o /{s// @o/;bx;}


    #r enter overdot
      /@\./{s// !/;bx;}
    #r continue overdot
      /!\./{s//.!/;bx;}
    #r out overdot
      /! /{s//.@/;bx;}


    #r enter load overdot
      /@o\./{s// @O/;bx;}
    #r enter overdot with load
      /@O\./{s// !O/;bx;}
    #r continue overdot with load
      /!O\./{s//.!O/;bx;}
    #r out load overdot / enter overdot
      /@O /{s// !o/;bx;}
    #r out load overdot / continue overdot
      /!O /{s//.!o/;bx;}
    #r out overdot with load
      /!o /{s//.@o/;bx;}
    #r out overdot with load / enter overdot
      /!o\./{s//.@O/;bx;}


    #r can't pass
      bx
    }




    #r -------------[ DOWN ]--------------------------


    /^j/{


    #r del current move and save others
      s///;x


    #r clear path
      /@\(.\{22\}\) /{s// \1@/;bx;}
    #r push load
      /@\(.\{22\}\)o\(.\{22\}\) /{s// \1@\2o/;bx;}


    #r enter overdot
      /@\(.\{22\}\)\./{s// \1!/;bx;}
    #r continue overdot
      /!\(.\{22\}\)\./{s//.\1!/;bx;}
    #r out overdot
      /!\(.\{22\}\) /{s//.\1@/;bx;}


    #r enter load overdot
      /@\(.\{22\}\)o\(.\{22\}\)\./{s// \1@\2O/;bx;}
    #r enter overdot with load
      /@\(.\{22\}\)O\(.\{22\}\)\./{s// \1!\2O/;bx;}
    #r continue overdot with load
      /!\(.\{22\}\)O\(.\{22\}\)\./{s//.\1!\2O/;bx;}
    #r out load overdot / enter overdot
      /@\(.\{22\}\)O\(.\{22\}\) /{s// \1!\2o/;bx;}
    #r out load overdot / continue overdot
      /!\(.\{22\}\)O\(.\{22\}\) /{s//.\1!\2o/;bx;}
    #r out overdot with load
      /!\(.\{22\}\)o\(.\{22\}\) /{s//.\1@\2o/;bx;}
    #r out overdot with load / enter overdot
      /!\(.\{22\}\)o\(.\{22\}\)\./{s//.\1@\2O/;bx;}


    #r target not free
      bx
    }




    #r ---------------[ UP ]--------------------------


    /^k/{


    #r del current move and save others
      s///;x


    #r clear path
      / \(.\{22\}\)@/{s//@\1 /;bx;}
    #r push load
      / \(.\{22\}\)o\(.\{22\}\)@/{s//o\1@\2 /;bx;}


    #r enter overdot
      /\.\(.\{22\}\)@/{s//!\1 /;bx;}
    #r continue overdot
      /\.\(.\{22\}\)!/{s//!\1./;bx;}
    #r out overdot
      / \(.\{22\}\)!/{s//@\1./;bx;}


    #r enter load overdot
      /\.\(.\{22\}\)o\(.\{22\}\)@/{s//O\1@\2 /;bx;}
    #r enter overdot with load
      /\.\(.\{22\}\)O\(.\{22\}\)@/{s//O\1!\2 /;bx;}
    #r continue overdot with load
      /\.\(.\{22\}\)O\(.\{22\}\)!/{s//O\1!\2./;bx;}
    #r out load overdot / enter overdot
      / \(.\{22\}\)O\(.\{22\}\)@/{s//o\1!\2 /;bx;}
    #r out load overdot / continue overdot
      / \(.\{22\}\)O\(.\{22\}\)!/{s//o\1!\2./;bx;}
    #r out overdot with load
      / \(.\{22\}\)o\(.\{22\}\)!/{s//o\1@\2./;bx;}
    #r out overdot with load / enter overdot
      /\.\(.\{22\}\)o\(.\{22\}\)!/{s//O\1@\2./;bx;}


    #r target not free
      bx
    }


    #r wrong command, do nothing
    x




    #r ----------------[ THE END ]-----------------
    :x


    #r adding color codes
    #s/%/[43;33m&[m/g
    s/%/[46;36m&[m/g
    s/[!@]/[33;1m&[m/g
    s/O/[37;1m&[m/g
    s/\./[31;1m&[m/g


    #r uncomment this line if you DON'T want colorized output (why not?)
    ### s/\[[0-9;]*m//g


    #r update screen
    p


    #r removing color codes from maze
    s/\[[0-9;]*m//g


    #r no more load ('o'), level finished!
    #rTODO fanciest message,colored
    /[ @!%.]o\|o[ @!%.]/!{s/.*/(( VICTORY! ))          /p;q;}


    #r save current position on hold space
    x


    #r skipping loop
    2d


    #r nice loop for accumulated moves
    /./{p;bini;}
    展开全文
  • 主要为大家详细介绍了shell脚本实现猜数游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 主要为大家详细介绍了Shell脚本实现猜数字游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • shell脚本

    2019-03-23 16:38:42
    如被大家熟知的python脚本、JavaScript脚本和游戏领域经常使用的lua脚本以及今天要说的linux下的shell脚本,它们的共同点就是不需要编译而可以被直接解释并且执行的一种程序。脚本语言也因此被称为动态语言。 在...
  • 概述今天主要分享下怎么用shell脚本来实现俄罗斯方块这个小游戏。testris.shtetris是整个游戏的核心,大概500多行,所以这里就不贴脚本了。keytest.shkeytest这个脚本主要是为了获取键盘#!/bin/bash GetKey() { aKey...
  • 主要介绍了shell脚本编写的俄罗斯方块游戏代码,非常强大,需要的朋友可以参考下
  • http://bbs.chinaunix.net/thread-3580033-1-1.html  shell游戏收集贴 #!/bin/bash # Tetris Game #APP declaration APP_NAME="${0##*[\\/]}" APP_VERSION="1.0" ...
  • 主要介绍了Shell脚本实现的猜数字小游戏,本文的猜数字规则相对一般规则的猜数字可能难度要大不少,需要的朋友可以参考下
  • 幸运数字 一个基于shell脚本游戏,我自己做了,希望您能玩得开心:)只需运行bash luckynum.sh或运行chmod a + x luckynum.sh,然后运行./luckynum.sh
  • 亲自测试了一个大牛写的shell脚本,感兴趣可以看看,效果如下: 代码如下: 1 #!/bin/bash 2 3 # Tetris Game 4 # 10.21.2003 xhchen<[email]xhchen@winbond.com.tw[/email]> 5 6 #APP ...
  • shell脚本猜数字游戏

    2019-12-28 08:48:52
    #!/bin/bash while true # 运用死循环执行此脚本 do a=`expr $RANDOM % 10` # 定义猜10个数中的数字 b=3 # 定义输入的次数 for i in $(seq 3) # for循环三次 do ...
  • shell脚本实现猜数字小游戏创建脚本编写脚本运行脚本 创建脚本 # vim /root/caishuzi.sh 编写脚本 #/bin/bash sj_num=$(echo `expr $RANDOM % 100`) count=0 while : do read -p "请输入一个随机数:" num let ...
  • 原本书上这个例子是教调试脚本的,它故意给出的脚本中有几个错误,教我们认识系统提示的错误,并修改运行。但比较难写出来,所以把修改好了的脚本放上来,这个脚本比较有趣味的

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 423
精华内容 169
关键字:

shell脚本游戏