zoukankan      html  css  js  c++  java
  • 如来神掌第二式第五招----Shell游戏案例之贪吃蛇

    ###############################################################################
    # Name : Mahavairocana                                                                                                                                           
    # Author : Mahavairocana                                                                                                                                         
    # QQ : 10353512                                                                                                                                                    
    # WeChat : shenlan-qianlan                                                                                                                                      
    # Blog : http://www.cnblogs.com/Mahavairocana/                                                                                                       
    # Description : You are welcome to reprint, or hyperlinks to indicate the                                                                        
    #                    source of the article, as well as author information.                                                                                ###############################################################################

    执行看效果,适合装X!

    #!/bin/bash
    # 
    #   -p, -t, -R, and -C
    #
    
    p=1
    f=75 s=13 r=2000 t=0
    w=$(tput cols) h=$(tput lines)
    # ab -> idx = a*4 + b
    # 0: up, 1: right, 2: down, 3: left
    # 00 means going up   , then going up   -> ┃
    # 12 means going right, then going down -> ┓
    sets=(
        "┃┏ ┓┛━┓  ┗┃┛┗ ┏━"
        "│╭ ╮╯─╮  ╰│╯╰ ╭─"
        "│┌ ┐┘─┐  └│┘└ ┌─"
        "║╔ ╗╝═╗  ╚║╝╚ ╔═"
    )
    v="${sets[0]}"
    RNDSTART=0
    NOCOLOR=0
    
    OPTIND=1
    while getopts "p:t:f:s:r:RCh" arg; do
    case $arg in
        p) ((p=(OPTARG>0)?OPTARG:p));;
        t) ((OPTARG>=0 && OPTARG<${#sets[@]})) && v="${sets[OPTARG]}";;
        f) ((f=(OPTARG>19 && OPTARG<101)?OPTARG:f));;
        s) ((s=(OPTARG>4 && OPTARG<16 )?OPTARG:s));;
        r) ((r=(OPTARG>=0)?OPTARG:r));;
        R) RNDSTART=1;;
        C) NOCOLOR=1;;
        h) echo -e "Usage: $(basename $0) [OPTION]..."
            echo -e "Animated pipes terminal screensaver.
    "
            echo -e " -p [1-]	number of pipes (D=1)."
            echo -e " -t [0-$((${#sets[@]} - 1))]	type of pipes (D=0)."
            echo -e " -f [20-100]	framerate (D=75)."
            echo -e " -s [5-15]	probability of a straight fitting (D=13)."
            echo -e " -r LIMIT	reset after x characters, 0 if no limit (D=2000)."
            echo -e " -R 		random starting point."
            echo -e " -C 		no color."
            echo -e " -h		help (this screen).
    "
            exit 0;;
        esac
    done
    
    cleanup() {
        tput rmcup
        tput cnorm
        exit 0
    }
    trap cleanup SIGHUP SIGINT SIGTERM
    
    for (( i=1; i<=p; i++ )); do
        c[i]=$((i%8)) n[i]=0 l[i]=0
        ((x[i]=RNDSTART==1?RANDOM*w/32768:w/2))
        ((y[i]=RNDSTART==1?RANDOM*h/32768:h/2))
    done
    
    tput smcup
    tput reset
    tput civis
    while ! read -t0.0$((1000/f)) -n1; do
        for (( i=1; i<=p; i++ )); do
            # New position:
            ((${l[i]}%2)) && ((x[i]+=-${l[i]}+2,1)) || ((y[i]+=${l[i]}-1))
    
            # Loop on edges (change color on loop):
            ((${x[i]}>w||${x[i]}<0||${y[i]}>h||${y[i]}<0)) && ((c[i]=RANDOM%8))
            ((x[i]=(x[i]+w)%w))
            ((y[i]=(y[i]+h)%h))
    
            # New random direction:
            ((n[i]=RANDOM%s-1))
            ((n[i]=(${n[i]}>1||${n[i]}==0)?${l[i]}:${l[i]}+${n[i]}))
            ((n[i]=(${n[i]}<0)?3:${n[i]}%4))
    
            # Print:
            tput cup ${y[i]} ${x[i]}
            [[ $NOCOLOR == 0 ]] && echo -ne "33[1;3${c[i]}m"
            echo -n "${v:l[i]*4+n[i]:1}"
            l[i]=${n[i]}
        done
        ((r>0 && t*p>=r)) && tput reset && tput civis && t=0 || ((t++))
    done
    
    cleanup
  • 相关阅读:
    zookeeper 简介
    缓存雪崩 缓存穿透
    SpringCloud实战2-Ribbon客户端负载均衡
    SpringCloud实战1-Eureka
    JVM笔记9-Class类文件结构
    JVM笔记8-虚拟机性能监控与故障处理工具
    JVM笔记7-内存分配与回收策略
    SpringAOP-JDK 动态代理和 CGLIB 代理
    MySQL多数据源笔记5-ShardingJDBC实战
    MySQL多数据源笔记4-Mycat中间件实战
  • 原文地址:https://www.cnblogs.com/Mahavairocana/p/8277865.html
Copyright © 2011-2022 走看看