91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Linux中Shell編程怎么繪制國際象棋棋盤

發布時間:2021-05-19 11:23:10 來源:億速云 閱讀:165 作者:小新 欄目:開發技術

小編給大家分享一下Linux中Shell編程怎么繪制國際象棋棋盤,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

先來看看國際象棋棋盤長啥樣:

Linux中Shell編程怎么繪制國際象棋棋盤

仔細想了會棋盤的分布規則,這個問題肯定有很多思路,我自己想到的是規則是

1.將棋盤行數作為一個大循環,循環8次,每次循環根據行號的奇偶來確定格子顏色的次序;
2.在單個行中,循環8次并判斷列的奇偶數來確定打印顏色

以上思路能夠打印出最簡單的棋盤,但是shell中一個空格的顯示形狀并非正方形,而且是空格的高度大于寬度。因此需要在單個棋盤的行的打印循環外在加一層控制打印空格行數的循環,以下圖可能對理解有些幫助:

Linux中Shell編程怎么繪制國際象棋棋盤

上圖通過echo打印了3個紅色的空格并非正方形,并且可以看到最后一行的綠色光標并非正方形,它構成了整個棋盤的最小打印單元,那我就需要控制單行中空格個數以及由多少行空格組成一個規則正方行,如下圖

Linux中Shell編程怎么繪制國際象棋棋盤

上圖中,熒光部分seq 2控制打印兩行,熒光%4s部分控制每行打印多少個空格,通過\n\c來控制一次循環后換行的問題。

綜上,怎個棋盤就分成當行打印由兩個循環來控制寬度和高度,由一個判斷語句根據循環次數的奇偶來控制打印顏色;在此基礎上再加上一個控制打印整個棋盤8行的大循環,并且使用一個判斷語句來根據循環次數的奇偶數來控制每行的顏色和上下行的顏色錯開。打印結果如下:

Linux中Shell編程怎么繪制國際象棋棋盤

在以上基礎上,實現用戶可自定義的棋盤格子的長寬,以及自定義的顏色。
基本原理是在:

echo -e "\033[1;4$[$COL1]m`printf "%$[$WI]s"`\033[0m\c"

其中變量COL1是棋盤的第一種顏色,變量WI是棋盤單個格子的寬度。高度則帶入給變量賦值后當作循環的次數。注意這里的寬度/高度最小單元是一個光標的寬度和高度。

高度,寬度的問題解決了,還有控制選擇顏色的問題。在bash中默認顏色有以下幾種:

echo -e "\033[40;37m 黑底白字 \033[0m"
echo -e "\033[41;37m 紅底白字 \033[0m"
echo -e "\033[42;37m 綠底白字 \033[0m"
echo -e "\033[43;37m 黃底白字 \033[0m"
echo -e "\033[44;37m 藍底白字 \033[0m"
echo -e "\033[45;37m 紫底白字 \033[0m"
echo -e "\033[46;37m 天藍底白字 \033[0m"
echo -e "\033[47;30m 白底黑字 \033[0m"

其中的數字40-47分別代表對應背景顏色,這里不需要打印前景字體所以不需要30-37數字。另外剔除黑色背景

將幾種顏色作為選擇菜單,通過select實現選擇并賦給變量COL1 COL2

完整的效果如下:

Linux中Shell編程怎么繪制國際象棋棋盤

以下是完整的代碼,請遵循GPL:

#!/bin/bash
 
#==================================================================
# Copyright (C) 2018Westos All rights reserved.
#  
#  FileName:chess.sh
#  Author: 知行至之
#  Mail: 291556677@qq.com
#  Date:2018-05-07
#  Description: 知行至之的國際象棋棋盤
#  Blog: http://blog.51cto.com/4081735 
#  Lisense: GPL 
#
#=================================================================
read -p "Please input cell's height: " HI
echo
read -p "Please input cell's width: " WI
echo
[[ "$HI" =~ ^[0-9]+$ ]] && [[ "$WI" =~ ^[0-9]+$ ]] || { echo "Invalid argu,Please input Numeric"; exit; }
echo "====================="
PS3="Please choose the Player1's Board Color(1-7): "
select COL1 in red green yellow blue purple skyblue white;do
    case $COL1 in
    red)
        echo Player\'s color is $COL1
        let COL1=1
        break
        ;;
    green)
        echo Player\'s color is $COL1
        let COL1=2
        break
        ;;
    yellow)
        echo Player\'s color is $COL1
        let COL1=3
        break
        ;;
    blue)
        echo Player\'s color is $COL1
        let COL1=4
        break
        ;;
    purple)
        echo Player\'s color is $COL1
                let COL1=5
        break
        ;;
    skyblue)
        echo Player\'s color is $COL1
        let COL1=6
        break
        ;;
    white)
        echo Player\'s color is $COL1
        let COL1=7
        break
        ;;
    esac
done
 
echo
echo "====================="
echo
 
PS3="Please choose the Player2's Board Color(1-7): "
select COL2 in red green yellow blue purple skyblue white;do
    case $COL2 in
    red)
        echo Player2\'s color is $COL2
        let COL2=1
        break
        ;;
    green)
        echo Player2\'s color is $COL2
        let COL2=2
        break
        ;;
    yellow)
        echo Player2\'s color is $COL2
        let COL2=3
        break
        ;;
    blue)
        echo Player2\'s color is $COL2
        let COL2=4
        break
        ;;
    purple)
        echo Player2\'s color is $COL2
        let COL2=5
        break
        ;;
    skyblue)
        echo Player2\'s color is $COL2
        let COL2=6
        break
        ;;
    white)
        echo Player2\'s color is $COL2
        let COL2=7
        break
        ;;
    esac
done
 
echo
echo "====================="
echo
 
for i in {1..8};do
 if [ $[i%2] -eq 1 ];then
    for j in `seq $HI`;do
        for k in {1..8};do
            if [ $[k%2] -eq 1 ];then
                echo -e "\033[1;4$[$COL1]m`printf "%$[$WI]s"`\033[0m\c"
            else
                echo -e "\033[1;4$[$COL2]m`printf "%$[$WI]s"`\033[0m\c"
            fi
            let k++
        done
        echo
        let j++
    done
 else
    for j in `seq $HI`;do
        for k in {1..8};do
            if [ $[k%2] -eq 1 ];then
                echo -e "\033[1;4$[$COL2]m`printf "%$[$WI]s"`\033[0m\c"
            else
                echo -e "\033[1;4$[$COL1]m`printf "%$[$WI]s"`\033[0m\c"
            fi
            let k++
        done
        echo
        let j++
    done
 fi
let i++
done

什么是Linux系統

Linux是一種免費使用和自由傳播的類UNIX操作系統,是一個基于POSIX的多用戶、多任務、支持多線程和多CPU的操作系統,使用Linux能運行主要的Unix工具軟件、應用程序和網絡協議。

以上是“Linux中Shell編程怎么繪制國際象棋棋盤”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

河南省| 灵丘县| 锡林浩特市| 濮阳县| 玉溪市| 灌阳县| 余干县| 霍州市| 兴义市| 鄂伦春自治旗| 霍城县| 保亭| 龙井市| 特克斯县| 莱西市| 理塘县| 丹东市| 静安区| 锦屏县| 荃湾区| 瓦房店市| 武宁县| 安福县| 龙游县| 柳河县| 沽源县| 囊谦县| 葵青区| 佛冈县| 常山县| 堆龙德庆县| 乃东县| 调兵山市| 会宁县| 安岳县| 无为县| 塔城市| 闸北区| 平塘县| 原平市| 团风县|