【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

  1. printf " " ;;

  2. printf "#" ;;

  3. printf "\n" ;;

esac

done

#Snake

for ((i=0;i<${SnakeLength};i++))

do

tput cup {SnakeY\[i\]} {SnakeXi}

echo "*"

done

#Food

tput cup {Food\[0\]} {Food1}

echo "0"

tput cup 20 0

}

ArrayMove()

{

for i in (seq 0 ((SnakeLength-2)))

do

SnakeXi=${SnakeXi+1}

SnakeYi=${SnakeYi+1}

done

}

FoodGenerate()

{

Food1=(({RANDOM}%${MapHeight}))

Food0=(({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 ${Food0} ]; 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 小时前
腾讯云服务器安装Redis Stack图文教程
服务器·redis·腾讯云·redis stack
土司大王4 小时前
LeetCode hto100——字母异位词分组
java·算法·leetcode
犹豫的果冻布丁4 小时前
从零给 DeepSeek Harness 写一个壁纸皮肤插件(已开源)
前端·后端
发量惊人的中年网工4 小时前
中小企业网络管理进阶:从设备堆叠到统一管理
服务器·网络·安全·网络安全·php·制造
码匠许师傅4 小时前
【C++ 面试真题】聊聊 C++ 中的 lambda 表达式
java·c++·面试
漏刻有时5 小时前
数据可视化Three.js 3D 地图实战:单文件原生实现省域区县拉伸建模
前端
会说话的番茄5 小时前
AI 满嘴跑火车怎么办?给它配个"小抄"
前端·aigc
计算机魔术师5 小时前
AI 权力集中辩论实录:从「token 工厂」到「唯一幸存者」
前端
QCodingDev5 小时前
Spring AI Alibaba ReAct Agent实战:从Tool Calling到Agent,企业AI复杂业务该如何设计?
java·人工智能·agent·ai编程·spring ai
eric-sjq5 小时前
WanlyFrontend 中文声明式前端语言完全指南:让 0.6B 模型写出漂亮网页
前端