欢迎访问宙启技术站
智能推送

Python中使用curses库进行终端动画设计

发布时间:2024-01-03 19:54:09

Curses 是一个 Python 模块,它提供了控制终端屏幕的功能,例如在屏幕上创建文本界面、处理按键和鼠标事件、添加颜色等。它是一个很有用的库,特别是当你想要在终端中创建动画或简单的游戏时。

下面是一个使用 Curses 库创建一个简单的终端动画的例子:

import curses
import time

def main(stdscr):
    # 初始化 Curses
    curses.curs_set(0)  # 隐藏光标
    stdscr.nodelay(1)  # 非阻塞模式
    
    # 获取屏幕尺寸
    sh, sw = stdscr.getmaxyx()
    
    # 初始位置
    x = sw // 2
    y = sh // 2
    
    # 动画循环
    while True:
        # 清空屏幕
        stdscr.clear()
        
        # 绘制字符
        stdscr.addstr(y, x, "O")
        
        # 更新屏幕
        stdscr.refresh()
        
        # 获取按键
        key = stdscr.getch()
        
        # 退出循环条件
        if key == ord("q"):
            break
        
        # 更新位置
        if key == curses.KEY_UP:
            y -= 1
        elif key == curses.KEY_DOWN:
            y += 1
        elif key == curses.KEY_LEFT:
            x -= 1
        elif key == curses.KEY_RIGHT:
            x += 1
        
        # 限制位置范围
        x = max(0, min(x, sw - 1))
        y = max(0, min(y, sh - 1))
        
        # 睡眠一段时间,控制动画速度
        time.sleep(0.1)

# 运行主函数
if __name__ == "__main__":
    curses.wrapper(main)

上面的代码创建了一个在终端屏幕上移动的小球。主要的功能有:

1. 使用 curses.curs_set(0) 隐藏光标。

2. 使用 stdscr.nodelay(1) 将输入模式设置为非阻塞模式,这样可以不等待用户输入,同时保持程序运行。

3. 使用 stdscr.getmaxyx() 获取屏幕的尺寸,并初始化小球的位置。

4. 使用 stdscr.clear() 清空屏幕。

5. 使用 stdscr.refresh() 更新屏幕。

6. 使用 stdscr.addstr(y, x, "O") 在指定位置绘制字符。

7. 使用 stdscr.getch() 获取用户按下的键,并根据不同的键更新小球的位置。

8. 使用 time.sleep(0.1) 睡眠一段时间,控制动画的速度。

9. 使用 curses.wrapper(main) 运行主函数。

你可以尝试在终端中运行上面的代码,使用方向键可以控制小球的移动,按下 "q" 键可以退出动画。

Curses 库提供了更多的功能,如颜色设置、线程处理、鼠标事件处理等。你可以参考 Curses 官方文档(https://docs.python.org/3/library/curses.html)了解更多细节和例子。