Skip to content

Latest commit

 

History

History
327 lines (230 loc) · 7.45 KB

165-583348-[趣味拓展]移动的字符画.sy.md

File metadata and controls

327 lines (230 loc) · 7.45 KB
show version enable_checker
step
1.0
true

移动的字符画

回忆上次内容

  • for 循环可以遍历宝塔的层数
    • range 对象
    • list 对象
  • 还记得我们以前输出的小动物吗?
  • 用\e来控制输出的位置
  • 我们可以让输出的小动物移动起来吗?🤔
  • 先回顾操作大全

操作大全

图片描述

  • CSI 是
    • Control Sequence Introducer
    • 就是esc加[
      • esc就是
      • "\033"

图片描述

  • \033[nA 光标上移 n 行
  • \033[nB 光标下移 n 行
  • \033[nC 光标右移 n 行
  • \033[nD 光标左移 n 行
  • \033[y;xH 设置光标位置
  • \033[2J 清屏
  • \033[K 清除从光标到行尾的内容
  • \033[s 保存光标位置
  • \033[u 恢复光标位置
  • \033[?25l 隐藏光标
  • \033[?25h 显示光标
  • 我们先试试\033[2J

输出字符

print("\033[2J")
  • \033是转义序列
    • \33\033的省略写法
    • 33esc序号的 8 进制数形态
    • 也可以写成 16 进制形态\x1b
  • J 是模式选择
    • 清屏模式
    • 分为四种清屏
      • 0J - 从光标清到屏幕结束
      • 1J - 从光标清到屏幕开头
      • 2J - 整屏幕清
      • 3J - 整屏幕清并选择清空滚动缓存

图片描述

设置光标

print("\33[1;1Hoeasy")
  • 终端屏幕默认 80*24

图片描述

  • 经过验证确实是80*24
  • 尝试控制光标输出位置

输出位置控制

  • H 是选择模式
  • 1;1 指的是屏幕左上角
    • 这里指的是终端
      • 横向80字符
      • 纵向24字符
    • 1;1 指的是左上角
    • 中间分割用的是;
    • 设置好了之后输出后面的字符 oeasy

图片描述

  • 可以先清屏再输出么?

清屏并设置光标

print("\33[2J")
print("\33[1;1Hoeasy")
print("\33[2J\33[1;1Hoeasy")
print("\33[2J\33[10;10Hoeasy")
  • 终端接受到了这样一串字符串
  • "\33[2J\33[1;1Hoeasy"
    • \33[2J 终端接收到后清屏
    • \33[1;1H 终端接收到后设置光标
    • 终端输出 oeasy
  • "\33[2J\33[10;10Hoeasy"
    • 先清屏
    • 再在(10,10)坐标输出oeasy
  • 退出游乐场

先输出重定向

sudo apt install cowsay
cowsay -f hellokitty "oeasy"

图片描述

  • 然后用三引号的方式去原样输出这个图像

输出

图片描述

  • %s/\\$/\\\\/
    • 替换所有结尾处的反斜杠

图片描述

加上移动

图片描述

  • for 是一个循环
    • 让 i 从 1 到 10
    • 每个位置愣一秒
    • str 把数字 i 变成字符串好相加
    • 纵向可以了
  • 横向可以么?

行头替换

  • 尝试批量
    • 替换开头部分

图片描述

  • 5,13s/^/ print(" " * i + "/
    • 5,13 范围
    • s 替换
    • /分隔开匹配部分和待替换部分
      • 匹配部分为 ^ 行头位置
      • 待替换部分为 print(" " * i + "

图片描述

行尾替换

图片描述

  • 5,13s/$/")/
    • 5,13 范围
    • s 替换
    • /分隔开匹配部分和待替换部分
      • 匹配部分为 $ 行尾位置
      • 待替换部分为")

图片描述

  • 这代码应该如何理解呢?

向右移动

  • " "*i 就是输出 i 个空格

图片描述

  • 如果我想
    • 既要横向运动
    • 又要纵向运动
  • 斜着走
  • 可以么?

斜着走

图片描述

  • 这个第四句好长
  • 应该如何理解呢?

字符串相加

  • 其实还是字符串的拼合运算

图片描述

  • 可以控制倾斜角度吗?
  • 给i翻4倍
  • 就可以控制倾斜角度
  • 如果我还想让猫说出时间
  • 还能刷新怎么办呢?

时间函数

  • 找到前面的输出时间的 py 函数
#!/usr/bin/python3
import time
localtime = time.strftime('%H:%M:%S')
print(localtime,end="")
  • 先验证一下
  • 然后尝试整合

整合

图片描述

  • 这样就可以

    • 既移动
    • 又刷新时间了
  • 如果我想让hellokitty每秒出现在一个随机位置

  • 怎么办呢?

随机范围

图片描述

  • x大致在1到14
  • y大致在1到55

代码

图片描述

  • 用 cowsay 和 hellokitty 玩了这么久
  • cowsay有没有给hellokitty付版权费呢?

版权费

  • hellokitty是版权宣传大使

图片描述

  • 不过hello kitty是谁做的呢?

版权

  • 1969年
    • 比利时画家雷·古森
    • 创作了一个名叫米思蒂的可爱小猫形象
  • 一开始米思蒂是出现在连环画中
    • 不过由于米思蒂的形象非常讨喜
    • 深入人心

图片描述

  • 因此在70年代
    • 它也被改编成了动画
    • 风靡了欧美
  • 米思蒂就是最初原创者么?

原创

  • 也许要追溯到第一个画岩画的人
    • 画岩画的时候还没有会对岩画声明版权

图片描述

  • 那个时候什么分不清什么是猫什么是老虎
    • 因为猫那个时候可能还没有被驯化
    • 不过直至今日猫也没有被完全驯化

同化

  • 不过我们汉字已经把这个画法确立了
    • 并且规定出每一笔的次序

图片描述

  • 叫做笔顺
    • 错了还要重写
  • 谁又曾经给造出汉字的仓颉以版权呢?

抽象

  • 这其实还是在规范着脑中的概念

图片描述

  • 这是虚拟对于真实的模拟对象

真实的猫

  • 没有一只长得和汉字或者卡通一模一样
    • ฅ( ̳• ·̫ • ̳)
  • 没有一只会发出喵喵的标准叫声
  • 喵语也没有标准的拼音

图片描述

  • 当然更不知道
    • hellokitty是一个有版权的形象
    • 甚至成为了宣传版权的的大使
    • [逃···ε=ε=ε=ε=ε=ε=┌(; ̄◇ ̄)┘

总结

  • 我们进化了 \33 控制字符串
    • 可以清屏
    • 也可以指定光标位置进行输出
  • 在此基础上
  • 可以让hello kitty
    • 横向移动
    • 纵向移动
    • 斜着移动
    • 报时移动
    • 随机乱动
  • for循环还能干什么?
    • 只要是 iterable 的对象就可以
  • iterable 的对象都有什么?🤔
  • 我们下次再说!👋