麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發 > Linux Shell > 正文

Linux Shell編程繪制國際象棋棋盤

2020-07-27 18:44:59
字體:
來源:轉載
供稿:網友

這兩天在學習一些shell編程的知識,在做到一道國際象棋的題目時,覺得有些意思,就將它寫成博客。

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

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

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

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

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

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

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

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

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

完整的效果如下:

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

#!/bin/bash #==================================================================# Copyright (C) 2018Westos All rights reserved.#  #  FileName:chess.sh#  Author: 知行至之#  Mail: [email protected]#  Date:2018-05-07#  Description: 知行至之的國際象棋棋盤#  Blog: http://blog.51cto.com/4081735 #  Lisense: GPL ##=================================================================read -p "Please input cell's height: " HIechoread -p "Please input cell's width: " WIecho[[ "$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        ;;    esacdone echoecho "====================="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        ;;    esacdone echoecho "====================="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 filet i++done

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 久久影城 | 久久久日韩av免费观看下载 | 欧美精品成人 | 在线免费亚洲 | 久久久电影电视剧免费看 | 免费视频xxxx | 亚洲综合中文 | 日韩毛片一区二区三区 | 全黄性性激高免费视频 | 四季久久免费一区二区三区四区 | 国产在线精品一区二区 | 国产羞羞视频在线免费观看 | 国产精品视频专区 | 国产在线一区二区三区 | 欧美一级黄色影院 | 一级免费观看 | 色婷婷久久一区二区 | 久久精品日产第一区二区三区 | 国产亚洲欧美日韩在线观看不卡 | 99麻豆久久久国产精品免费 | 免费国产a | 色中色在线视频 | 日本成人一二三区 | 欧美成人性生活 | 欧美一级特黄aaaaaa在线看首页 | 中午字幕无线码一区2020 | 午夜精品小视频 | 国内成人自拍视频 | 毛片免费大全短视频 | 欧美 日韩 国产 成人 | 欧美激情精品久久久久久黑人 | 免费永久在线观看黄网 | 狠狠久久伊人中文字幕 | 国产亚洲精品综合一区91555 | 久久久久久久久久久久免费 | 美国一级免费视频 | 国产88久久久国产精品免费二区 | 亚洲欧美国产高清 | 久草视频福利在线观看 | 午夜精品久久久久久久爽 | 日本道中文字幕 |