Board logo

标题: [转载代码] Linux Shell版俄罗斯方块游戏 [打印本页]

作者: find    时间: 2012-1-9 15:13     标题: Linux Shell版俄罗斯方块游戏

特性:
1.支持时间显示特效!
2.支持方块旋转变换!
3.支持方块做矩阵转置!
4.支持炸弹特效(ID=23)!
5.支持方块暂停/恢复特效!
6.支持单方块夸区域移动(ID=0)!
7.支持方块的多颜色显示(64种颜色随机选择)!
8.支持方块按给定坐标区间设定值的任意定制!
9.支持代码的高度可伸缩性:抽象和封装(invoke 函数)
10.支持方块的1-7级预览定制(默认为6级预览,可预览随机生成的下6个方块)!

核心算法的矩阵方程:
[attach]4828[/attach]
  1. #!/bin/bash
  2. #
  3. # Tetris Game  Version 4.0
  4. # Developed by YongYe <expertshell@gmail.com>
  5. # 11/01/2011   BeiJing China  [Updated 01/08/2012]
  6. : << EOF
  7. for((i=32767/${1}; i>0; --i))
  8. do
  9.       if (( 32767/i == ${1} && 32767/(i-1) == ${1}+1 )); then
  10.             echo ${i}
  11.             exit 0
  12.       fi
  13. done
  14. EOF
  15. box0=(4 30)
  16. box1=(4 30 5 30)
  17. box2=(4 28 4 30 4 32)
  18. box3=(4 28 4 30 5 30)
  19. box4=(4 30 4 32 5 28 5 30)
  20. box5=(4 30 5 28 5 30 5 32)
  21. box6=(4 32 5 28 5 30 5 32)
  22. box7=(4 30 5 30 6 30 7 30)
  23. box8=(4 28 5 28 5 30 5 32)
  24. box9=(4 28 4 30 5 30 5 32)
  25. box10=(4 28 4 30 5 28 5 30)
  26. box11=(4 26 4 28 4 30 4 32 4 34)
  27. box12=(4 30 4 32 5 30 6 28 6 30)
  28. box13=(4 30 5 28 5 30 5 32 6 30)
  29. box14=(4 28 4 32 5 30 6 28 6 32)
  30. box15=(4 28 4 32 5 28 5 30 5 32)
  31. box16=(4 28 4 30 5 30 6 30 6 32)
  32. box17=(4 28 5 28 6 28 6 30 6 32)
  33. box18=(4 28 4 30 5 30 5 32 6 32)
  34. box19=(4 26 4 34 5 28 5 30 5 32)
  35. box20=(4 26 4 34 5 28 5 32 6 30)
  36. box21=(4 26 5 28 6 30 7 32 8 34)
  37. box22=(4 28 4 32 5 26 5 30 5 34)
  38. box23=(4 28 4 34 5 30 5 32 6 30 6 32 7 28 7 34)
  39. box24=(4 30 5 28 5 32 6 26 6 30 6 34 7 28 7 32 8 30)
  40. box25=(4 30 5 28 5 30 5 32 6 26 6 28 6 30 6 32 6 34 7 28 7 30 7 32 8 30)
  41. box26=(4 26 4 28 4 30 4 34 5 30 5 34 6 26 6 28 6 30 6 32 6 34 7 26 7 30 8 26 8 30 8 32 8 34)
  42. box27=(4 26 4 30 4 32 4 34 5 26 5 30 6 26 6 28 6 30 6 32 6 34 7 30 7 34 8 26 8 28 8 30 8 34)
  43. mrx=[]
  44. modh=3
  45. modw=5
  46. score=0
  47. level=0
  48. width=25
  49. height=30
  50. ((hh=2*width+modw+6))
  51. coltab=(1\;{30..37}\;{40..47}m)
  52. for signal in Rotate Left Right Down AllDown Exit Transf
  53. do  
  54.     ((sig${signal}=++gis+24))
  55. done
  56. corev(){ echo $?; }      
  57. srann(){ box=(${!1}); }
  58. rotxy(){ kbox="${sup}"; }
  59. rsmap(){ ((map[u/2-modh]=0)); }
  60. kisig(){ kill -${sigExit} ${pid}; }
  61. radom(){ echo -n $((RANDOM/1171)); }
  62. racol(){ echo -n ${coltab[RANDOM/512]}; }
  63. hdbox(){ echo -e "${oldbox//[]/  }\e[0m"; }
  64. hmowh(){ echo -ne "\e[${i};$((modw+1))H"; }
  65. check(){ (( map[(i-modh-1)*width+j/2-modh] == 0 )) && break; }
  66. pause(){ (( ${2} == 0 )) && kill -s STOP ${1} || kill -s CONT ${1}; }
  67. infra()
  68. {
  69.    stty ${STTY}
  70.    echo -e "\e[?25h\e[36;4H"
  71. }
  72. ptbox()
  73. {
  74.    oldbox="${cdn}"
  75.    echo -e "\e[${colbox}${cdn}\e[0m"
  76. }
  77. regxy()
  78. {
  79.    ptbox
  80.    locus="${sup}"
  81. }
  82. getxy()
  83. {
  84.    [[ ${cdx} ]] && ((y=cy+(ccy-cdy)${2}2))
  85.    eval ${1}+=\"${x} ${y} \"
  86. }
  87. Quit()
  88. {
  89.    case $# in
  90.         0) echo -e "\e[?25h\e[36;26HGame Over!\e[0m" ;;
  91.         1) kisig
  92.            infra ;;
  93.         2) infra ;;
  94.    esac
  95.            exit
  96. }
  97. maxxy()
  98. {
  99.    awk '{
  100.           a[$2]=a[$2]>$1?a[$2]:$1
  101.           b[$2]=a[$2]" "$2
  102.         }
  103.    END  {
  104.           for(i in b)
  105.              print b[i]
  106.         }' <(echo ${box[@]} | xargs -n 2)
  107. }
  108. initl()
  109. {
  110.    local rsyx
  111.    ((rsyx=(i-modh-1)*width+j/2-modh))
  112.    ((map[rsyx]=0))
  113.    ((pam[rsyx]=0))
  114. }
  115. rtmrx()
  116. {
  117.    local rsxy
  118.    ((rsxy=(i-modh-1)*width+j/2-modh))
  119.    (( map[rsxy] == 0 )) && echo -ne "  " || echo -ne "\e[${pam[rsxy]}${mrx}\e[0m"
  120. }
  121. srmap()
  122. {
  123.    local srx sry
  124.    ((srx=(j-modh)*width+u/2-modh))
  125.    ((sry=(j-modh-1)*width+u/2-modh))
  126.    ((map[srx]=map[sry]))
  127.    eval pam[srx]=\"${pam[sry]}\"
  128. }
  129. LOOP()
  130. {
  131.    local i j
  132.    for((i=modh+1; i<=height+modh; ++i))
  133.    do
  134.         ${1}
  135.         for((j=modw+1; j<=2*(width-1)+modw+1; j+=2))
  136.         do
  137.              ${2}
  138.         done
  139.         ${3}  
  140.    done
  141. }
  142. Loop()
  143. {
  144.    local u
  145.    for((u=modw+1; u<=2*(width-1)+modw+1; u+=2))
  146.    do
  147.           ${1}
  148.    done
  149. }
  150. mapbox()
  151. {
  152.    (( j <= 2*(width-1)+modw+1 )) && continue
  153.    ((++line))
  154.    for((j=i-1; j>=modh+1; --j))
  155.    do
  156.          Loop srmap
  157.    done
  158.          Loop rsmap
  159. }
  160. rscbox()
  161. {
  162.    local vor clo clu i
  163.    vor=(${!1})
  164.    for((i=0; i<${#vor[@]}; i+=2))
  165.    do
  166.        ((clo=${vor[i+1]}+${hh}-${3}))
  167.        smobox+="\e[$((vor[i]-1));${clo}H${mrx}"
  168.    done
  169.    clu="${!2}"
  170.    echo -e "${clu//[]/  }\e[${!4}${smobox}\e[0m"
  171. }
  172. mrbox()
  173. {
  174.    smobox=
  175.    (( ${5} != 0 )) && {
  176.    srann box$(radom)[@]
  177.    eval ${1}="(${box[@]})"
  178.    colbox="$(racol)"
  179.    eval ${6}=\"${colbox}\"
  180.    rscbox box[@] ${3} ${4} colbox
  181.    } || {
  182.    eval ${1}="(${!2})"
  183.    eval ${6}=\"${!7}\"
  184.    rscbox ${2} ${3} ${4} ${7}
  185.    }
  186.    eval ${3}=\"${smobox}\"
  187. }
  188. invoke()
  189. {
  190.    local aryA aryB aryC i
  191.    aryA=(m{c..h}box)
  192.    for((i=0; i<5; ++i))
  193.    do
  194.         aryB=(r${aryA[i]} r${aryA[i+1]}[@] ${aryA[i]})
  195.         aryC=($((12*(2-i))) ${1} s${aryB[0]} sr${aryA[i+1]})
  196.         mrbox ${aryB[@]} ${aryC[@]}
  197.    done
  198. }
  199. ranbox()
  200. {
  201.    local smobox
  202.    colbox="${srmcbox}"
  203.    olbox=(${rmcbox[@]})
  204.    invoke ${#}
  205.    smobox=
  206.    srann box$(radom)[@]
  207.    rmhbox=(${box[@]})
  208.    srmhbox="$(racol)"
  209.    rscbox box[@] crsbox -36 srmhbox
  210.    crsbox="${smobox}"
  211.    box=(${olbox[@]})
  212. }
  213. danbox()
  214. {
  215.    (( $# == 1 )) && {
  216.         srann box$(radom)[@]
  217.         colbox="$(racol)"
  218.         concxy box[@] regxy
  219.    } || {
  220.    colbox="${srmcbox}"
  221.    concxy rmcbox[@] regxy
  222.    }
  223.    oldbox="${cdn}"
  224.    if ! movebox locus; then
  225.       kill -${sigExit} ${PPID}
  226.       kisig
  227.       Quit
  228.    fi
  229. }
  230. hrabox()
  231. {
  232.    local i j x y p q yox sbos line vor mus calcu scn boolp boolq
  233.    sbos="\040\040"
  234.    vor=(${locus})
  235.    calcu=(x y-4 x y-2 x y x y+2 x y+4 x+1 y x+1 y-2 x+1 y+2)
  236.    for((i=0; i<${#vor[@]}; i+=2))
  237.    do
  238.        ((x=vor[i]))
  239.        ((y=vor[i+1]))
  240.        ((yox=(x-modh-1)*width+y/2-modh))
  241.        if (( ${#vor[@]} == 16 )); then
  242.              scn=
  243.              for((j=0; j<${#calcu[@]}; j+=2))
  244.              do
  245.                      ((p=calcu[j]))
  246.                      ((q=calcu[j+1]))
  247.                      ((mus=(p-modh-1)*width+q/2-modh))
  248.                      boolp="p > modh && p <= height+modh"
  249.                      boolq="q <= 2*width+modw && q > modw"
  250.                   if (( boolp && boolq )); then
  251.                      scn+="\e[${p};${q}H${sbos}"
  252.                      ((map[mus]=0))
  253.                      ((pam[mus]=0))
  254.                   fi
  255.              done
  256.              sleep 0.03
  257.              echo -e "${scn}"
  258.        else
  259.              ((map[yox]=1))
  260.              pam[yox]="${colbox}"
  261.        fi
  262.    done
  263.    line=0
  264.    LOOP "" check  mapbox
  265.    (( line == 0 )) && return
  266.    echo -e "\e[1;34m\e[$((modh+6));${hh}H$((score+=line*200-100))"
  267.    (( score%5000 < line*200-100 && level < 20 )) && echo -e "\e[1;34m\e[$((modh+8));${hh}H$((++level))"
  268.    echo -e "\e[0m"
  269.    LOOP hmowh rtmrx
  270. }        
  271. shwtim()
  272. {
  273.    local i h m s vir Time
  274.    trap "Quit" ${sigExit}
  275.    h=0
  276.    m=0
  277.    s=0
  278.    vir=--------
  279.    colot="\e[1;33m"
  280.    echo -e "\e[2;6H${colot}${vir}${vir}[\e[0m"
  281.    echo -e "\e[2;39H${colot}]${vir}${vir}\e[0m"
  282.    while :
  283.    do
  284.          (( s == 60 )) && { ((++m)); s=0; }
  285.          (( m == 60 )) && { ((++h)); m=0; }
  286.          for i in h m s
  287.          do
  288.                 if (( $(eval echo \${#${i}}) != 2 )); then
  289.                       Time[i]="0${!i}"
  290.                 else
  291.                       Time[i]="${!i}"
  292.                 fi
  293.          done   
  294.          echo -e "\e[2;24H${colot}Time  ${Time[h]}:${Time[m]}:${Time[s]}\e[0m"
  295.          sleep 1
  296.          ((++s))
  297.    done
  298. }
  299. persig()
  300. {
  301.    local sigSwap pid
  302.    pid=${1}
  303.    ranbox 0
  304.    danbox 0
  305.    for i in sigRotate sigTransf sigLeft sigRight sigDown sigAllDown
  306.    do
  307.         trap "sig=${!i}" ${!i}
  308.    done
  309.    trap "kisig; Quit" ${sigExit}
  310.    while :
  311.    do
  312.        for ((i=0; i<20-level; ++i))
  313.        do
  314.             sleep 0.02
  315.             sigSwap=${sig}
  316.             sig=0
  317.             case ${sigSwap} in
  318.             ${sigRotate} )  transform 0     ;;
  319.             ${sigTransf} )  transform 1     ;;
  320.             ${sigLeft}   )  transform 0 -2  ;;
  321.             ${sigRight}  )  transform 0  2  ;;
  322.             ${sigDown}   )  transform 1  0  ;;
  323.             ${sigAllDown})   
  324.             transform $(corev $(dropa))  0  ;;
  325.             esac
  326.        done
  327.        transform 1  0
  328.    done
  329. }
  330. getsig()
  331. {
  332.    local pid key arry pool STTY sig
  333.    pid=${1}
  334.    arry=(0 0 0)
  335.    pool=$(echo -ne "\e")
  336.    STTY=$(stty -g)
  337.    trap "Quit 0" INT TERM
  338.    trap "Quit 0 0" ${sigExit}
  339.    echo -ne "\e[?25l"
  340.    while :
  341.    do
  342.            read -s -n 1 key
  343.            arry[0]=${arry[1]}
  344.            arry[1]=${arry[2]}
  345.            arry[2]=${key}
  346.            sig=0
  347.            if   [[ ${key} == ${pool} && ${arry[1]} == ${pool} ]];then Quit 0
  348.            elif [[ "[${key}]" == ${mrx} ]]; then sig=${sigAllDown}      
  349.            elif [[ ${arry[0]} == ${pool} && ${arry[1]} == "[" ]]; then
  350.                      case ${key} in
  351.                      A)    sig=${sigRotate}    ;;
  352.                      B)    sig=${sigDown}      ;;
  353.                      D)    sig=${sigLeft}      ;;
  354.                      C)    sig=${sigRight}     ;;
  355.                      esac
  356.            else
  357.                     case ${key} in
  358.                      W|w)  sig=${sigRotate}    ;;
  359.                      T|t)  sig=${sigTransf}    ;;
  360.                      S|s)  sig=${sigDown}      ;;
  361.                      A|a)  sig=${sigLeft}      ;;
  362.                      D|d)  sig=${sigRight}     ;;
  363.                      P|p)  pause ${pid}  0     ;;
  364.                      R|r)  pause ${pid}  1     ;;
  365.                      Q|q)  Quit 0              ;;
  366.                      esac
  367.            fi
  368.                      (( sig != 0 )) && kill -${sig} ${pid}
  369.    done
  370. }
  371. dropa()
  372. {  
  373.    local max boolc boolr i j
  374.    max=($(maxxy))
  375.    for((i=0; i<height; ++i))
  376.    do
  377.        for((j=0; j<${#max[@]}; j+=2))
  378.        do
  379.            boolr="max[j]+i == height+modh"
  380.            boolc="map[(max[j]+i-modh)*width+max[j+1]/2-modh] == 1"
  381.            (( boolc || boolr )) && return ${i}
  382.        done
  383.    done
  384. }
  385. movebox()
  386. {
  387.    local x y i j xoy vor boolx booly
  388.    vor=(${!1})
  389.    smu=${#vor[@]}
  390.    for((i=0; i<${#vor[@]}; i+=2))
  391.    do   
  392.         ((x=vor[i]+dx))
  393.         ((y=vor[i+1]+dy))
  394.         ((xoy=(x-modh-1)*width+y/2-modh))
  395.         (( xoy < 0 )) && return 1
  396.         boolx="x <= modh || x > height+modh"
  397.         booly="y > 2*width+modw || y <= modw"
  398.         (( boolx || booly )) && return 1
  399.         if (( map[xoy] == 1 )); then
  400.            if (( smu == 2 )); then
  401.               for((j=height+modh; j>x; --j))
  402.               do
  403.                    (( map[(j-modh-1)*width+y/2-modh] == 0 )) && return 0
  404.               done
  405.            fi
  406.            return 1
  407.         fi
  408.    done
  409.    return 0  
  410. }
  411. across()
  412. {
  413.    local i j m one
  414.    one=(${locus})
  415.    ((i=one[0]))
  416.    ((j=one[1]))
  417.    ((m=(i-modh-1)*width+j/2-modh))
  418.    (( map[m] == 1 )) && echo -e "\e[${i};${j}H\e[${pam[m]}${mrx}\e[0m"
  419. }
  420. concxy()
  421. {
  422.    local i sup vor
  423.    vor=(${!1})
  424.    for((i=0; i<${#vor[@]}; i+=2))
  425.    do   
  426.        cdn+="\e[${vor[i]};${vor[i+1]}H${mrx}"
  427.        sup+="${vor[i]} ${vor[i+1]} "
  428.    done
  429.    ${2}
  430. }
  431. move()
  432. {
  433.    if movebox locus; then
  434.         hdbox
  435.         (( smu == 2 )) && across
  436.         drbox
  437.    else
  438.         (( dx == 1 )) && {
  439.         hrabox  
  440.         danbox
  441.         ranbox
  442.         }
  443.    fi
  444. }
  445. drbox()
  446. {
  447.    local v
  448.    for((v=0; v<${#box[@]}; v+=2))
  449.    do
  450.       ((box[v]+=dx))
  451.       ((box[v+1]+=dy))
  452.    done
  453.    nbox=(${box[@]})
  454.    concxy box[@] regxy
  455.    box=(${nbox[@]})
  456. }
  457. getmn()
  458. {
  459.    BOX=(${!1})
  460.    if (( ${#BOX[@]}%4 == 0 )); then
  461.         ((${2}=BOX[${#BOX[@]}/2]))
  462.         ((${3}=BOX[${#BOX[@]}/2+1]))
  463.    else
  464.         ((${3}=BOX[${#BOX[@]}/2]))
  465.         ((${2}=BOX[${#BOX[@]}/2-1]))
  466.    fi
  467. }
  468. loop()
  469. {
  470.    local x y cy ccx ccy cdx cdy vor
  471.    vor=(${!1})
  472.    for((i=0; i<${#vor[@]}; i+=2))
  473.    do
  474.        ((x=vor[i]))
  475.        ((y=vor[i+1]))
  476.        ((ccx=x))
  477.        ((ccy=y))
  478.        ${2} ${3} "${4}"
  479.        ((cy=y))
  480.        ((cdx=ccx))
  481.        ((cdy=ccy))   
  482.    done
  483. }
  484. algo()
  485. {
  486.    local row col vor
  487.    vor=(${!1})
  488.    for((i=0; i<${#vor[@]}; i+=2))
  489.    do
  490.           ((row=m+vor[i+1]-n))  # row=((x-m)/zoomx)*cos(a)-((y-n)/zoomy)*sin(a)+m
  491.        if (( dx != 1 )); then   # col=((x-m)/zoomx)*sin(a)+((y-n)/zoomy)*cos(a)+n
  492.           ((col=m-vor[i]+n))    # a=-pi/2 zoomx=+1 zoomy=+1 dx=0 dy=0
  493.        else
  494.           ((col=vor[i]-m+n))    # a=+pi/2 zoomx=+1 zoomy=-1 dx=0 dy=0
  495.        fi
  496.           mbox+="${row} ${col} "
  497.    done
  498. }
  499. plusxy()
  500. {
  501.    local i
  502.    for((i=0; i<${#tbox[@]}; i+=2))
  503.    do
  504.        ((tbox[i]+=mp-p))
  505.        ((tbox[i+1]+=nq-q))
  506.    done
  507. }
  508. trprg()
  509. {
  510.    loop ${1} ${2} ${3} "${4}"
  511.    eval ${3}="(${!3})"
  512.    getmn ${3}[@] ${5} ${6}
  513. }
  514. rotate()
  515. {     
  516.    local m n p q mp nq tbox mbox vbox kbox
  517.    getmn box[@] mp nq
  518.    trprg box[@]  getxy vbox "/" m n
  519.    algo vbox[@]
  520.    mbox=(${mbox})
  521.    trprg mbox[@] getxy tbox "*" p q
  522.    plusxy
  523.    concxy tbox[@] rotxy
  524.    dx=
  525.    if movebox kbox; then
  526.        hdbox
  527.        locus="${kbox}"
  528.        ptbox
  529.        box=(${kbox})
  530.    fi
  531. }
  532. transform()
  533. {
  534.    local dx dy cdn smu
  535.    dx=${1}
  536.    dy=${2}
  537.    (( $# == 2 )) && move || rotate
  538. }
  539. matrix()
  540. {
  541.    one=" "
  542.    sr="\e[0m"
  543.    two="${one}${one}"
  544.    tre="${one}${two}"
  545.    cps="${two}${tre}"
  546.    spc="${cps}${cps}"         
  547.    colbon="\e[1;36m"
  548.    mcol="\e[1;33;40m"
  549.    trx="${mrx}${mrx}"
  550.    fk0="${colbon}${mrx}${sr}"
  551.    fk1="${colbon}${trx}${sr}"
  552.    fk2="${colbon}${mrx}${trx}${sr}"
  553.    fk3="${colbon}${trx}${trx}${sr}"
  554.    fk4="${mcol}${mrx}${sr}"
  555.    fk5="${spc}${spc}"
  556.    fk6="${mcol}${mrx}${trx}${sr}"
  557.    fk="${tre}${fk0}${two}${fk3}${two}${fk3}"
  558.    fk7="${fk1}${one}${fk1}${fk}${fk4}${two}${two}"
  559.    fk8="${fk0}${one}row${one}${fk0}${tre}${fk0}${two}${fk0}${one}(x-m)/zoomx${two}"
  560.    fk9="${one}=${one}${fk0}${two}${fk0}${spc}${tre}${one}${fk0}${tre}*${two}"
  561.    fk10="${spc}${cps}${two}${fk0}${two}${fk0}${one}+${one}${fk0}${cps}${fk0}"
  562.    fk11="${tre}${one}${fk0}${two}cos(a)${one}sin(a)${two}${fk0}${two}${fk0}${tre}${fk0}${two}m${two}${fk0}"
  563.    fk12="${one}col${one}${fk0}${tre}${fk0}${two}${fk0}${one}(y-n)/zoomy${two}${fk0}${cps}${one}"
  564.    fk13="${one}-sin(a)${one}cos(a)${two}${fk0}${two}${fk0}${tre}${fk0}${two}n${two}${fk0}"
  565.    fk14="${fk1}${one}${fk1}${fk}${cps}${one}"
  566.    fk15="${fk1}${two}${fk0}${tre}${fk1}${one}${fk1}"
  567.    echo -e "\e[$((modh+23));${hh}HAlgorithm:${sr}${two}${fk2}${one}${fk5}${fk5}${fk2}${fk4}"
  568.    echo -e "\e[$((modh+30));${hh}H${spc}${two}${fk0}${two}${two}${cps}${fk5}${fk5}${fk0}"
  569.    echo -e "\e[$((modh+25));${hh}H${fk7}${fk1}${spc}${tre}${fk1}${two}${fk0}${tre}${fk1}${one}${fk1}"
  570.    echo -e "\e[$((modh+26));${hh}H${fk8}${fk0}${fk4}${fk11}\e[$((modh+28));${hh}H${fk0}${fk12}${fk0}${fk13}"
  571.    echo -e "\e[$((modh+24));${hh}H${two}${spc}${fk0}${spc}${tre}${two}${tre}${fk6}${fk5}${cps}${fk0}${fk4}"
  572.    echo -e "\e[$((modh+22));${hh}H${tre}${fk5}${fk5}${fk5}${fk6}\e[$((modh+29));${hh}H${fk14}${fk1}${spc}${tre}${fk15}"
  573.    echo -e "\e[$((modh+27));${hh}H${fk0}${cps}${fk0}${fk9}${fk0}${fk10}\e[$((modh+31));${hh}H${spc}${two}${fk2}${fk5}${fk5} ${fk2}"
  574. }
  575. bondary()
  576. {
  577.    clear
  578.    boncol="\e[1;36m"
  579.    for((i=modw+1; i<=2*width+modw; i+=2))
  580.    do
  581.         echo -e "${boncol}\e[${modh};${i}H==\e[$((height+modh+1));${i}H==\e[0m"
  582.    done
  583.    for((i=modh; i<=height+modh+1; ++i))
  584.    do
  585.         echo -e "${boncol}\e[${i};$((modw-1))H||\e[${i};$((2*width+modw+1))H||\e[0m"
  586.    done
  587. }
  588. rinfo()
  589. {
  590.    echo -e "\e[1;31m\e[$((modh+5));${hh}HScore\e[1;31m\e[$((modh+7));${hh}HLevel\e[0m"
  591.    echo -e "\e[1;34m\e[$((modh+6));${hh}H${score}\e[1;34m\e[$((modh+8));${hh}H${level}\e[0m"
  592.    echo -e "\e[$((modh+14));${hh}HT|t          ===   transpose"
  593.    echo -e "\e[$((modh+10));${hh}HQ|q|ESC      ===   exit"
  594.    echo -e "\e[$((modh+11));${hh}HP|p          ===   pause\e[$((modh+12));${hh}HR|r          ===   resume"
  595.    echo -e "\e[$((modh+13));${hh}HW|w|up       ===   rotate\e[$((modh+15));${hh}HS|s|down     ===   one step down"
  596.    echo -e "\e[$((modh+16));${hh}HA|a|left     ===   one step left\e[$((modh+17));${hh}HD|d|right    ===   one step right"
  597.    echo -e "\e[$((modh+18));${hh}HSpace|enter  ===   drop all down\e[1;36m\e[$((modh+19));${hh}HTetris Game  Version 4.0"
  598.    echo -e "\e[$((modh+20));${hh}HYongYe <expertshell@gmail.com>\e[$((modh+21));${hh}H11/01/2011 BeiJing China  [Updated 01/08/2012]"
  599. }
  600.    [[ "[${1}]" != ${mrx} ]] && {
  601.        LOOP "" initl ""
  602.        bondary
  603.        rinfo
  604.        matrix
  605.        shwtim &
  606.        persig $!
  607.    } || {
  608.        bash $0 0 &
  609.        getsig $!
  610.    }
复制代码

作者: hacker85    时间: 2012-1-10 08:22

这个是在哪款shell下运行的游戏?
作者: woaixj    时间: 2012-4-10 23:12

数学呀数学 ——————
作者: gawk    时间: 2012-4-11 00:48

回复 2# hacker85


    请看代码的第一行




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2