免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 11781 | 回复: 26
打印 上一主题 下一主题

[游戏娱乐] Shell游戏:打飞机 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-01-20 20:43 |只看该作者 |倒序浏览
本帖最后由 baoyu05 于 2014-02-11 10:55 编辑
  1. #!/bin/sh

  2. PaddingX=10
  3. PaddingY=5
  4. Width=40
  5. Height=25

  6. ((MaxX=PaddingX+Width))
  7. ((MaxY=PaddingY+Height))
  8. ((AX=PaddingX+Width/2))
  9. ((AY=PaddingY+Height))
  10. ((ScoreX=PaddingX+Width/2-10))
  11. ((ScoreY=PaddingY-3))   
  12. Life=10

  13. function DrowBox(){
  14.     local x1 x2 y1 y2 x y f
  15.     ((x1=PaddingX-2))
  16.     ((x2=PaddingX+Width+1))
  17.     ((y1=PaddingY-1))
  18.     ((y2=PaddingY+Height+1))
  19.     for((x=$x1;x<=$x2;x+=2))
  20.     do
  21.         echo -ne "\033[$y1;${x}H\033[42m[]\033[0m"
  22.         echo -ne "\033[$y2;${x}H\033[42m[]\033[0m"
  23.     done
  24.   
  25.     for((y=$y1;y<=$y2;y++))
  26.     do
  27.         echo -ne "\033[$y;${x1}H\033[42m[]\033[0m"
  28.         echo -ne "\033[$y;${x2}H\033[42m[]\033[0m"
  29.     done
  30.     File="/tmp/.PlaneGame"
  31.     mkdir $File
  32.     for((f=PaddingX+1;f<=MaxX;f++));do  >$File/$f ;done
  33.     >$File/A;>$File/score
  34. }

  35. function CreatePlane(){
  36.     local t PX PXold x
  37.     while :
  38.     do
  39.         ((PX=$RANDOM%(Width-7)+1+PaddingX))
  40.         ((((PXold-PX<7)) && ((PXold-PX>-7)) )) && continue
  41.         PlaneDown $PX &
  42.         ((t=3+$RANDOM%5))
  43.         sleep $t
  44.         PXold=$PX
  45.     done
  46. }

  47. function PlaneDown(){
  48.     local  i  y BulletX  BulletY k t ts
  49.     ts=(0.15  0.3  0.5)
  50.     ((t=$RANDOM%3))
  51.     ((BulletX=$1+6))
  52.     for((y=PaddingY+1;y<=MaxY+3;y++))
  53.     do
  54.         CleanPlane $1 $y
  55.         DrowPlane  $1 $y 36
  56.         for((i=$1;i<=BulletX;i++))
  57.         do
  58.             read BulletY k<$File/$i
  59.             [[ $BulletY > 0 ]] && ((Life=Life-k))
  60.             [[ $Life < 1 ]] && ShootDown $1 $y
  61.         done
  62.         sleep ${ts[$t]}
  63.     done
  64.     EmptyPlaneValue $1
  65. }

  66. function DrowPlane(){
  67.     local plane x y i j n color Yv k BulletY AX AY over
  68.     plane=("" "" "" "V" "" "" "" "-" "=" "|" "X" "|" "=" "-" "" "" "" "Y" )
  69.     x=$1; y=$2; color=$3
  70.     n=0 ; over=0; BulletY=0
  71.     for((j=$y;j>=$y-2;j--))
  72.     do
  73.         for((i=$x;i<=$x+6;i++))
  74.         do
  75.             [[ $j -ge $PaddingY && $j -le $MaxY ]] && echo -ne "\033[$j;${i}H\033[${color}m${plane[$n]}\033[0m"
  76.             [[ $BulletY == 0 ]] && echo $j>$File/Plane_$i
  77.             read AX AY <$File/A
  78.             [[ $AX == $i && $AY == $j ]] && over=1
  79.             ((n++))
  80.         done
  81.         BulletY=1
  82.     done
  83.     [[ $over == 1 ]] && ExitPlane
  84. }

  85. function CleanPlane(){
  86.     local x y i j n
  87.     x=$1
  88.     y=$2
  89.    ((y--))
  90.     EmptyPlaneValue $x
  91.     for((j=y;j>=y-2;j--))
  92.     do
  93.         [[ $j -lt $PaddingY || $j -gt $MaxY ]] && continue
  94.         for((i=x;i<=x+6;i++))
  95.         do
  96.              echo -ne "\033[$j;${i}H\033[36m \033[0m"
  97.         done
  98.     done
  99. }

  100. function EmptyPlaneValue(){
  101.     local i
  102.     for((i=$1;i<=$1+6;i++)) ;do  >$File/Plane_$i ;done
  103. }

  104. function ShootDown(){
  105.     local score y
  106.     ((y=$2+1))
  107.     DrowPlane  $1 $2 31
  108.     sleep .2
  109.     DrowPlane  $1 $2 33
  110.     sleep .2
  111.     DrowPlane  $1 $2 31
  112.     CleanPlane $1 $2
  113.     CleanPlane $1 $y
  114.     read score < $File/score
  115.     ((score=score+1))
  116.     echo $score>$File/score
  117.     echo -ne "\033[$ScoreY;${ScoreX}H \033[32m Score: $score \033[0m"
  118.     exit
  119. }

  120. function Bulleting(){ # x=$1 y=$2 v=$3
  121.     local y newy PlaneY
  122.     for((y=$2-1;y>=$PaddingY;y--))
  123.     do
  124.         ((newy=y-1))
  125.         echo -ne "\033[$y;${1}H "
  126.         read PlaneY < $File/Plane_$1
  127.         [[ "$y" < "$PlaneY" || "$y" == "$PlaneY" ]] && break
  128.         [[ $newy -lt $PaddingY ]] && break
  129.         echo -ne "\033[$newy;${1}H\033[37m^\033[0m"
  130.         echo "$y 2">$File/$1
  131.         sleep 0.01
  132.     done
  133.     >$File/$1
  134. }

  135. function ExitControl(){
  136.     kill -30 $pid
  137.     stty $sTTY
  138.     ExitPlane
  139. }

  140. function ExitPlane(){
  141.     local x y
  142.     rm -rf $File
  143.     kill  $PPID
  144.     ps aux|awk '/ChangePosition/{print $2}'|xargs -i kill -9 {} >/dev/null 2>&1
  145.     GameOver
  146. }

  147. function GameOver(){
  148.     local cursor x y
  149.     ((x=MaxX/2))
  150.     ((y=MaxY+3))
  151.     ((cursor=MaxY+4))
  152.     echo -e "\033[$y;${x}H \033[32mGame Over!\033[0m\n\n"
  153.     echo -e "\033[?25h\033[${cursor};0H"
  154.     exit
  155. }

  156. function ReadDirection(){
  157.     local sig key
  158.     pid=$1
  159.     sTTY=`stty -g`
  160.     echo -ne "\033[?25l"
  161.     trap "ExitControl" INT TERM
  162.    
  163.     while :
  164.     do
  165.         sig=0
  166.         read -s -n 1 key
  167.         [[ "$key" == "A" ]] && sig=26
  168.         [[ "$key" == "B" ]] && sig=27
  169.         [[ "$key" == "C" ]] && sig=28
  170.         [[ "$key" == "D" ]] && sig=29
  171.         [[ "$key" == "q" ]] && ExitControl
  172.         [[ "$sig" != "0" ]] && kill -$sig  $pid
  173.     done
  174. }

  175. function ChangePosition(){
  176.     local  sig oldAX oldAY  c
  177.     clear
  178.     DrowBox
  179.     echo -ne "\033[?25l"
  180.     echo -ne "\033[$AY;${AX}H\033[37mA\033[0m"

  181.     trap "sig=26" 26
  182.     trap "sig=27" 27
  183.     trap "sig=28" 28
  184.     trap "sig=29" 29
  185.     trap "ExitGame" 30 INT TERM
  186.    
  187.     while :
  188.     do
  189.         echo -ne "\033[?25l"
  190.         sleep .1
  191.         oldAX=$AX
  192.         oldAY=$AY
  193.         case $sig in
  194.             26) ((AY--<=PaddingY)) && AY=$PaddingY ;;
  195.             27) ((AY++>=MaxY)) && AY=$MaxY ;;
  196.             28) ((AX++>=MaxX)) && AX=$MaxX ;;
  197.             29) ((AX--<=PaddingX)) &&  AX=$PaddingX ;;
  198.         esac
  199.         echo -ne "\033[$oldAY;${oldAX}H\033[37m \033[0m"
  200.         echo -ne "\033[$AY;${AX}H\033[37mA\033[0m"
  201.         echo "$AX $AY" >$File/A
  202.         Bulleting $AX $AY &
  203.         sig=0
  204.         ((c++))
  205.         [ $c -eq 1 ] && CreatePlane &
  206.     done
  207. }

  208. if [ "$1" == "ChangePosition" ];then
  209.    ChangePosition
  210. else
  211.    bash $0 ChangePosition  2>/dev/null &
  212.    ReadDirection $! 2>/dev/null
  213. fi

