shell编程俄罗斯方块.docx

上传人:b****6 文档编号:4018376 上传时间:2022-11-27 格式:DOCX 页数:16 大小:17.57KB
下载 相关 举报
shell编程俄罗斯方块.docx_第1页
第1页 / 共16页
shell编程俄罗斯方块.docx_第2页
第2页 / 共16页
shell编程俄罗斯方块.docx_第3页
第3页 / 共16页
shell编程俄罗斯方块.docx_第4页
第4页 / 共16页
shell编程俄罗斯方块.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

shell编程俄罗斯方块.docx

《shell编程俄罗斯方块.docx》由会员分享,可在线阅读,更多相关《shell编程俄罗斯方块.docx(16页珍藏版)》请在冰豆网上搜索。

shell编程俄罗斯方块.docx

shell编程俄罗斯方块

#!

/bin/bash

#TetrisGame

#10.21.2003xhchen

###############################################################################

#因为HP上没有usleepbyCHENCHENG

###############################################################################

##include

##include

#

#intmain(intargc,char**argv)

#{

#intnRet;

#nRet=usleep(atol(argv[1]));

#//printf("%ld%d\n",atol(argv[1]),nRet);

#return0;

#}

###############################################################################

#colordefinition

cRed=1

cGreen=2

cYellow=3

cBlue=4

cFuchsia=5

cCyan=6

cWhite=7

colorTable=($cRed$cGreen$cYellow$cBlue$cFuchsia$cCyan$cWhite)

#size&position

iLeft=3

iTop=2

((iTrayLeft=iLeft+2))

((iTrayTop=iTop+1))

((iTrayWidth=10))

((iTrayHeight=15))

#styledefinition

cBorder=$cGreen

cScore=$cFuchsia

cScoreValue=$cCyan

#controlsignal

sigRotate=25

sigLeft=26

sigRight=27

sigDown=28

sigAllDown=29

sigExit=30

box0=(00011011)

box1=(0212223210111213)

box2=(0001111201101120)

box3=(0102101100101121)

box4=(01021121101112220111202100101112)

box5=(01112122101112200001112102101112)

box6=(01111221101112210110112101101112)

box=(${box0[@]}${box1[@]}${box2[@]}${box3[@]}${box4[@]}${box5[@]}${box6[@]})

countBox=(1222444)

offsetBox=(013571115)

iScoreEachLevel=50#begreaterthan7

#Runtimedata

sig=0

iScore=0

iLevel=0

boxNew=()#newbox

cBoxNew=0#newboxcolor

iBoxNewType=0#newboxtype

iBoxNewRotate=0#newboxrotatedegree

boxCur=()#currentbox

cBoxCur=0#currentboxcolor

iBoxCurType=0#currentboxtype

iBoxCurRotate=0#currentboxrotatedegree

boxCurX=-1#currentXposition

boxCurY=-1#currentYposition

iMap=()

for((i=0;i

functionRunAsKeyReceiver()

{

localpidDisplayerkeyaKeysigcESCsTTY

pidDisplayer=$1

aKey=(000)

cESC=`echo-ne"\33"`

cSpace=`echo-ne"\40"`

sTTY=`stty-g`

trap"MyExit;"INTTERM

trap"MyExitNoSub;"$sigExit

echo-ne"\33[?

25l"

while[[1]]

do

read-s-n1key

aKey[0]=${aKey[1]}

aKey[1]=${aKey[2]}

aKey[2]=$key

sig=0

if[[$key==$cESC&&${aKey[1]}==$cESC]]

then

MyExit

elif[[${aKey[0]}==$cESC&&${aKey[1]}=="["]]

then

if[[$key=="A"]];thensig=$sigRotate

elif[[$key=="B"]];thensig=$sigDown

elif[[$key=="D"]];thensig=$sigLeft

elif[[$key=="C"]];thensig=$sigRight

fi

elif[[$key=="W"||$key=="w"]];thensig=$sigRotate

elif[[$key=="S"||$key=="s"]];thensig=$sigDown

elif[[$key=="A"||$key=="a"]];thensig=$sigLeft

elif[[$key=="D"||$key=="d"]];thensig=$sigRight

elif[["[$key]"=="[]"]];thensig=$sigAllDown

elif[[$key=="Q"||$key=="q"]]

then

MyExit

fi

if[[$sig!

=0]]

then

kill-$sig$pidDisplayer

fi

done

}

functionMyExitNoSub()

{

localy

stty$sTTY

((y=iTop+iTrayHeight+4))

echo-e"\33[?

25h\33[${y};0H"

exit

}

functionMyExit()

{

kill-$sigExit$pidDisplayer

MyExitNoSub

}

functionRunAsDisplayer()

{

localsigThis

InitDraw

trap"sig=$sigRotate;"$sigRotate

trap"sig=$sigLeft;"$sigLeft

trap"sig=$sigRight;"$sigRight

trap"sig=$sigDown;"$sigDown

trap"sig=$sigAllDown;"$sigAllDown

trap"ShowExit;"$sigExit

while[[1]]

do

for((i=0;i<21-iLevel;i++))

do

usleep20000

sigThis=$sig

sig=0

if((sigThis==sigRotate));thenBoxRotate;

elif((sigThis==sigLeft));thenBoxLeft;

elif((sigThis==sigRight));thenBoxRight;

elif((sigThis==sigDown));thenBoxDown;

elif((sigThis==sigAllDown));thenBoxAllDown;

fi

done

#kill-$sigDown$$

BoxDown

done

}

functionBoxMove()

{

localjixyxTestyTest

yTest=$1

xTest=$2

for((j=0;j<8;j+=2))

do

((i=j+1))

((y=${boxCur[$j]}+yTest))

((x=${boxCur[$i]}+xTest))

if((y<0||y>=iTrayHeight||x<0||x>=iTrayWidth))

then

return1

fi

if((${iMap[y*iTrayWidth+x]}!

=-1))

then

return1

fi

done

return0;

}

functionBox2Map()

{

localjixyxpypline

for((j=0;j<8;j+=2))

do

((i=j+1))

((y=${boxCur[$j]}+boxCurY))

((x=${boxCur[$i]}+boxCurX))

((i=y*iTrayWidth+x))

iMap[$i]=$cBoxCur

done

line=0

for((j=0;j

do

for((i=j+iTrayWidth-1;i>=j;i--))

do

if((${iMap[$i]}==-1));thenbreak;fi

done

if((i>=j));thencontinue;fi

((line++))

for((i=j-1;i>=0;i--))

do

((x=i+iTrayWidth))

iMap[$x]=${iMap[$i]}

done

for((i=0;i

do

iMap[$i]=-1

done

done

if((line==0));thenreturn;fi

((x=iLeft+iTrayWidth*2+7))

((y=iTop+11))

((iScore+=line*2-1))

echo-ne"\33[1m\33[3${cScoreValue}m\33[${y};${x}H${iScore}"

if((iScore%iScoreEachLevel

then

if((iLevel<20))

then

((iLevel++))

((y=iTop+14))

echo-ne"\33[3${cScoreValue}m\33[${y};${x}H${iLevel}"

fi

fi

echo-ne"\33[0m"

for((y=0;y

do

((yp=y+iTrayTop+1))

((xp=iTrayLeft+1))

((i=y*iTrayWidth))

echo-ne"\33[${yp};${xp}H"

for((x=0;x

do

((j=i+x))

if((${iMap[$j]}==-1))

then

echo-ne""

else

echo-ne"\33[1m\33[7m\33[3${iMap[$j]}m\33[4${iMap[$j]}m[]\33[0m"

fi

done

done

}

functionBoxDown()

{

localys

((y=boxCurY+1))

ifBoxMove$y$boxCurX

then

s="`DrawCurBox0`"

((boxCurY=y))

s="$s`DrawCurBox1`"

echo-ne$s

else

Box2Map

RandomBox

fi

}

functionBoxLeft()

{

localxs

((x=boxCurX-1))

ifBoxMove$boxCurY$x

then

s=`DrawCurBox0`

((boxCurX=x))

s=$s`DrawCurBox1`

echo-ne$s

fi

}

functionBoxRight()

{

localxs

((x=boxCurX+1))

ifBoxMove$boxCurY$x

then

s=`DrawCurBox0`

((boxCurX=x))

s=$s`DrawCurBox1`

echo-ne$s

fi

}

functionBoxAllDown()

{

localkjixyiDowns

iDown=$iTrayHeight

for((j=0;j<8;j+=2))

do

((i=j+1))

((y=${boxCur[$j]}+boxCurY))

((x=${boxCur[$i]}+boxCurX))

for((k=y+1;k

do

((i=k*iTrayWidth+x))

if((${iMap[$i]}!

=-1));thenbreak;fi

done

((k-=y+1))

if(($iDown>$k));theniDown=$k;fi

done

s=`DrawCurBox0`

((boxCurY+=iDown))

s=$s`DrawCurBox1`

echo-ne$s

Box2Map

RandomBox

}

functionBoxRotate()

{

localiCountiTestRotateboxTestjis

iCount=${countBox[$iBoxCurType]}

((iTestRotate=iBoxCurRotate+1))

if((iTestRotate>=iCount))

then

((iTestRotate=0))

fi

for((j=0,i=(${offsetBox[$iBoxCurType]}+$iTestRotate)*8;j<8;j++,i++))

do

boxTest[$j]=${boxCur[$j]}

boxCur[$j]=${box[$i]}

done

ifBoxMove$boxCurY$boxCurX

then

for((j=0;j<8;j++))

do

boxCur[$j]=${boxTest[$j]}

done

s=`DrawCurBox0`

for((j=0,i=(${offsetBox[$iBoxCurType]}+$iTestRotate)*8;j<8;j++,i++))

do

boxCur[$j]=${box[$i]}

done

s=$s`DrawCurBox1`

echo-ne$s

iBoxCurRotate=$iTestRotate

else

for((j=0;j<8;j++))

do

boxCur[$j]=${boxTest[$j]}

done

fi

}

functionDrawCurBox()

{

localijtbDrawsBoxs

bDraw=$1

s=""

if((bDraw==0))

then

sBox="\40\40"

else

sBox="[]"

s=$s"\33[1m\33[7m\33[3${cBoxCur}m\33[4${cBoxCur}m"

fi

for((j=0;j<8;j+=2))

do

((i=iTrayTop+1+${boxCur[$j]}+boxCurY))

((t=iTrayLeft+1+2*(boxCurX+${boxCur[$j+1]})))

s=$s"\33[${i};${t}H${sBox}"

done

s=$s"\33[0m"

echo-n$s

}

functionRandomBox()

{

localijt

#changecurrentbox

iBoxCurType=${iBoxNewType}

iBoxCurRotate=${iBoxNewRotate}

cBoxCur=${cBoxNew}

for((j=0;j<${#boxNew[@]};j++))

do

boxCur[$j]=${boxNew[$j]}

done

if((${#boxCur[@]}==8))

then

#calculatecurrentbox'sstartingposition

for((j=0,t=4;j<8;j+=2))

do

if((${boxCur[$j]}

done

((boxCurY=-t))

for((j=1,i=-4,t=20;j<8;j+=2))

do

if((${boxCur[$j]}>i));theni=${boxCur[$j]};fi

if((${boxCur[$j]}

done

((boxCurX=(iTrayWidth-1-i-t)/2))

echo-ne`DrawCurBox1`

if!

BoxMove$boxCurY$boxCurX

then

kill-$sigExit${PPID}

ShowExit

fi

fi

#clearoldbox

for((j=0;j<4;j++))

do

((i=iTop+1+j))

((t=iLeft+2*iTrayWidth+7))

echo-ne"\33[${i};${t}H"

done

#getarandomnewbox

((iBoxNewType=RANDOM%${#offsetBox[@]}))

((iBoxNewRotate=RANDOM%${countBox[$iBoxNewType]}))

for((j=0,i=(${offsetBox[$iBoxNewType]}+$iBoxNewRotate)*8;j<8;j++,i++))

do

boxNew[$j]=${box[$i]};

done

((cBoxNew=${colorTable[RANDOM%${#colorTable[@]}]}))

#displaynewbox

echo-ne"\33[1m\33[7m\33[3${cBoxNew}m\33[4${cBoxNew}m"

for((j=0;j<8;j+=2))

do

((i=iTop+1+${boxNew[$j]}))

((t=iLeft+2*iTrayWidth+7+2*${boxNew[$j+1]}))

echo-ne"\33[${i};${t}H[]"

done

echo-ne"\33[0m"

}

functionInitDraw()

{

clear

RandomBox

RandomBox

localit1t2t3

#drawborder

echo-ne"\33[1m"

echo-ne"\33[3${cBorder}m\33[4${cBorder}m"

((t2=iLeft+1))

((t3=iLeft+iTrayWidth*2+3))

for((i=0;i

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 金融投资

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1