【LINUX】SHELL贪吃蛇

MapHeight=19
MapWidth=17
SnakeLength=3
SnakeX=(2 3 4)
SnakeY=(5 5 5)
MoveDirection="Right"
Food=(7 14)
Map=(1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 9 
     1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 9 
     1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 9 
     1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 9 
     1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 9 
     1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 9 
     1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 9  
     1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 9  
     1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 9  
     1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 9  
     1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 9  
     1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 9  
     1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 9   
     1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 9   
     1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 9   
     1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 9 
     1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 9)
 
Show()
{
    #Map
    for Cell in "${Map[@]}"
    do
        case ${Cell} in
            0) printf " "  ;;
            1) printf "#"  ;;
            9) printf "\n" ;;
        esac
    done
 
    #Snake
    for ((i=0;i<${SnakeLength};i++))
    do
        tput cup ${SnakeY[i]} ${SnakeX[i]}
        echo "*"
    done
 
    #Food
    tput cup ${Food[0]} ${Food[1]}
    echo "0"
    
    tput cup 20 0
}
 
ArrayMove()
{
    for i in $(seq 0 $((SnakeLength-2)))
    do
        SnakeX[i]=${SnakeX[i+1]}
        SnakeY[i]=${SnakeY[i+1]}
    done
}
 
FoodGenerate()
{
    Food[1]=$((${RANDOM}%${MapHeight}))
    Food[0]=$((${RANDOM}%${MapWidth}))
}
 
Move()
{
    read -n 1 -t 0.2 input
 
    case $input in
        "s") MoveDirection="Down" ;;
        "w") MoveDirection="Up" ;;
        "a") MoveDirection="Left" ;;
        "d") MoveDirection="Right" ;;
    esac
 
    ArrayMove
    if [ "$MoveDirection" = "Right" ]; then
        ((++SnakeX[$((SnakeLength-1))]))
    elif [ "$MoveDirection" = "Left" ]; then
                ((--SnakeX[$((SnakeLength-1))])) 
    elif [ "$MoveDirection" = "Up" ]; then
                ((--SnakeY[$((SnakeLength-1))])) 
    elif [ "$MoveDirection" = "Down" ]; then
                ((++SnakeY[$((SnakeLength-1))])) 
    fi
 
    if [ ${SnakeX[$((SnakeLength-1))]} -eq ${Food[1]} -a ${SnakeY[$((SnakeLength-1))]} -eq ${Food[0]} ]; then        
        SnakeX[${SnakeLength}]=${SnakeX[$((SnakeLength-1))]} 
                SnakeY[${SnakeLength}]=${SnakeY[$((SnakeLength-1))]} 
        if [ "$MoveDirection" = "Down" ]; then 
            SnakeY[${SnakeLength}]=${SnakeY[$((SnakeLength-1))]}+1
        elif [ "$MoveDirection" = "Up" ]; then
                        SnakeY[${SnakeLength}]=${SnakeY[$((SnakeLength-1))]}-1 
        elif [ "$MoveDirection" = "Right" ]; then
                        SnakeX[${SnakeLength}]=${SnakeX[$((SnakeLength-1))]}+1
        elif [ "$MoveDirection" = "Left" ]; then
                        SnakeX[${SnakeLength}]=${SnakeX[$((SnakeLength-1))]}-1
        fi
        ((++SnakeLength))
        FoodGenerate
    fi
}
 
Main()
{
    while true
    do
        clear
        echo "w:up s:down a:left d:right"
        Show
        Move
 
        sleep 0.2
    done
}
 
Main

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值