Tank Shell游戏编写之八:制作坦克炮弹,并实现发射操作(炮弹代码)

根据之前的分析, 炮弹函数只需要获取到坦克的头坐标、朝向信息然后结合活动范围就能确定自己的运行轨迹

f_my_bullet(){

    v_infor=(`cat $v_my_tank_head_infor`)  #v_my_tank_head_infor 保存的是坦克的头坐标、朝向信息,格式:横坐标 纵坐标、方向
    if [[ ${v_infor[2]} == 'UP' ]]
    then 
        for((i=$((v_infor[0]-1)); i>=v_range_lines[0]; i--))   # 判断自己的运行轨迹,终点不能超过上边界
        do
            echo -ne "\033[${i};${v_infor[1]}H\033[42m \033[0m"  # 颜色打印
            sleep 0.01       # 最好有些时间间隔,不然很难发现“炮弹”的移动轨迹
            echo -ne "\033[${i};${v_infor[1]}H \033[0m"   # 擦除旧的痕迹,不然显示出来的会是一条直线,而不是一个点在移动
        done &    # 一定要放到后台运行,不然会影响到前台操作
    fi
    if [[ ${v_infor[2]} == 'DOWN' ]]
    then
        for((i=$((v_infor[0]+1)); i<=v_range_lines[1]; i++))
        do
            echo -ne "\033[${i};${v_infor[1]}H\033[42m \033[0m"
            sleep 0.01
            echo -ne "\033[${i};${v_infor[1]}H \033[0m"
        done &
    fi
    if [[ ${v_infor[2]} == 'LEFT' ]]
    then
        for((i=$((v_infor[1]-1)); i>=v_range_cols[0]; i--))
        do
            echo -ne "\033[${v_infor[0]};${i}H\033[42m \033[0m"
            sleep 0.01
            echo -ne "\033[${v_infor[0]};${i}H \033[0m"
        done &
    fi
    if [[ ${v_infor[2]} == 'RIGHT' ]]
    then
        for((i=$((v_infor[1]+1)); i<=v_range_cols[1]; i++))
        do
            echo -ne "\033[${v_infor[0]};${i}H\033[42m \033[0m"
            sleep 0.01
            echo -ne "\033[${v_infor[0]};${i}H \033[0m"
        done &
    fi
}

键盘接收回车键时发送炮弹:

v_special_char=`echo -e "\033"`
while :
do
    read -s -n 1 v_pressed_key
    v_pressed_key=`echo $v_pressed_key | tr 'a-z' 'A-Z'`
    [[ $v_pressed_key == 'C' ]] && break

    [[ "$v_pressed_key" == "" ]] && f_my_bullet   # 新增的代码,接收“回车”键

    if [[ $v_pressed_key == $v_special_char ]]; then 
        read -s -n 2 v_pressed_key
        [[ ${v_pressed_key:1:1} == 'A' ]] && f_turn_direction 'UP'
        [[ ${v_pressed_key:1:1} == 'B' ]] && f_turn_direction 'DOWN'
        [[ ${v_pressed_key:1:1} == 'D' ]] && f_turn_direction 'LEFT'
        [[ ${v_pressed_key:1:1} == 'C' ]] && f_turn_direction 'RIGHT'
    fi

    [[ $v_pressed_key = 'W' ]] && f_turn_direction 'UP'
    [[ $v_pressed_key = 'S' ]] && f_turn_direction 'DOWN'
    [[ $v_pressed_key = 'A' ]] && f_turn_direction 'LEFT'
    [[ $v_pressed_key = 'D' ]] && f_turn_direction 'RIGHT'

done

展示:

猜你喜欢

转载自www.cnblogs.com/gipagod/p/9122511.html
今日推荐