[原创] shell版俄罗斯方块 - ChinaUnix.net
[原创] shell版俄罗斯方块
http://www.chinaunix.net 作者:&&发表于: 14:24:38
把注释加进去了,可能不是很详尽,
只希望能把问题表现的清楚一点
感谢各位兄弟的捧场,
属于旧瓶装新酒了,呵呵
如果你的终端可以显示出颜色,效果会好点
运行于GNU&bash,&version&2.05a.0(1)-release&(i686-pc-linux-gnu)
---------------------------------------------------
果然在新的ubuntu下不能运行了,需要将类似\33的地方改成\033,
感谢网友thinux和guotao_buaa帮忙修改,已经将新的代码补入。
#!/bin/bash
#&Tetris&Game
#&10.21.2003&xhchen&[email].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&*&iTrayW&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&"MyE"&INT&TERM
trap&"MyExitNoS"&$sigExit
echo&-ne&"\033[?25l"
#读取输入。注-s不回显,-n读到一个字符立即返回
read&-s&-n&1&key
aKey[0]=${aKey[1]}
aKey[1]=${aKey[2]}
aKey[2]=$key
#判断输入了何种键
if&[[&$key&==&$cESC&&&&${aKey[1]}&==&$cESC&]]
elif&[[&${aKey[0]}&==&$cESC&&&&${aKey[1]}&==&"["&]]
if&[[&$key&==&"A"&]];&then&sig=$sigRotate #&向上键&
elif&[[&$key&==&"B"&]];&then&sig=$sigDown #&向下键&
elif&[[&$key&==&"D"&]];&then&sig=$sigLeft #&向左键&
elif&[[&$key&==&"C"&]];&then&sig=$sigRight #&向右键&
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"&]]
if&[[&$sig&!=&0&]]
#向另一进程发送消息
kill&-$sig&$pidDisplayer
#退出前的恢复
function&MyExitNoSub()
{
#恢复终端属性
stty&$sTTY
((y&=&iTop&+&iTrayHeight&+&4))
echo&-e&"\033[?25h\033[${y};0H"
function&MyExit()
{
#通知显示进程需要退出
kill&-$sigExit&$pidDisplayer
MyExitNoSub
}
#处理显示和游戏流程的主函数
function&RunAsDisplayer()
{
local&sigThis
#挂载各种信号的处理函数
trap&"sig=$sigR"&$sigRotate
trap&"sig=$sigL"&$sigLeft
trap&"sig=$sigR"&$sigRight
trap&"sig=$sigD"&$sigDown
trap&"sig=$sigAllD"&$sigAllDown
trap&"ShowE"&$sigExit
#根据当前的速度级iLevel不同,设定相应的循环的次数
for&((i&=&0;&i&&&21&-&iL&i++))
sleep&0.02
sigThis=$sig
#根据sig变量判断是否接受到相应的信号
if&((sigThis&==&sigRotate));&then&BoxR #旋转
elif&((sigThis&==&sigLeft));&then&BoxL #左移一列
elif&((sigThis&==&sigRight));&then&BoxR #右移一列
elif&((sigThis&==&sigDown));&then&BoxD #下落一行
elif&((sigThis&==&sigAllDown));&then&BoxAllD #下落到底
#kill&-$sigDown&$$
BoxDown #下落一行
#BoxMove(y,&x),&测试是否可以把移动中的方块移到(x,&y)的位置,&返回0则可以,&1不可以
function&BoxMove()
{
local&j&i&x&y&xTest&yTest
for&((j&=&0;&j&&&8;&j&+=&2))
((i&=&j&+&1))
((y&=&${boxCur[$j]}&+&yTest))
((x&=&${boxCur[$i]}&+&xTest))
if&((&y&&&0&||&y&&=&iTrayHeight&||&x&&&0&||&x&&=&iTrayWidth))
#撞到墙壁了
if&((${iMap[y&*&iTrayWidth&+&x]}&!=&-1&))
#撞到其他已经存在的方块了
return&0;
}
#将当前移动中的方块放到背景方块中去,
#并计算新的分数和速度级。(即一次方块落到底部)
function&Box2Map()
{
local&j&i&x&y&xp&yp&line
#将当前移动中的方块放到背景方块中去
for&((j&=&0;&j&&&8;&j&+=&2))
((i&=&j&+&1))
((y&=&${boxCur[$j]}&+&boxCurY))
((x&=&${boxCur[$i]}&+&boxCurX))
((i&=&y&*&iTrayWidth&+&x))
iMap[$i]=$cBoxCur
#消去可被消去的行
for&((j&=&0;&j&&&iTrayWidth&*&iTrayH&j&+=&iTrayWidth))
for&((i&=&j&+&iTrayWidth&-&1;&i&&=&j;&i--))
if&((${iMap[$i]}&==&-1));&then&&fi
if&((i&&=&j));&then&&fi
((line++))
for&((i&=&j&-&1;&i&&=&0;&i--))
((x&=&i&+&iTrayWidth))
iMap[$x]=${iMap[$i]}
for&((i&=&0;&i&&&iTrayW&i++))
iMap[$i]=-1
if&((line&==&0));&then&&fi
#根据消去的行数line计算分数和速度级
((x&=&iLeft&+&iTrayWidth&*&2&+&7))
((y&=&iTop&+&11))
((iScore&+=&line&*&2&-&1))
#显示新的分数
echo&-ne&"\033[1m\033[3${cScoreValue}m\033[${y};${x}H${iScore}&&&&&&&&&"
if&((iScore&%&iScoreEachLevel&&&line&*&2&-&1))
if&((iLevel&&&20))
((iLevel++))
((y&=&iTop&+&14))
#显示新的速度级
echo&-ne&"\033[3${cScoreValue}m\033[${y};${x}H${iLevel}&&&&&&&&"
echo&-ne&"\033[0m"
#重新显示背景方块
for&((y&=&0;&y&&&iTrayH&y++))
((yp&=&y&+&iTrayTop&+&1))
((xp&=&iTrayLeft&+&1))
((i&=&y&*&iTrayWidth))
echo&-ne&"\033[${yp};${xp}H"
for&((x&=&0;&x&&&iTrayW&x++))
((j&=&i&+&x))
if&((${iMap[$j]}&==&-1))
echo&-ne&"&&"
echo&-ne&"\033[1m\033[7m\033[3${iMap[$j]}m\033[4${iMap[$j]}m[]\033[0m"
#下落一行
function&BoxDown()
{
((y&=&boxCurY&+&1)) #新的y坐标
if&BoxMove&$y&$boxCurX #测试是否可以下落一行
s="`DrawCurBox&0`" #将旧的方块抹去
((boxCurY&=&y))
s="$s`DrawCurBox&1`" #显示新的下落后方块
echo&-ne&$s
#走到这儿,&如果不能下落了
#将当前移动中的方块贴到背景方块中
RandomBox #产生新的方块
#左移一列
function&BoxLeft()
{
((x&=&boxCurX&-&1))
if&BoxMove&$boxCurY&$x
s=`DrawCurBox&0`
((boxCurX&=&x))
s=$s`DrawCurBox&1`
echo&-ne&$s
#右移一列
function&BoxRight()
{
((x&=&boxCurX&+&1))
if&BoxMove&$boxCurY&$x
s=`DrawCurBox&0`
((boxCurX&=&x))
s=$s`DrawCurBox&1`
echo&-ne&$s
#下落到底
function&BoxAllDown()
{
local&k&j&i&x&y&iDown&s
iDown=$iTrayHeight
#计算一共需要下落多少行
for&((j&=&0;&j&&&8;&j&+=&2))
((i&=&j&+&1))
((y&=&${boxCur[$j]}&+&boxCurY))
((x&=&${boxCur[$i]}&+&boxCurX))
for&((k&=&y&+&1;&k&&&iTrayH&k++))
((i&=&k&*&iTrayWidth&+&x))
if&((&${iMap[$i]}&!=&-1));&then&&fi
((k&-=&y&+&1))
if&((&$iDown&&&$k&));&then&iDown=$k;&fi
s=`DrawCurBox&0` #将旧的方块抹去
((boxCurY&+=&iDown))
s=$s`DrawCurBox&1` #显示新的下落后的方块
echo&-ne&$s
#将当前移动中的方块贴到背景方块中
RandomBox #产生新的方块
}
#旋转方块
function&BoxRotate()
{
local&iCount&iTestRotate&boxTest&j&i&s
iCount=${countBox[$iBoxCurType]} #当前的方块经旋转可以产生的样式的数目
#计算旋转后的新的样式
((iTestRotate&=&iBoxCurRotate&+&1))
if&((iTestRotate&&=&iCount))
((iTestRotate&=&0))
#更新到新的样式,&保存老的样式(但不显示)
for&((j&=&0,&i&=&(${offsetBox[$iBoxCurType]}&+&$iTestRotate)&*&8;&j&&&8;&j++,&i++))
boxTest[$j]=${boxCur[$j]}
boxCur[$j]=${box[$i]}
if&BoxMove&$boxCurY&$boxCurX #测试旋转后是否有空间放的下
#抹去旧的方块
for&((j&=&0;&j&&&8;&j++))
boxCur[$j]=${boxTest[$j]}
s=`DrawCurBox&0`
#画上新的方块
for&((j&=&0,&i&=&(${offsetBox[$iBoxCurType]}&+&$iTestRotate)&*&8;&j&&&8;&j++,&i++))
boxCur[$j]=${box[$i]}
s=$s`DrawCurBox&1`
echo&-ne&$s
iBoxCurRotate=$iTestRotate
#不能旋转,还是继续使用老的样式
for&((j&=&0;&j&&&8;&j++))
boxCur[$j]=${boxTest[$j]}
#DrawCurBox(bDraw),&绘制当前移动中的方块,&bDraw为1,&画上,&bDraw为0,&抹去方块。
function&DrawCurBox()
{
local&i&j&t&bDraw&sBox&s
if&((&bDraw&==&0&))
sBox="\040\040"
s=$s"\033[1m\033[7m\033[3${cBoxCur}m\033[4${cBoxCur}m"
for&((j&=&0;&j&&&8;&j&+=&2))
((i&=&iTrayTop&+&1&+&${boxCur[$j]}&+&boxCurY))
((t&=&iTrayLeft&+&1&+&2&*&(boxCurX&+&${boxCur[$j&+&1]})))
#\033[y;xH,&光标到(x,&y)处
s=$s"\033[${i};${t}H${sBox}"
s=$s"\033[0m"
echo&-n&$s
}
#更新新的方块
function&RandomBox()
{
local&i&j&t
#更新当前移动的方块
iBoxCurType=${iBoxNewType}
iBoxCurRotate=${iBoxNewRotate}
cBoxCur=${cBoxNew}
for&((j&=&0;&j&&&${#boxNew[@]};&j++))
boxCur[$j]=${boxNew[$j]}
#显示当前移动的方块
if&((&${#boxCur[@]}&==&8&))
#计算当前方块该从顶端哪一行"冒"出来
for&((j&=&0,&t&=&4;&j&&&8;&j&+=&2))
if&((${boxCur[$j]}&&&t));&then&t=${boxCur[$j]};&fi
((boxCurY&=&-t))
for&((j&=&1,&i&=&-4,&t&=&20;&j&&&8;&j&+=&2))
if&((${boxCur[$j]}&&&i));&then&i=${boxCur[$j]};&fi
if&((${boxCur[$j]}&&&t));&then&t=${boxCur[$j]};&fi
((boxCurX&=&(iTrayWidth&-&1&-&i&-&t)&/&2))
#显示当前移动的方块
echo&-ne&`DrawCurBox&1`
#如果方块一出来就没处放,Game&over!
if&!&BoxMove&$boxCurY&$boxCurX
kill&-$sigExit&${PPID}
#清除右边预显示的方块
for&((j&=&0;&j&&&4;&j++))
((i&=&iTop&+&1&+&j))
((t&=&iLeft&+&2&*&iTrayWidth&+&7))
echo&-ne&"\033[${i};${t}H&&&&&&&&"
#随机产生新的方块
((iBoxNewType&=&RANDOM&%&${#offsetBox[@]}))
((iBoxNewRotate&=&RANDOM&%&${countBox[$iBoxNewType]}))
for&((j&=&0,&i&=&(${offsetBox[$iBoxNewType]}&+&$iBoxNewRotate)&*&8;&j&&&8;&j++,&i++))
boxNew[$j]=${box[$i]};
((cBoxNew&=&${colorTable[RANDOM&%&${#colorTable[@]}]}))
#显示右边预显示的方块
echo&-ne&"\033[1m\033[7m\033[3${cBoxNew}m\033[4${cBoxNew}m"
for&((j&=&0;&j&&&8;&j&+=&2))
((i&=&iTop&+&1&+&${boxNew[$j]}))
((t&=&iLeft&+&2&*&iTrayWidth&+&7&+&2&*&${boxNew[$j&+&1]}))
echo&-ne&"\033[${i};${t}H[]"
echo&-ne&"\033[0m"
}
#初始绘制
function&InitDraw()
{
RandomBox #随机产生方块,这时右边预显示窗口中有方快了
RandomBox #再随机产生方块,右边预显示窗口中的方块被更新,原先的方块将开始下落
local&i&t1&t2&t3
echo&-ne&"\033[1m"
echo&-ne&"\033[3${cBorder}m\033[4${cBorder}m"
((t2&=&iLeft&+&1))
((t3&=&iLeft&+&iTrayWidth&*&2&+&3))
for&((i&=&0;&i&&&iTrayH&i++))
((t1&=&i&+&iTop&+&2))
echo&-ne&"\033[${t1};${t2}H||"
echo&-ne&"\033[${t1};${t3}H||"
((t2&=&iTop&+&iTrayHeight&+&2))
for&((i&=&0;&i&&&iTrayWidth&+&2;&i++))
((t1&=&i&*&2&+&iLeft&+&1))
echo&-ne&"\033[${iTrayTop};${t1}H=="
echo&-ne&"\033[${t2};${t1}H=="
echo&-ne&"\033[0m"
#显示"Score"和"Level"字样
echo&-ne&"\033[1m"
((t1&=&iLeft&+&iTrayWidth&*&2&+&7))
((t2&=&iTop&+&10))
echo&-ne&"\033[3${cScore}m\033[${t2};${t1}HScore"
((t2&=&iTop&+&11))
echo&-ne&"\033[3${cScoreValue}m\033[${t2};${t1}H${iScore}"
((t2&=&iTop&+&13))
echo&-ne&"\033[3${cScore}m\033[${t2};${t1}HLevel"
((t2&=&iTop&+&14))
echo&-ne&"\033[3${cScoreValue}m\033[${t2};${t1}H${iLevel}"
echo&-ne&"\033[0m"
}
#退出时显示GameOVer!
function&ShowExit()
{
((y&=&iTrayHeight&+&iTrayTop&+&3))
echo&-e&"\033[${y};0HGameOver!\033[0m"
#显示用法.
function&Usage
{
cat&&&&EOF
Usage:&$APP_NAME
Start&tetris&game.
&&-h,&--help&&&&&&&&&&&&&&display&this&help&and&exit
&&&&&&--version&&&&&&&&&&&output&version&information&and&exit
EOF
}
#游戏主程序在这儿开始.
if&[[&"$1"&==&"-h"&||&"$1"&==&"--help"&]];&then
Usage
elif&[[&"$1"&==&"--version"&]];&then
echo&"$APP_NAME&$APP_VERSION"
elif&[[&"$1"&==&"--show"&]];&then
#当发现具有参数--show时,运行显示函数
RunAsDisplayer
else
bash&$0&--show& #以参数--show将本程序再运行一遍
RunAsKeyReceiver&$! #以上一行产生的进程的进程号作为参数
fi
[&本帖最后由&飞灰橙&于&&13:30&编辑&]
& 回复于: 11:13:14
强! 都这么厉害。。。 分特分特
& 回复于: 11:57:18
真历害!!!
& 回复于: 13:01:58
& 回复于: 13:56:03
哪位老大能告诉我bash哪里有下载?我的SCO里没有,我想玩玩试试....
& 回复于: 14:50:57
飞灰橙兄,有csh,ksh,sh版for&unix&的吗???谢谢!!!
& 回复于: 14:53:48
是呀!要是能在BSH或KSH下运行就好了
& 回复于: 15:02:55
引用:原帖由&"herl"]有csh,ksh,sh版for&unix&的吗???谢谢!!!&发表:
没有哎,抱歉抱歉&:wink:
& 回复于: 16:07:12
:shock:&
pf的一塌糊涂
& 回复于: 16:26:34
太强了
这是我见过最强的shell程序!
pfpfpfpfpfpfpfpfpfpfpfpfpfpfpfpf!
& 回复于: 21:44:16
虽然我还没能试玩一下这个游戏,但是我也十分佩服飞灰橙兄弟...........
& 回复于: 21:44:57
真佩服楼主的编程能力!&:D
& 回复于: 08:19:04
& 回复于: 09:31:38
我是特意登陆道谢的
& 回复于: 09:57:36
& 回复于: 09:58:13
pf,pf................................................................!
&:lol:
& 回复于: 13:21:25
:twisted:&[size=18][color=red]强烈要求楼主讲一下算法&&强烈要求&强烈要求&强烈要求&强烈要求&
外加比较详细的注释[/color][/size]
& 回复于: 19:59:41
有些注释就更加完美了。。。
& 回复于: 20:00:56
骇&:shock:
& 回复于: 11:37:46
[user@redhat9&user]$&bash&shell_fk.sh
:&command¬&found:
:&command¬&found:
:&command¬&found:
:&command¬&found:
:&command¬&found:
:&command¬&found0:
:&command¬&found1:
:&command¬&found2:
:&command¬&found3:
:&command¬&found4:
:&command¬&found6:
:&command¬&found7:
'hell_fk.sh:&line&18:&syntax&error&near&unexpected&token&`
'hell_fk.sh:&line&18:&`(iTrayLeft&=&iLeft&+&2)
[user@redhat9&user]$
& 回复于: 10:13:05
楼主,这几天不在,你又在着吓人啦,哈哈,太佩服你了。
& 回复于: 13:33:46
太强了&
&:o
& 回复于: 21:02:11
真是太厉害了,给些解释吧。
& 回复于: 06:43:49
厉害,顶!
& 回复于: 13:32:00
强~
虽然没弄来玩,但看这一把的代码就头大了:)
带点注视那太完美了
& 回复于: 18:10:34
64:&syntax&error&near&unexpected&token&`(('
for&((&i&=&0;&i&&&iTrayHeight&*&iTrayW&i++&))&;&do&iMap[$i]=-1;&done
谁知道怎么回事?
& 回复于: 19:49:31
& 回复于: 20:14:35
引用:原帖由&"飞灰橙"]&发表:
[root@uclinux&game]#&sh&eluosi.sh&
eluosi.sh:&eluosi.sh:&command¬&found
eluosi.sh:&kill:&(32353)&-&No&such&process
eluosi.sh:&kill:&(32353)&-&No&such&process
eluosi.sh:&kill:&(32353)&-&No&such&process
eluosi.sh:&kill:&(32353)&-&No&such&process
eluosi.sh:&kill:&(32353)&-&No&such&process
eluosi.sh:&kill:&(32353)&-&No&such&process
请教楼主,这是怎么回事。
bash&版本:
[color=red]GNU&bash,&version&2.05a.0(1)-release-(i686-pc-linux-gnu)[/color]
& 回复于: 21:52:11
引用:原帖由&"fightforever"&发表:done
谁知道怎么回事?
我也遇到过。
我先是在S8(bash&v2.0.4)下试的,也是报这个错。
后来是在mandrake&8(linux)下试的,就OK。
& 回复于: 08:49:54
引用:原帖由&"yoursmile"][root@uclinux&game&发表:#&sh&eluosi.sh&
eluosi.sh:&eluosi.sh:&command¬&found&
eluosi.sh:&kill:&(32353)&-&No&such&process&
eluosi.sh:&kill:&(32353)&-&No&such&process&
eluosi.sh:&kill:&(32353)&-&No&such&process&
eluosi.sh:&kill:&(32353)&-&No&such&process&
eluosi.sh:&kill:&(32353)&-&No&such&process&
eluosi.sh:&kill:&(32353)&-&No&such&process
以前是直接./eluosi.sh运行的,没注意到这个问题,呵呵
将后面$0&--show&改为bash&$0&--show&就ok了。
& 回复于: 17:56:36
楼上的高手,给些注释吧,大家都看得很头疼
& 回复于: 14:10:19
兄弟们说的极是,
注释少了以后自己都记不起来。
最近有点事情急赶,
过段时间我会把注释加上来:)
& 回复于: 15:18:14
waiting...
& 回复于: 13:24:17
NB死了,老大,我拜你为师傅吧??好不好?
& 回复于: 14:05:16
Ok&Ok&Ding
& 回复于: 00:57:35
引用:原帖由&"光明晓仙"]哪位老大能告诉我bash哪里有下载?我的SCO里没有,我想玩玩试试....&发表:
/softdown/show.asp?id=211
& 回复于: 15:37:30
你太利害了,能给小弟写一个SHELL&的终端打印程序吗?如行,小弟万分感谢!
E—mail:&
&&&&&&&&&&&&&&
& 回复于: 15:44:18
真是强啊&&&不过我发现了一个问题&&我在linux下运行的&&当用ctrl+z将游戏暂停后&&在用fg命令将游戏调回来后&&控制游戏的方向键就不好用了
& 回复于: 21:28:55
引用:原帖由&"bac1"]真是强啊&&&不过我发现了一个问题&&我在linux下运行的&&当用ctrl+z将游戏暂停后&&在用fg命令将游戏调回来后&&控制游戏的方向键就不好用了&发表:
果然是个问题??
& 回复于: 10:11:42
shell高手,pfpf
& 回复于: 10:19:41
& 回复于: 11:28:58
不错呀,佩服!!!&:P
& 回复于: 17:16:32
要下SCO怎么装BASH?
& 回复于: 17:54:52
在sunos&5。8下报错
line&74:&syntax&error&near&unexpected&token&`(('
&line&74:&`for&((i&=&0;&i&&&iTrayHeight&*&iTrayW&i++));&do&iMap[$i]=-1;&done&'
& 回复于: 08:48:48
引用:原帖由&"用钱的兜兜"]done&'&发表:
bash&--version&出来是多少?
& 回复于: 14:59:26
佩服佩服佩服佩服
& 回复于: 22:30:42
& 回复于: 11:58:56
& 回复于: 19:03:55
佩服,佩服
& 回复于: 19:20:14
昨天COPY试玩了一下,震撼!!
居然用SHELL写的
一个字---牛!!
& 回复于: 03:35:12
我咋运行不了?&&ft
& 回复于: 09:38:33
佩服佩服!
& 回复于: 14:50:53
程序运行中好像有问题,会有一个方块停在中间的现象(腾空,并没有到最低下),不知大家有没有这个问题?
GNU&bash,&version&2.05b.0(1)-release&(i386-redhat-linux-gnu)
& 回复于: 15:41:44
这论坛里高手如云啊,向你们学习!
& 回复于: 16:40:38
都不知道怎么学的,搞得这么精.
飞灰橙:&你知道怎么在nawk中自定义函数吗??????
& 回复于: 22:24:03
& 回复于: 09:32:50
在Tru64&UNIX下怎么不可以呢?可能是定义数组的时候Tru64&UNIX跟楼主的不同
& 回复于: 14:10:29
& 回复于: 04:13:06
好利害,好快啊,死得也快?
level&0&都过不了。?!?死了。。。?运行截图。。
& 回复于: 04:25:30
真是高人啊,&这样的shell也能写出来。读也读不懂,有些变量类型都没见过?!
box=(${box0[@]}&${box1[@]}&${box2[@]}&${box3[@]}&${box4[@]}&${box5[@]}&${box6[@]})
这索什么类型??
& 回复于: 12:17:26
玩过了,强人啊
& 回复于: 17:33:31
佩服地一塌糊涂!
& 回复于: 11:52:47
收藏起来,&谢谢
& 回复于: 01:30:04
PF啊!要多少年功力才可以这样NB啊?
& 回复于: 17:46:30
汗~~大汗,都脱水了。
& 回复于: 08:44:21
顶一下,虽然看不懂的东西太多
& 回复于: 10:50:18
牛B,强人,
& 回复于: 15:50:44
hehe&
应该加一个"暂停"的控制就好了
& 回复于: 10:50:00
强。。。。
& 回复于: 11:43:41
GNU&bash,&version&2.05b.0(1)-release&(i686-pc-linux-gnu)&
报错咧
GNU&bash,&version&2.05a.0(1)-release&(i686-pc-linux-gnu)&
晕呀,就高级了那么一点点
& 回复于: 15:59:48
弓虽,就一个字
& 回复于: 20:57:33
pf的五体投地。。。可惜我只有sco玩不了。。
& 回复于: 20:35:39
& 回复于: 21:57:49
大哥,请问if&[&$key&=&$cESC&]&&[&${aKey[1]}&=&$cESC&]和if&[[&$key&==&$cESC&&&&${aKey[1]}&==&$cESC&]]有什么区别?您为什么总是用后者?
& 回复于: 23:55:28
佩服的一塌糊涂!。看来我白活了这么久了!!!!
& 回复于: 09:34:30
& 回复于: 17:09:24
好强啊啊啊
& 回复于: 15:04:52
牛人,超级PF,好好学习,那天争取也弄一个玩玩
& 回复于: 10:43:23
太强了!!!!!!!!!!!!!!!!!!!111
佩服!!!!!!!!!!!!!!!!!!!!!!!!!!!
& 回复于: 10:48:35
我的天~~~~~~~~~
简直是天书
& 回复于: 19:41:18
为什么我在ubuntu7.04上执行不能绘制图形呢?显示成这个样子:
\33[3;30H&&&&&&&&\33[4;30H&&&&&&&&\33[5;30H&&&&&&&&\33[6;30H&&&&&&&&\33[1m\33[7m\33[35m\33[45m\33[3;32H[]\33[4;30H[]\33[4;32H[]
& 回复于: 12:11:44
强人。。。PFPF
& 回复于: 13:32:54
& 回复于: 13:08:54
我建议楼主介绍一下自己的学习经历,给大家讲讲怎么到达这样的境界。
& 回复于: 16:17:32
& 回复于: 16:28:36
& 回复于: 20:01:06
一斑斑而已
& 回复于: 20:09:11
引用:原帖由&StallmanRichard&于&&20:01&发表&[url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=7073054&ptid=184858]
一斑斑而已&
原来是RMS如是说&&那当然一般般拉
& 回复于: 09:36:37
虽然玩不了,但非常佩服
GNU&bash,&version&3.00.15(1)-release&(i686-redhat-linux-gnu)
Copyright&(C)&2004&Free&Software&Foundation,&Inc.
& 回复于: 19:13:39
& 回复于: 14:11:24
能不能稍微讲解一下,
& 回复于: 14:44:05
试了一下,简直太牛X了。不得不服啊。shell能写到这个程度不是一般的牛。
& 回复于: 23:00:25
& 回复于: 09:58:24
不看不知道,一看吓一跳,要好好学学!
& 回复于: 14:38:22
:em03:&:em03:厉害啊&&&刚试完了下.....
& 回复于: 16:25:53
5年前我就看到台湾的一哥们编过,估计有抄袭的可能
& 回复于: 22:19:19
不看不知道&&一看跳一跳&&嘿嘿
& 回复于: 01:30:24
太有才了,不顶不行啊
& 回复于: 10:29:07
这个网上到处都有!
& 回复于: 14:27:15
请问在hp-unix&可以运行吗
我再xmanger下面运行显示这样.[&本帖最后由&wooqooo&于&&14:31&编辑&]
& 回复于: 22:53:22
强人。你是晚辈的偶像
& 回复于: 09:33:58
---------------------------------
& 回复于: 10:32:13
:mrgreen:&:mrgreen:&:mrgreen:&:mrgreen:&
& 回复于: 11:45:21
强&&~~~~~~~~~~~
刚在unix上测试通过
& 回复于: 22:50:58
刚发现有这个东西,shell实在是太牛X了!
五体投地!
& 回复于: 23:28:02
希望楼主能讲解一下,其中有很多语法都看不懂,或者提供些学习shell&的途径。
& 回复于: 23:29:39
& 回复于: 17:42:12
[root@v1&root]#&bash&--version
GNU&bash,&version&2.05b.0(1)-release&(i386-redhat-linux-gnu)
Copyright&(C)&2002&Free&Software&Foundation,&Inc.
[root@v1&root]#&sh&russiagame.sh&
:&command¬&found&4:&
:&command¬&found&14:&
'ussiagame.sh:&line&18:&syntax&error&near&unexpected&token&`
'ussiagame.sh:&line&18:&`((iTrayLeft&=&iLeft&+&2))
& 回复于: 02:40:11
是楼主的原创代码么?钦佩啊!要是能再写出带加减号和炸弹等复杂的就更无人能敌了!
& 回复于: 10:45:29
刚才玩儿了,太强了。。
& 回复于: 19:00:19
佩服楼主。
& 回复于: 22:13:11
佩服!!
好好学习一下才行!
& 回复于: 22:07:23
我要疯了,这都可以
顶礼膜拜
& 回复于: 15:35:36
太强了,&&太强了,今天&才看到&~~~&
&&&&&&&&&&以前看到一个用&GNU 方式的C 语言的 "hello&world&"&, 佩服的不行,
今天又看到这样的程序 ,感觉 有点 ~~~~~~~ 呵呵,强人,只能说~~
& 回复于: 15:59:55
我望着遥远的那座山,不知何时才能爬到山顶……
佩服的四爪朝天!:shock:[&本帖最后由&不想在家喂猪&于&&16:01&编辑&]
& 回复于: 11:56:34
试用过了&&太牛X了
& 回复于: 01:07:44
引用:原帖由&feiyuw&于&&19:41&发表&[url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=6918852&ptid=184858]
为什么我在ubuntu7.04上执行不能绘制图形呢?显示成这个样子:
\33[3;30H&&&&&&&&\33[4;30H&&&&&&&&\33[5;30H&&&&&&&&\33[6;30H&&&&&&&&\33[1m\33[7m\33[35m\33[45m\33[3;32H[]\33[4;30H[]\33[4;32H[]&
将33替换成033,&40替换成040就可以了~~~
&sed&'s/33/033/g'&tetris.sh&|&sed&'s/40/040/g'&&tetris-fix.sh
还有vim脚本写的,呵呵http://www.vim.org/scripts/script.php?script_id=172
& 回复于: 09:19:00
强大得一塌糊涂啊!~~~&&&&:em09:
& 回复于: 12:25:23
vim忒强大啦!
& 回复于: 14:59:20
今天才看到,太NB了。
原来shell也这么牛,学习啊!!
& 回复于: 16:38:07
主席紧紧地握着他的手。。热泪盈眶~
& 回复于: 10:11:02
偶像啊,中午下班拿出来玩一玩
& 回复于: 11:19:23
厉害!好好学习!
& 回复于: 20:33:24
前面已经有很多人夸奖过了,不过我还是要说,太他娘的强大了
& 回复于: 13:56:24
shell版俄罗斯方块
真历害!!!怕怕!!
& 回复于: 17:04:00
楼主是强人,进百度应该没问题。
& 回复于: 17:24:26
神人&~~
没有耐心读完&能简单说下思路吗?
& 回复于: 19:48:31
强啊,虽然知道shell可以编写程序,但是以往看到的都是一些环境定制,文件处理方面的。
& 回复于: 16:32:24
佩服,真是望尘莫及啊,向你学习啊,以后不玩游戏了,汗
& 回复于: 23:20:44
钢铁是怎样炼成的???
& 回复于: 18:33:20
佩服,实在是高!我要好好研究研究!
& 回复于: 08:18:25
真的太强了&:shock:
& 回复于: 10:23:19
佩服,研究中!
谢谢多共享这类脚本
& 回复于: 13:23:03
太强了,学习
& 回复于: 14:52:29
厉害,简直可以用恐怖形容
& 回复于: 17:31:51
太牛了,使劲顶!!
& 回复于: 00:46:20
强悍啊,实在佩服
& 回复于: 15:44:54
不能运行,有报错
& 回复于: 22:55:26
写得不错!:em17:
& 回复于: 14:24:38
OH&MY&GOD&!!!!!!!!!!!!
原文链接:
转载请注明作者名及原文出处