复制代码
玩法:移动方向键即可

plane.jpg (19.19 KB, 下载次数: 130)

plane.jpg

论坛徽章:
60
20周年集字徽章-20	
日期:2020-10-28 14:04:3015-16赛季CBA联赛之北京
日期:2016-07-06 15:42:0715-16赛季CBA联赛之同曦
日期:2016-06-12 10:38:0915-16赛季CBA联赛之佛山
日期:2016-05-27 11:54:56黄金圣斗士
日期:2015-12-02 11:44:35白银圣斗士
日期:2015-11-25 14:32:43白银圣斗士
日期:2015-11-23 12:53:352015亚冠之布里斯班狮吼
日期:2015-10-21 16:55:482015亚冠之首尔
日期:2015-09-01 16:46:052015亚冠之德黑兰石油
日期:2015-08-31 11:39:192015亚冠之萨济拖拉机
日期:2015-08-28 21:06:5315-16赛季CBA联赛之广东
日期:2016-07-12 14:58:53
2 [报告]
发表于 2014-01-20 21:40 |只看该作者
牛,支持,赞,高大上

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
3 [报告]
发表于 2014-01-20 21:45 |只看该作者
金牙哥是游戏大王啊!

论坛徽章:
0
4 [报告]
发表于 2014-01-20 22:37 |只看该作者
太厉害了!!!!

