




已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
#!/bin/shaBox0_0=(0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0)aBox0_1=(0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0)aBox0_2=(0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 -1)aBox0_3=(0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0)aBox1_0=(0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0)aBox1_1=(0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0)aBox1_2=(0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 -1)aBox1_3=(0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0)aBox2_0=(0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0)aBox2_1=(0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0)aBox3_0=(0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0)aBox3_1=(0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0)aBox4_0=(0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 -1)aBox4_1=(0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0)aBox5_0=(0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0)aBox6_0=(0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0)aBox6_1=(0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0)aBox6_2=(0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 -1)aBox6_3=(0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0)iSumType=7#方块类型总数aStyles=(4 4 2 2 2 1 4)#各个种类方块样式数iOrigoX=10#显示起始位置xiOrigoY=5#显示起始位置yiMapWidth=12#方块宽10iMapHeight=15 #方块高15iBox_X=0#方块位置xiBox_Y=0#方块位置yiScore=0#分数iLevel=0#级别iScoreEachLevle=50#每升一级需积累分数#初始化所有背景方块for(i = 0;iiMapWidth*iMapHeight;i+)do aBoxBg$i=0done#定义控制信号,挪用信号2531iSIG=0 #iSIG_Rotate=25 #旋转iSIG_Left=26 #向左移动iSIG_Right=27 #向右移动iSIG_Down=28 #向下iSIG_FallDown=29 #直落到底iSIG_Exit=30 #退出iSIG_Pause=31 #暂停Control() trap Game_Exit 2 3 15 $iSIG_Exit echo -ne 033?25l SAVEDSTTY=stty -g iDisplayPID=$1 while : do read -s -n 1 LINE iSIG=0 case $LINE in A ) iSIG=$iSIG_Rotate ; B ) iSIG=$iSIG_Down ; D ) iSIG=$iSIG_Left ; C ) iSIG=$iSIG_Right ; ) iSIG=$iSIG_FallDown ; p|P) iSIG=$iSIG_Pause ; q|Q ) Game_Exit ; esac $iSIG -ne 0 & kill -$iSIG $iDisplayPID doneDisplay() trap iSIG=$iSIG_Rotate $iSIG_Rotate trap iSIG=$iSIG_Down $iSIG_Down trap iSIG=$iSIG_Left $iSIG_Left trap iSIG=$iSIG_Right $iSIG_Right trap iSIG=$iSIG_FallDown $iSIG_FallDown trap iSIG=$iSIG_Pause $iSIG_Pause local iSIGThis i clear Draw_info Create_Box while : do if $iSIG -ne $iSIG_Pause ;then for(i=0;i20-iLevel;i+) do iSIG_Display=$iSIG iSIG=0 case $iSIG_Display in $iSIG_Rotate) Move_Rotate ; $iSIG_Down) Move_Down ; $iSIG_Left) Move_Left ; $iSIG_Right) Move_Right ; $iSIG_FallDown) Move_FallDown ; $iSIG_Pause) iSIG=$iSIG_Pause break ; esac sleep 0.02 done Move_Down fi doneGame_Exit() echo -ne 03321;1Hgame overn echo -ne 0330m033?25h stty $SAVEDSTTY kill -9 $iDisplayPID exit 0 Draw_Line() echo -ne 033$1;$(iOrigoX)H-=-#iOrigoY Draw_Row() local i for(i=iOrigoY;iiOrigoY+15;i+) do echo -ne 033$i;$1H| done#显示程序主画面Draw_info() echo -ne 03345m Draw_Line $(iOrigoY-1) Draw_Line $(iOrigoY+iMapHeight) Draw_Row $(iOrigoX)#iOrigoY+(3*2)-2 Draw_Row $(iOrigoX+2+20) #iOrigoY+(3*2)+10*2 echo -ne 0330m echo -ne 033$(iOrigoY+8);$(iOrigoX+25)H SCORE echo -ne 033$(iOrigoY+10);$(iOrigoX+30)H0 echo -ne 033$(iOrigoY+13);$(iOrigoX+25)H LEVEL echo -ne 033$(iOrigoY+15);$(iOrigoX+30)H0 Draw_Box_Clear()#把方块隐藏掉 local i for(i=0;i$($#aBoxMove*-1);i+) do $aBoxMove$i -ne 0 & echo -ne 033$(i/12)+iBox_Y+iOrigoY);$(i%12)*2)+iOrigoX)H done Draw_Box_New()#显示方块 local i for(i=0;i$($#aBoxMove*-1);i+) do $aBoxMove$i -ne 0 & echo -ne 0331m033$iCurrentColorm033$(i/12)+iBox_Y+iOrigoY);$(i%12)*2)+iOrigoX)H0330m done IsBottom()#检查方块是否下落到底 local i if $($iBox_Y+($#aBoxMove*/12) -eq 15 ;then return 0 fi iBox_Y=$(iBox_Y+1)#虚拟下移一行 for(i=0;i$#aBoxMove*;i+) do $(iBox_Y*12+i) -lt 0 & continue#排除刚开始显示方块时iBox_Y为负的情况 if $aBoxMove$i = 1 -a $aBoxBg$(iBox_Y*12+i) != 0 ;then#触底 iBox_Y=$(iBox_Y-1)#复原 return 0 fi done iBox_Y=$(iBox_Y-1) return 1 Box_Delete()#消行.计算分数. local i j k line aLineFull=() aBoxBgNew=() line=0 k=0 #检查那些行可以消掉 for(i=0;i15;i+)#y do for(j=0;j10;j+) do $aBoxBg$(i*12+1+j) -eq 0 & break $j -eq 9 & aLineFull$line=$i & ( line+ ) done done $line -eq 0 & return 0 #计算分数和级别 iScore=$(iScore+(line*2)-1) echo -ne 03315;$(iOrigoX+30)H$iScore if $(iScore/iScoreEachLevle) -gt $iLevel & $iLevel -lt 20 then ( iLevel+ ) fi echo -ne 03320;$(iOrigoX+30)H$iLevel 0330m #重新整理aBoxBg数组 for(i=0;i15;i+) do while $(i+k-line) = $aLineFull$k #这里处理连续消除多行 do ( k+ ) done for(j=0;j12;j+) do if $i -lt $line ;then aBoxBgNew$(i*12+j)=0 else aBoxBgNew$(i*12+j)=$aBoxBg$(i+k-line)*12+j) fi done done #刷新背景 aBoxBg=($aBoxBgNew*) for(i=0;i15;i+) #y do for(j=0;j10;j+) do echo -ne 033$(i+iOrigoY);$(j+1)*2)+iOrigoX)H if $aBoxBg$(i*12+1+j) -eq 0 ;then echo else echo -ne 0331m033$aBoxBg$(i*12+1+j)m0330m fi done done Create_Box()#显示新方块 aBoxMove=() if -z $iCurrentType ;then ( iCurrentType = RANDOM % $iSumType ) ( iCurrentStyle = RANDOM % $aStyles$iCurrentType ) ( iCurrentColor = 41 + RANDOM % 7 ) else iCurrentType=$iNewType iCurrentStyle=$iNewStyle iCurrentColor=$iNewColor fi #iCurrentType=4 #iCurrentStyle=1 aBoxMove=( eval echo $aBox$iCurrentType_$iCurrentStyle* ) iBox_Y=$aBoxMove$($#aBoxMove*-1) iBox_X=0 Draw_Box_New Random_Box IsBottom & kill -$iSIG_Exit $PPID Random_Box()#随机产生方块并预显示 local i ( iNewType = RANDOM % $iSumType ) ( iNewStyle = RANDOM % $aStyles$iNewType ) ( iNewColor = 41 + RANDOM % 7 ) #抹掉原显示 for(i=0;i$#aBoxMove*;i+) do if $aBoxMove$i -eq 1 ;then echo -ne 033$($i/12+iOrigoY);$($i%12)*2+iOrigoX+20)H fi done #预显示新方块 aBoxNEW=( eval echo $aBox$iNewType_$iNewStyle* ) for(i=0;i$#aBoxNEW*;i+) do if $aBoxNEW$i -eq 1 ;then echo -ne 0331m033$iNewColorm033$($i/12+iOrigoY);$($i%12)*2+iOrigoX+20)H0330m fi done Move_Left() local i #判断是否碰墙 for(i=0;i$($#aBoxMove*/12);i+) do $aBoxMove$(i*12+1) -eq 1 & return 0 done #判断是否碰背景 for(i=0;i$#aBoxMove*;i+) do $(iBox_Y*12+i) -le 0 & continue #排除刚开始显示方块时iBox_Y为负的情况 $aBoxMove$i -eq 1 -a $aBoxBg$(iBox_Y*12+i-1) -ne 0 & return 0 #触底 done #清除原显示 Draw_Box_Clear for(i=0;i$($#aBoxMove*-2);i+) do aBoxMove$i=$aBoxMove$(i+1) done #重新显示方块 Draw_Box_New iBox_X=$(iBox_X-1) Move_Right()#右移 local i #判断是否碰墙 for(i=0;i$($#aBoxMove*/12);i+) do $aBoxMove$(i*12+10) -eq 1 & return 0 done #判断是否碰背景 for(i=0;i0;i-) do aBoxMove$i=$aBoxMove$(i-1) done #重新显示方块 Draw_Box_New iBox_X=$(iBox_X+1) Move_Down()#下落一格 local i if ! IsBottom#返回0则表示底部 then Draw_Box_Clear iBox_Y=$(iBox_Y+1) #画新方块 Draw_Box_New else #把当前方块移到背景 (把方块位置的背景设置为颜色数)(注:0为空) for(i=0;i$#aBoxMove*;i+) do if $aBoxMove$i -eq 1 ;then aBoxBg$(iBox_Y*12+i)=$iCurrentColor fi done Box_Delete Create_Box fi Move_FallDown()#直落到底 local i Draw_Box_Clear for(i=0;i15;i+) do if ! IsBottom then iBox_Y=$(iBox_Y+1) else break fi done Draw_Box_New Move_DownMove_Rotate()#当前style跳转到下一style ,x位移量根据iBox_X位置决定 local i $aStyles$iCurrentType -eq 1 & return 0#只有一种类型的不处理 $iBox_Y -lt 0 & return 0 #iBox_Y=iBox_X;i-) #原数组末尾增加了一位数记录起始位置,所以这里要减2 do aBoxRotate$i=$aBoxRotate$(i-iBox_X) done for(i=0;iiBox_X
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 魅力新疆解说课件
- 高铁铁路授课课件
- 电脑耗材培训知识课件
- 电能仪表工艺知识培训课件
- 电缆附件安装知识培训课件
- 电站电工基础知识培训课件
- 电磁灶用电安全知识培训课件
- 高热惊厥业务学习课件
- 3-4-Dihydroxybenzeneacetic-acid-13C-18O2-生命科学试剂-MCE
- 高校戏曲鉴赏课件
- 2025秋外研新版三起点小学英语四年级上册教学计划
- 2025北师大版(2024)三年级上册数学教学计划
- 2025云南省腾冲市边防办招聘边境专职联防员(10人)笔试参考题库附答案解析
- 中职乐理课教学课件
- 中小会计师所发展困境及对策
- 2025至2030中国微波器件行业市场调研分析及竞争形势与投资发展报告
- 2025-2026学年人教鄂教版(2017)小学科学六年级上册教学计划及进度表
- 心理委员基本知识培训课件
- 2025年12123学法减分考试题库及答案
- 外伤出血急救课件
- 医院感染管理手卫生
评论
0/150
提交评论