• 【SHELL】推箱子游戏


    1. declare -i num #-i将变量声明为整型
    2. declare -i s
    3. Map=(0 0 1 1 1 0 0 0 9
    4. 0 0 1 4 1 0 0 0 9
    5. 0 0 1 3 1 1 1 1 9
    6. 1 1 1 0 0 3 4 1 9
    7. 1 4 0 3 2 1 1 1 9
    8. 1 1 1 1 3 1 0 0 9
    9. 0 0 0 1 4 1 0 0 9
    10. 0 0 0 1 1 1 0 0 9)
    11. main()
    12. {
    13. while true #一直循环
    14. do
    15. clear #清除屏幕
    16. echo "===================推箱子游戏=================="
    17. echo "====规则:将☆全部推到◎处,即为胜利===="
    18. echo "==推箱子: w:向上 s:向下 a:向左 d:向右 +回车=="
    19. show
    20. move
    21. np=0
    22. for element in ${Map[@]}
    23. do
    24. if [ $element -eq 3 ]; then #表示还有未推到指定地点的箱子
    25. np=$(( np+1 ))
    26. fi
    27. done
    28. if [ $np -gt 0 ]; then
    29. echo "continue"
    30. else
    31. break
    32. fi
    33. done
    34. echo "you are win!"
    35. }
    36. show()
    37. {
    38. for data in "${Map[@]}"; #显示所有的格子里边的内容
    39. do
    40. case $data in
    41. [0]) printf " ";; #空白
    42. [1]) printf "■";; #墙
    43. [2]) printf "♀";; #人
    44. [3]) printf "☆";; #箱子
    45. [4]) printf "◎";; #终点
    46. [5]) printf "♂";; #人+终点
    47. [6]) printf "★";; #箱子+终点
    48. [9]) printf "\n";; #墙
    49. esac
    50. done
    51. }
    52. function move()
    53. {
    54. for i in ${!Map[@]}
    55. do
    56. if [ ${Map[$i]} -eq 2 -o ${Map[$i]} -eq 5 ]; then
    57. #找到自己
    58. num=${i}
    59. break
    60. fi
    61. done
    62. read -n 1 input
    63. case $input in
    64. "w")
    65. #上
    66. if [ "${Map[num-9]}" -eq 0 ]; then #如果上一列为空白
    67. Map[num-9]=2 #则把上一列变为人
    68. Map[num]=0 #当前位置变为空白
    69. elif [ "${Map[num-9]}" -eq 3 ]; then #如果上一列为箱子
    70. if [ "${Map[num-18]}" -eq 0 ]; then #如果上上列为空白
    71. Map[num-9]=2 #则把上一列变为人
    72. Map[num]=0 #把当前列变为空白
    73. Map[num-18]=3 #把上上列变为箱子
    74. elif [ "${Map[num-18]}" -eq 4 ]; then #如果上上列为终点
    75. Map[num-9]=2
    76. Map[num]=0
    77. Map[num-18]=6
    78. fi
    79. elif [ "${Map[num-9]}" -eq 4 ]; then #如果上一列为终点
    80. Map[num-9]=5
    81. Map[num]=0
    82. fi
    83. ;;
    84. "a")
    85. #左
    86. if [ "${Map[num-1]}" -eq 0 ]; then
    87. Map[num-1]=2
    88. Map[num]=0
    89. elif [ "${Map[num-1]}" -eq 3 ]; then
    90. if [ "${Map[num-2]}" -eq 0 ]; then
    91. Map[num-1]=2
    92. Map[num]=0
    93. Map[num-2]=3
    94. elif [ "${Map[num-2]}" -eq 4 ]; then
    95. Map[num-1]=2
    96. Map[num]=0
    97. Map[num-2]=6
    98. fi
    99. elif [ "${Map[num-1]}" -eq 4 ]; then
    100. Map[num-1]=5
    101. Map[num]=0
    102. fi
    103. ;;
    104. "d")
    105. #右
    106. if [ "${Map[num+1]}" -eq 0 ]; then
    107. Map[num+1]=2
    108. Map[num]=0
    109. elif [ "${Map[num+1]}" -eq 3 ]; then
    110. if [ "${Map[num+2]}" -eq 0 ]; then
    111. Map[num+1]=2
    112. Map[num]=0
    113. Map[num+2]=3
    114. elif [ "${Map[num+2]}" -eq 4 ]; then
    115. Map[num+1]=2
    116. Map[num]=0
    117. Map[num+2]=6
    118. fi
    119. elif [ "${Map[num+1]}" -eq 4 ]; then
    120. Map[num+1]=5
    121. Map[num]=0
    122. fi
    123. ;;
    124. "s")
    125. #下
    126. if [ "${Map[num+9]}" -eq 0 ]; then
    127. Map[num+9]=2
    128. Map[num]=0
    129. elif [ "${Map[num+9]}" -eq 3 ]; then
    130. if [ "${Map[num+18]}" -eq 0 ]; then
    131. Map[num+9]=2
    132. Map[num]=0
    133. Map[num+18]=3
    134. elif [ "${Map[num+18]}" -eq 4 ]; then
    135. Map[num+9]=2
    136. Map[num]=0
    137. Map[num+18]=6
    138. fi
    139. elif [ "${Map[num+9]}" -eq 4 ]; then
    140. Map[num+9]=5
    141. Map[num]=0
    142. fi
    143. ;;
    144. esac
    145. }
    146. main

  • 相关阅读:
    Web3 治理实践探讨:如何寻找多元化发展路径?
    digitalLogic_逻辑门和基本公式
    java计算机毕业设计食用菌菌棒溯源系统的开发与设计源程序+mysql+系统+lw文档+远程调试
    华钜同创:亚马逊卖家培训如何追溯流量变化
    考华为HCIP证书多钱?
    git下载其他项目到本地
    图论第一天|深度优先搜索理论基础、广度优先搜索理论基础、797.所有可能的路径
    win11 卸载SQL Server
    EPICS应用程序开发1 -- 开始
    vlan同步—VTP通告
  • 原文地址:https://blog.csdn.net/r77683962/article/details/134517300