没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
粘贴以下代码到一个空的Shell脚本文件中,并在Bash 中运行即可! 代码如下:#!/bin/bash# Tetris Game# 10.21.2003 xhchen<[email]xhchen@winbond.com.tw[/email]>#APP declarationAPP_NAME=”${0##*[\\/]}”APP_VERSION=”1.0″ #颜色定义cRed=1cGreen=2cYellow=3cBlue=4cFuchsia=5cCyan=6cWhite=7colorTable=($cRed $cGreen $cYellow $cBlue $cFuchsia $cCyan $c
资源推荐
资源详情
资源评论
shell脚本编写的俄罗斯方块游戏代码脚本编写的俄罗斯方块游戏代码
粘贴以下代码到一个空的Shell脚本文件中,并在Bash 中运行即可!
代码如下:
#!/bin/bash
# Tetris Game
# 10.21.2003 xhchen<[email]xhchen@winbond.com.tw[/email]>
#APP declaration
APP_NAME=”${0##*[\/]}”
APP_VERSION=”1.0″
#颜色定义
cRed=1
cGreen=2
cYellow=3
cBlue=4
cFuchsia=5
cCyan=6
cWhite=7
colorTable=($cRed $cGreen $cYellow $cBlue $cFuchsia $cCyan $cWhite)
#位置和大小
iLeft=3
iTop=2
((iTrayLeft = iLeft + 2))
((iTrayTop = iTop + 1))
((iTrayWidth = 10))
((iTrayHeight = 15))
#颜色设置
cBorder=$cGreen
cScore=$cFuchsia
cScoreValue=$cCyan
#控制信号
#改游戏使用两个进程,一个用于接收输入,一个用于游戏流程和显示界面;
#当前者接收到上下左右等按键时,通过向后者发送signal的方式通知后者。
sigRotate=25
sigLeft=26
sigRight=27
sigDown=28
sigAllDown=29
sigExit=30
#七中不同的方块的定义
#通过旋转,每种方块的显示的样式可能有几种
box0=(0 0 0 1 1 0 1 1)
box1=(0 2 1 2 2 2 3 2 1 0 1 1 1 2 1 3)
box2=(0 0 0 1 1 1 1 2 0 1 1 0 1 1 2 0)
box3=(0 1 0 2 1 0 1 1 0 0 1 0 1 1 2 1)
box4=(0 1 0 2 1 1 2 1 1 0 1 1 1 2 2 2 0 1 1 1 2 0 2 1 0 0 1 0 1 1 1 2)
box5=(0 1 1 1 2 1 2 2 1 0 1 1 1 2 2 0 0 0 0 1 1 1 2 1 0 2 1 0 1 1 1 2)
box6=(0 1 1 1 1 2 2 1 1 0 1 1 1 2 2 1 0 1 1 0 1 1 2 1 0 1 1 0 1 1 1 2)
#所有其中方块的定义都放到box变量中
box=(${box0[@]} ${box1[@]} ${box2[@]} ${box3[@]} ${box4[@]} ${box5[@]} ${box6[@]})
#各种方块旋转后可能的样式数目
countBox=(1 2 2 2 4 4 4)
#各种方块再box数组中的偏移
offsetBox=(0 1 3 5 7 11 15)
#每提高一个速度级需要积累的分数
iScoreEachLevel=50 #be greater than 7
#运行时数据
sig=0 #接收到的signal
iScore=0 #总分
iLevel=0 #速度级
boxNew=() #新下落的方块的位置定义
cBoxNew=0 #新下落的方块的颜色
iBoxNewType=0 #新下落的方块的种类
iBoxNewRotate=0 #新下落的方块的旋转角度
boxCur=() #当前方块的位置定义
cBoxCur=0 #当前方块的颜色
iBoxCurType=0 #当前方块的种类
iBoxCurRotate=0 #当前方块的旋转角度
boxCurX=-1 #当前方块的x坐标位置
boxCurY=-1 #当前方块的y坐标位置
iMap=() #背景方块图表
#初始化所有背景方块为-1, 表示没有方块
for ((i = 0; i < iTrayHeight * iTrayWidth; i++)); do iMap[$i]=-1; done
#接收输入的进程的主函数
function RunAsKeyReceiver()
{
local pidDisplayer key aKey sig cESC sTTY
pidDisplayer=$1
aKey=(0 0 0)
cESC=`echo -ne “\033″`
cSpace=`echo -ne “\040″`
#保存终端属性。在read -s读取终端键时,终端的属性会被暂时改变。
#如果在read -s时程序被不幸杀掉,可能会导致终端混乱,
#需要在程序退出时恢复终端属性。
sTTY=`stty -g`
#捕捉退出信号
trap “MyExit;” INT TERM
trap “MyExitNoSub;” $sigExit
#隐藏光标
echo -ne “\033[?25l”
while :
do
#读取输入。注-s不回显,-n读到一个字符立即返回
read -s -n 1 key
aKey[0]=${aKey[1]}
aKey[1]=${aKey[2]}
aKey[2]=$key
sig=0
#判断输入了何种键
if [[ $key == $cESC && ${aKey[1]} == $cESC ]]
then
#ESC键
MyExit
elif [[ ${aKey[0]} == $cESC && ${aKey[1]} == “[” ]]
then
if [[ $key == “A” ]]; then sig=$sigRotate #<向上键>
elif [[ $key == “B” ]]; then sig=$sigDown #<向下键>
elif [[ $key == “D” ]]; then sig=$sigLeft #<向左键>
elif [[ $key == “C” ]]; then sig=$sigRight #<向右键>
fi
elif [[ $key == “W” || $key == “w” ]]; then sig=$sigRotate #W, w
elif [[ $key == “S” || $key == “s” ]]; then sig=$sigDown #S, s
elif [[ $key == “A” || $key == “a” ]]; then sig=$sigLeft #A, a
elif [[ $key == “D” || $key == “d” ]]; then sig=$sigRight #D, d
elif [[ “[$key]” == “[]” ]]; then sig=$sigAllDown #空格键
elif [[ $key == “Q” || $key == “q” ]] #Q, q
then
MyExit
fi
if [[ $sig != 0 ]]
then
#向另一进程发送消息
kill -$sig $pidDisplayer
fi
done
}
#退出前的恢复
function MyExitNoSub()
{
local y
#恢复终端属性
stty $sTTY
剩余8页未读,继续阅读
资源评论
weixin_38745003
- 粉丝: 10
- 资源: 947
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 【岗位说明】绩效专员岗位职责02.doc
- 【岗位说明】人力资源部部门经理人事专员培训专员绩效薪酬专员绩效考核专员岗位职责.doc
- 【岗位说明】人力资源岗位说明书02.doc
- 【岗位说明】人力资源部岗位设置岗位职责.doc
- 【岗位说明】人力资源部岗位职责说明书.doc
- 【岗位说明】人力资源经理岗位职责说明书.doc
- 【岗位说明】人力资源部岗位说明书.doc
- 【岗位说明】人力资源部门职责及部门岗位说明书.doc
- 【岗位说明】人力资源部经理岗位职责.doc
- 【岗位说明】薪酬绩效专员岗位职责说明书.doc
- 【岗位说明】社保专员岗位说明书.doc
- 【岗位说明】人力资源总监岗位职责02.doc
- 【岗位说明】招聘专员岗位职责说明书.doc
- 【岗位说明】员工关系专员职位说明书.xls
- 【岗位说明】广告公司岗位职责02.doc
- 【岗位说明】广告公司岗位职责01.doc
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功