版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
#!/bin/shaBox0_0=(0000001000000000111000000)aBox0_1=(0000010000000000010000000000011000000)aBox0_2=(000000000000000011100000000010000000-1)aBox0_3=(0000110000000000010000000000010000000)aBox1_0=(0000100000000000111000000)aBox1_1=(0000011000000000010000000000010000000)aBox1_2=(000000000000000011100000000000100000-1)aBox1_3=(0000010000000000010000000000110000000)aBox2_0=(0000100000000000110000000000010000000)aBox2_1=(0000011000000000110000000)aBox3_0=(0000010000000000110000000000100000000)aBox3_1=(0000110000000000011000000)aBox4_0=(000000000000000011110000-1)aBox4_1=(0000010000000000010000000000010000000000010000000)aBox5_0=(0000011000000000011000000)aBox6_0=(0000010000000000111000000)aBox6_1=(0000010000000000011000000000010000000)aBox6_2=(000000000000000011100000000001000000-1)aBox6_3=(0000010000000000110000000000010000000)iSumType=7 #方块类型总数aStyles=(4422214) #各个种类方块样式数iOrigoX=10 #显示起始位置xiOrigoY=5 #显示起始位置yiMapWidth=12 #方块宽10iMapHeight=15#方块高15iBox_X=0 #方块位置xiBox_Y=0 #方块位置yiScore=0 #分数iLevel=0 #级别iScoreEachLevle=50 #每升一级需积累分数#初始化所有背景方块for((i=0;i<iMapWidth*iMapHeight;i++))doaBoxBg[$i]=0done#定义控制信号,挪用信号25~31iSIG=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"2315$iSIG_Exitecho-ne"\033[?25l"SAVEDSTTY=`stty-g`iDisplayPID=$1while:doread-s-n1LINEiSIG=0case$LINEin"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-ne0]&&kill-$iSIG$iDisplayPIDdone}Display(){trap"iSIG=$iSIG_Rotate"$iSIG_Rotatetrap"iSIG=$iSIG_Down"$iSIG_Downtrap"iSIG=$iSIG_Left"$iSIG_Lefttrap"iSIG=$iSIG_Right"$iSIG_Righttrap"iSIG=$iSIG_FallDown"$iSIG_FallDowntrap"iSIG=$iSIG_Pause"$iSIG_PauselocaliSIGThisiclearfor((i=0;i<${#aBoxMove[*]};i++))do[$((iBox_Y*12+i))-lt0]&&continue #排除刚开始显示方块时iBox_Y为负的情况if["${aBoxMove[$i]}"=="1"-a"${aBoxBg[$((iBox_Y*12+i))]}"!="0"];then #触底iBox_Y=$((iBox_Y-1)) #复原return0fidoneiBox_Y=$((iBox_Y-1))return1}Box_Delete()#消行.计算分数.{localijklineaLineFull=()aBoxBgNew=()line=0k=0#检查那些行可以消掉for((i=0;i<15;i++)) #ydofor((j=0;j<10;j++))do[${aBoxBg[$((i*12+1+j))]}-eq0]&&break[$j-eq9]&&aLineFull[$line]=$i&&((line++))donedone[$line-eq0]&&return0#计算分数和级别iScore=$((iScore+(line*2)-1))echo-ne"\033[15;$((iOrigoX+30))H${iScore}"if[[$((iScore/iScoreEachLevle))-gt$iLevel&&$iLevel-lt20]]then((iLevel++))fiecho-ne"\033[20;$((iOrigoX+30))H${iLevel}\033[0m"#重新整理aBoxBg数组for((i=0;i<15;i++))dowhile["$((i+k-line))"=="${aLineFull[$k]}"]#这里处理连续消除多行do((k++))donefor((j=0;j<12;j++))doif[$i-lt$line];thenaBoxBgNew[$((i*12+j))]=0elseaBoxBgNew[$((i*12+j))]=${aBoxBg[$(((i+k-line)*12+j))]}fidonedone#刷新背景aBoxBg=(${aBoxBgNew[*]})for((i=0;i<15;i++))#ydofor((j=0;j<10;j++))doecho-ne"\033[$((i+iOrigoY));$((((j+1)*2)+iOrigoX))H"if[${aBoxBg[$((i*12+1+j))]}-eq0];thenecho""elseecho-ne"\033[1m\033[${aBoxBg[$((i*12+1+j))]}m[]\033[0m"fidonedone}Create_Box()#显示新方块{aBoxMove=()if[-z"$iCurrentType"];then((iCurrentType=RANDOM%$iSumType))((iCurrentStyle=RANDOM%${aStyles[$iCurrentType]}))((iCurrentColor=41+RANDOM%7))elseiCurrentType=$iNewTypeiCurrentStyle=$iNewStyleiCurrentColor=$iNewColorfi#iCurrentType=4#iCurrentStyle=1aBoxMove=(`eval'echo${aBox'$iCurrentType'_'$iCurrentStyle'[*]}'`)iBox_Y=${aBoxMove[$((${#aBoxMove[*]}-1))]}iBox_X=0Draw_Box_NewRandom_BoxIsBottom&&kill-$iSIG_Exit$PPID}Random_Box()#随机产生方块并预显示{locali((iNewType=RANDOM%$iSumType))((iNewStyle=RANDOM%${aStyles[$iNewType]}))((iNewColor=41+RANDOM%7))#抹掉原显示for((i=0;i<${#aBoxMove[*]};i++))doif[${aBoxMove[$i]}-eq1];thenecho-ne"\033[$(($i/12+iOrigoY));$((($i%12)*2+iOrigoX+20))H"fidone#预显示新方块aBoxNEW=(`eval'echo${aBox'$iNewType'_'$iNewStyle'[*]}'`)for((i=0;i<${#aBoxNEW[*]};i++))doif[${aBoxNEW[$i]}-eq1];thenecho-ne"\033[1m\033[${iNewColor}m\033[$(($i/12+iOrigoY));$((($i%12)*2+iOrigoX+20))H[]\033[0m"fidone}Move_Left(){locali#判断是否碰墙for((i=0;i<$((${#aBoxMove[*]}/12));i++))do[${aBoxMove[$((i*12+1))]}-eq1]&&return0done#判断是否碰背景for((i=0;i<${#aBoxMove[*]};i++))do[$((iBox_Y*12+i))-le0]&&continue#排除刚开始显示方块时iBox_Y为负的情况[${aBoxMove[$i]}-eq1-a${aBoxBg[$((iBox_Y*12+i-1))]}-ne0]&&return0#触底done#清除原显示Draw_Box_Clearfor((i=0;i<$((${#aBoxMove[*]}-2));i++))doaBoxMove[$i]=${aBoxMove[$((i+1))]}done#重新显示方块Draw_Box_NewiBox_X=$((iBox_X-1))}Move_Right()#右移{locali#判断是否碰墙for((i=0;i<$((${#aBoxMove[*]}/12));i++))do[${aBoxMove[$((i*12+10))]}-eq1]&&return0done#判断是否碰背景for((i=0;i<${#aBoxMove[*]};i++))do[$((iBox_Y*12+i))-lt0]&&continue#排除刚开始显示方块时iBox_Y为负的情况["${aBoxMove[$i]}"=="1"-a"${aBoxBg[$((iBox_Y*12+i+1))]}"!="0"]&&return0#触底done#清除原显示Draw_Box_Clearfor((i=$((${#aBoxMove[*]}-2));i>0;i--))doaBoxMove[$i]=${aBoxMove[$((i-1))]}done#重新显示方块Draw_Box_NewiBox_X=$((iBox_X+1))}Move_Down()#下落一格{localiif!IsBottom #返回0则表示底部thenDraw_Box_CleariBox_Y=$((iBox_Y+1))#画新方块Draw_Box_Newelse# 把当前方块移到背景(把方块位置的背景设置为颜色数)(注:0为空)for((i=0;i<${#aBoxMove[*]};i++))doif[${aBoxMove[$i]}-eq1];thenaBoxBg[$((iBox_Y*12+i))]=$iCurrentColorfidoneBox_DeleteCreate_Boxfi}Move_FallDown()#直落到底{localiDraw_Box_Clearfor((i=0;i<15;i++))doif!IsBottomtheniBox_Y=$((iBox_Y+1))elsebreakfidoneDraw_Box_NewMove_Down}Move_Rotate()#当前style跳转到下一style,x位移量根据iBox_X位置决定{locali[${aStyles[$iCurrentType]}-eq1]&&return0 #只有一种类型的不处理[$iBox_Y-lt0]&&return0#iBox_Y<0不处理sRotateStyle=$(((iCurrentStyle+1)%${aStyles[$iCurrentType]}))aBoxRotate=(`eval'echo${aBox'$iCurrentType'_'$sRotateStyle'[*]}'`)#先根据iBox_X作左右移位处理,把重新赋值aBoxRotate/aBoxMoveif[$iBox_X-gt0];then #右移for((i=$((${#aBoxRotate[*]}-2));i>=iBox_X;i--))#原数组末尾增加了一位数记录起始位置,所以这里要减2doaBoxRotate[$i]=${aBoxRotate[$((i-iBox_X))]}donefor((i=0;i<iBox_X;i++))doaBoxRotate[$i]=0doneelse #左移for((i=0;i<$((${#aBoxRotate[*]}+$iBox_X-2));i++))doaBoxRotate[$i]=${aBoxRotate[$((i-iBox_X))]}donefo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 郑州大学《工业通风与除尘课程设计》2021-2022学年第一学期期末试卷
- 2024年度保健品出口销售合同
- 城市雕塑周边景观铺装施工方案
- 腹透室设备维护管理制度
- 中小学午餐营养管理规定
- 住宅小区清扫保洁交接工作方案
- 农产品销售人员薪酬与提成管理方案
- 2024年度毛石供应合同协议的合同义务
- 2024年度高端服装定制合同
- 桥梁施工防火技术保障方案
- 深圳大学《西方文明史》2023-2024学年第一学期期末试卷
- 2024-2030年中国肉牛养殖产业前景预测及投资效益分析报告权威版
- 湖北省武汉市部分学校2024-2025学年高一上学期11月期中调研数学试题(含答案)
- 2024年同等学力申硕英语考试真题
- 河北省石家庄市长安区2023-2024学年五年级上学期期中英语试卷
- 初中数学30种模型(几何知识点)
- 多能互补规划
- 天一大联考●皖豫名校联盟2024-2025学年高三上学期10月月考试卷语文答案
- GB/T 44291-2024农村产权流转交易 网络交易平台服务规范
- 全国农业技术推广服务中心公开招聘应届毕业生补充(北京)高频难、易错点500题模拟试题附带答案详解
- 公司研发项目审核管理制度
评论
0/150
提交评论