论坛徽章:
29
程序设计版块每日发帖之星
日期:2016-02-29 06:20:0015-16赛季CBA联赛之天津
日期:2016-08-10 10:33:1115-16赛季CBA联赛之深圳
日期:2016-08-17 15:07:2015-16赛季CBA联赛之佛山
日期:2016-11-07 11:33:5015-16赛季CBA联赛之广夏
日期:2016-11-15 09:13:31CU十四周年纪念徽章
日期:2016-11-24 14:12:25极客徽章
日期:2016-12-07 14:03:4015-16赛季CBA联赛之深圳
日期:2016-12-07 17:15:2715-16赛季CBA联赛之北京
日期:2016-12-22 09:30:0115-16赛季CBA联赛之深圳
日期:2016-12-22 10:49:2115-16赛季CBA联赛之山西
日期:2017-02-10 09:05:3215-16赛季CBA联赛之同曦
日期:2017-02-27 14:19:08
5 [报告]
发表于 2014-01-20 22:55 |只看该作者
表示要研究透这个脚本要花点时间,顶,慢慢消化

论坛徽章:
0
6 [报告]
发表于 2014-01-21 09:19 |只看该作者
膜拜啊,太虎了!

论坛徽章:
22
丑牛
日期:2014-08-15 14:32:0015-16赛季CBA联赛之同曦
日期:2017-12-14 15:28:14黑曼巴
日期:2017-08-10 08:14:342017金鸡报晓
日期:2017-02-08 10:39:42黑曼巴
日期:2016-11-15 15:48:38CU十四周年纪念徽章
日期:2016-11-09 13:19:1015-16赛季CBA联赛之同曦
日期:2016-04-08 18:00:03平安夜徽章
日期:2015-12-26 00:06:30程序设计版块每日发帖之星
日期:2015-12-03 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-09 06:20:002015亚冠之吉达阿赫利
日期:2015-07-03 08:39:42
7 [报告]
发表于 2014-01-21 09:42 |只看该作者
太牛了,可惜我的bash跑不了

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
8 [报告]
发表于 2014-01-22 06:02 |只看该作者
本帖最后由 bikkuri 于 2014-01-22 06:06 编辑

表示要打中飞机的中心不容易。。。

论坛徽章:
5
丑牛
日期:2014-01-21 08:26:26卯兔
日期:2014-03-11 06:37:43天秤座
日期:2014-03-25 08:52:52寅虎
日期:2014-04-19 11:39:48午马
日期:2014-08-06 03:56:58
9 [报告]
发表于 2014-01-22 11:38 |只看该作者
太牛了{:2_172:}

论坛徽章:
0
10 [报告]
发表于 2014-01-24 12:52 |只看该作者
虎!!    模块化写的不错  很容易理解
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP