這兩天在學(xué)習(xí)一些shell編程的知識,在做到一道國際象棋的題目時,覺得有些意思,就將它寫成博客。
先來看看國際象棋棋盤長啥樣:
仔細想了會棋盤的分布規(guī)則,這個問題肯定有很多思路,我自己想到的是規(guī)則是
1.將棋盤行數(shù)作為一個大循環(huán),循環(huán)8次,每次循環(huán)根據(jù)行號的奇偶來確定格子顏色的次序;
2.在單個行中,循環(huán)8次并判斷列的奇偶數(shù)來確定打印顏色
以上思路能夠打印出最簡單的棋盤,但是shell中一個空格的顯示形狀并非正方形,而且是空格的高度大于寬度。因此需要在單個棋盤的行的打印循環(huán)外在加一層控制打印空格行數(shù)的循環(huán),以下圖可能對理解有些幫助:
上圖通過echo打印了3個紅色的空格并非正方形,并且可以看到最后一行的綠色光標并非正方形,它構(gòu)成了整個棋盤的最小打印單元,那我就需要控制單行中空格個數(shù)以及由多少行空格組成一個規(guī)則正方行,如下圖
上圖中,熒光部分seq 2控制打印兩行,熒光%4s部分控制每行打印多少個空格,通過/n/c來控制一次循環(huán)后換行的問題。
綜上,怎個棋盤就分成當行打印由兩個循環(huán)來控制寬度和高度,由一個判斷語句根據(jù)循環(huán)次數(shù)的奇偶來控制打印顏色;在此基礎(chǔ)上再加上一個控制打印整個棋盤8行的大循環(huán),并且使用一個判斷語句來根據(jù)循環(huán)次數(shù)的奇偶數(shù)來控制每行的顏色和上下行的顏色錯開。打印結(jié)果如下:
在以上基礎(chǔ)上,實現(xiàn)用戶可自定義的棋盤格子的長寬,以及自定義的顏色。
基本原理是在:
echo -e "/033[1;4$[$COL1]m`printf "%$[$WI]s"`/033[0m/c"
其中變量COL1是棋盤的第一種顏色,變量WI是棋盤單個格子的寬度。高度則帶入給變量賦值后當作循環(huán)的次數(shù)。注意這里的寬度/高度最小單元是一個光標的寬度和高度。
高度,寬度的問題解決了,還有控制選擇顏色的問題。在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"
其中的數(shù)字40-47分別代表對應(yīng)背景顏色,這里不需要打印前景字體所以不需要30-37數(shù)字。另外剔除黑色背景
新聞熱點
疑難解答