欢迎来到天天文库
浏览记录
ID:16601622
大小:26.42 KB
页数:35页
时间:2018-08-23
《unix shell游戏编程之俄罗斯方块(tetris for unix shell game programming)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、unixshell游戏编程之俄罗斯方块(TetrisforUNIXshellgameprogramming)#shell版方块#!/bin/bash#tetrisgame#10.21.2003xhchen<>@winbond.com.twxhchen#颜色定义specifics=1cgreen=2cyellow=3cblue=4cfuchsia=5ccyan=6cwhite=7colortable=($$$$cbluespecificscgreencyellow$$$cfuchsiaccyancwhite)#位置和大小ileft=3itop=2(itrayleft=ile
2、ft+2))(itraytop=itop+1))(itraywidth=10))(itrayheight=15))#颜色设置cborder=$cgreencscore=$cfuchsiacscorevalue=$ccyan#控制信号#改游戏使用两个进程,一个用于接收输入,一个用于游戏流程和显示界面;#当前者接收到上下左右等按键时,通过向后者发送signal的方式通知后者.sigrotate=25sigleft=26sigright=27sigdown=28sigalldown=29sigexit=30#七中不同的方块的定义#通过旋转,每种方块的显示的样式可能有几种box0
3、=(00011011)box1=(0212222232101111213)box2=(0001111101101120)box3=(0102101100101121)box4=(0102112110111222221112021001011112)box5=(0111121221011122220000111121021011112)box6=(011112222110111122101101121011011112)#所有其中方块的定义都放到box变量中box=(${box0[@]}is${box1[@]}is${box2[@]}is${box3[@]}is${box4
4、[@]}is${box5[@]}is${box6[@]})#各种方块旋转后可能的样式数目countbox=(122222444)#各种方块再box数组中的偏移offsetbox=(013571115)#每提高一个速度级需要积累的分数iscoreeachlevel=50#begreaterthan7#运行时数据sig=0#接收到的signaliscore=0#总分ilevel=0#速度级boxnew=()#新下落的方块的位置定义cboxnew=0#新下落的方块的颜色iboxnewtype=0#新下落的方块的种类iboxnewrotate=0#新下落的方块的旋转角度boxcu
5、r=()#当前方块的位置定义cboxcur=0#当前方块的颜色iboxcurtype=0#当前方块的种类iboxcurrotate=0#当前方块的旋转角度boxcurx=-1#当前方块的x坐标位置boxcury=-1#当前方块的y坐标位置imap=()#背景方块图表#初始化所有背景方块为-1,表示没有方块for(i=0;i6、player=$1akey=(0)cesc:"echo"33"acspace=`echo-a"40"#保存终端属性.在read-s读取终端键时,终端的属性会被暂时改变.#如果在read-s时程序被不幸杀掉,可能会导致终端混乱,#需要在程序退出时恢复终端属性.stty=`g`stty#捕捉退出信号trap"myexit;"thetermtrap"myexitnosub;"$sigexit#隐藏光标echo-n"^33[?25l"while((1))die#读取输入.注-s不回显,n读到一个字符立即返回read-p-n1keyakey[0]=${akey[1]}akey[7、1]=${akey[2]}akey[2]=$keyup=0#判断输入了何种键if[[$key==$cesc&&${akey[1]}==$cesc]]then#esc键myexitelif[[${akey[0]}==$cesc&&${akey[1]}=="["]]thenif[[$key=="a"]];thensay=$sigrotate#<向上键>elif[[$key=="b"]];thensay=$sigdown#<向下键>elif[[$key=="d"]];thensay=$sigleft#<向左键>elif[[$key=
6、player=$1akey=(0)cesc:"echo"33"acspace=`echo-a"40"#保存终端属性.在read-s读取终端键时,终端的属性会被暂时改变.#如果在read-s时程序被不幸杀掉,可能会导致终端混乱,#需要在程序退出时恢复终端属性.stty=`g`stty#捕捉退出信号trap"myexit;"thetermtrap"myexitnosub;"$sigexit#隐藏光标echo-n"^33[?25l"while((1))die#读取输入.注-s不回显,n读到一个字符立即返回read-p-n1keyakey[0]=${akey[1]}akey[
7、1]=${akey[2]}akey[2]=$keyup=0#判断输入了何种键if[[$key==$cesc&&${akey[1]}==$cesc]]then#esc键myexitelif[[${akey[0]}==$cesc&&${akey[1]}=="["]]thenif[[$key=="a"]];thensay=$sigrotate#<向上键>elif[[$key=="b"]];thensay=$sigdown#<向下键>elif[[$key=="d"]];thensay=$sigleft#<向左键>elif[[$key=
此文档下载收益归作者所有