这两天在学习一些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: 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
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新动态
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]