- declare -i num #-i将变量声明为整型
- declare -i s
-
- Map=(0 0 1 1 1 0 0 0 9
- 0 0 1 4 1 0 0 0 9
- 0 0 1 3 1 1 1 1 9
- 1 1 1 0 0 3 4 1 9
- 1 4 0 3 2 1 1 1 9
- 1 1 1 1 3 1 0 0 9
- 0 0 0 1 4 1 0 0 9
- 0 0 0 1 1 1 0 0 9)
-
- main()
- {
- while true #一直循环
- do
- clear #清除屏幕
- echo "===================推箱子游戏=================="
- echo "====规则:将☆全部推到◎处,即为胜利===="
- echo "==推箱子: w:向上 s:向下 a:向左 d:向右 +回车=="
- show
- move
- np=0
- for element in ${Map[@]}
- do
- if [ $element -eq 3 ]; then #表示还有未推到指定地点的箱子
- np=$(( np+1 ))
- fi
- done
- if [ $np -gt 0 ]; then
- echo "continue"
- else
- break
- fi
- done
- echo "you are win!"
- }
-
- show()
- {
- for data in "${Map[@]}"; #显示所有的格子里边的内容
- do
- case $data in
- [0]) printf " ";; #空白
- [1]) printf "■";; #墙
- [2]) printf "♀";; #人
- [3]) printf "☆";; #箱子
- [4]) printf "◎";; #终点
- [5]) printf "♂";; #人+终点
- [6]) printf "★";; #箱子+终点
- [9]) printf "\n";; #墙
- esac
- done
- }
-
- function move()
- {
- for i in ${!Map[@]}
- do
- if [ ${Map[$i]} -eq 2 -o ${Map[$i]} -eq 5 ]; then
- #找到自己
- num=${i}
- break
- fi
-
- done
- read -n 1 input
- case $input in
- "w")
- #上
- if [ "${Map[num-9]}" -eq 0 ]; then #如果上一列为空白
- Map[num-9]=2 #则把上一列变为人
- Map[num]=0 #当前位置变为空白
- elif [ "${Map[num-9]}" -eq 3 ]; then #如果上一列为箱子
- if [ "${Map[num-18]}" -eq 0 ]; then #如果上上列为空白
- Map[num-9]=2 #则把上一列变为人
- Map[num]=0 #把当前列变为空白
- Map[num-18]=3 #把上上列变为箱子
- elif [ "${Map[num-18]}" -eq 4 ]; then #如果上上列为终点
- Map[num-9]=2
- Map[num]=0
- Map[num-18]=6
- fi
- elif [ "${Map[num-9]}" -eq 4 ]; then #如果上一列为终点
- Map[num-9]=5
- Map[num]=0
- fi
- ;;
- "a")
- #左
- if [ "${Map[num-1]}" -eq 0 ]; then
- Map[num-1]=2
- Map[num]=0
- elif [ "${Map[num-1]}" -eq 3 ]; then
- if [ "${Map[num-2]}" -eq 0 ]; then
- Map[num-1]=2
- Map[num]=0
- Map[num-2]=3
- elif [ "${Map[num-2]}" -eq 4 ]; then
- Map[num-1]=2
- Map[num]=0
- Map[num-2]=6
- fi
- elif [ "${Map[num-1]}" -eq 4 ]; then
- Map[num-1]=5
- Map[num]=0
- fi
- ;;
- "d")
- #右
- if [ "${Map[num+1]}" -eq 0 ]; then
- Map[num+1]=2
- Map[num]=0
- elif [ "${Map[num+1]}" -eq 3 ]; then
- if [ "${Map[num+2]}" -eq 0 ]; then
- Map[num+1]=2
- Map[num]=0
- Map[num+2]=3
- elif [ "${Map[num+2]}" -eq 4 ]; then
- Map[num+1]=2
- Map[num]=0
- Map[num+2]=6
- fi
- elif [ "${Map[num+1]}" -eq 4 ]; then
- Map[num+1]=5
- Map[num]=0
- fi
- ;;
- "s")
- #下
- if [ "${Map[num+9]}" -eq 0 ]; then
- Map[num+9]=2
- Map[num]=0
- elif [ "${Map[num+9]}" -eq 3 ]; then
- if [ "${Map[num+18]}" -eq 0 ]; then
- Map[num+9]=2
- Map[num]=0
- Map[num+18]=3
- elif [ "${Map[num+18]}" -eq 4 ]; then
- Map[num+9]=2
- Map[num]=0
- Map[num+18]=6
- fi
- elif [ "${Map[num+9]}" -eq 4 ]; then
- Map[num+9]=5
- Map[num]=0
- fi
- ;;
- esac
- }
-
- main