螢幕上的懷舊與複古 | 用 Python Animation 設計 ASCII 動畫
隨著科技日新月異,人們對過去的純樸與美好愈發懷念。這種懷舊的情感,不僅體現在時尚、音樂等領域,也逐漸滲透到程式設計的 Python Animation 世界。我們可以創造出充滿復古情懷的動畫,將懷舊情愫與現代科技巧妙地結合。
內容
簡介
在當今高解析度圖形和先進動畫盛行的數位時代,ASCII Art 的簡潔美學依然具有獨特的魅力和吸引力。這種懷舊的復古風格可以成為設計創意項目的強大工具。這篇文章將引導你使用 Python 創建一個用 ASCII 藝術製作的動畫,展示一輛車在路上移動的過程。準備好回到編程的純真時代了嗎?
什麼是 ASCII Art?
ASCII Art 是一種使用 ASCII(美國信息交換標準碼)字符創建圖像和設計的圖形技術。它回溯到計算機早期時代,那時文本圖形是標準。儘管簡單,ASCII Art 可以極具細節和表現力,用文本字符創作藝術作品能激發創造力和問題解決能力。
設定環境
- 安裝 Python 3.x or 更高。
- 終端或命令行工具並可執行 Python 腳本。
Python Animation 程式碼
目標是創建一輛車子,它可以在畫布上左右移動,並根據移動方向切換不同的車子形狀。以下是完整的 Python 程式碼:
import os
import time
def clear_screen():
# Windows uses 'cls', Unix/Linux/MacOS uses 'clear'
os.system('cls' if os.name == 'nt' else 'clear')
def draw_car(position, direction="right"):
# Create a blank canvas
road = [' ' * 60 for _ in range(6)]
# ASCII art for the car (facing right)
car_right = [
' ______',
' /|_||_\\`.__',
' ( _ _ _\\',
' `-(_)--(_)-\'']
# ASCII art for the car (facing left, horizontally flipped)
car_left = [
' ______',
' __.\'/_||_||\\',
' /_ _ _ )',
' \'-(_)--(_)-\'']
# Choose car art based on the direction
car = car_left if direction == "left" else car_right
# Insert the car at the given position
for i, line in enumerate(car):
if position < len(road[i]):
road[i] = ' ' * position + line + ' ' * (60 - len(line) - position)
# Add the road
road[-1] = '_' * 60
# Return the full scene as a single string
return '\n'.join(road)
def animate_car():
try:
# Move the car from left to right
for position in range(40):
clear_screen()
print(draw_car(position, direction="right"))
time.sleep(0.1) # Pause for 0.1 seconds
# Move the car from right to left
for position in range(40, -1, -1):
clear_screen()
print(draw_car(position, direction="left"))
time.sleep(0.1)
except KeyboardInterrupt:
print("\nAnimation ended!")
if __name__ == "__main__":
print("Press Ctrl+C to stop the animation")
animate_car()
程式細節解析
引入必要的模組
import os
import time
os
: 用來執行跨平台的指令,這裡主要用於清除畫面。time
: 用來在每個畫面之間添加延遲,創造流暢的動畫效果。
清除螢幕
def clear_screen():
os.system('cls' if os.name == 'nt' else 'clear')
每一幀動畫需要清空終端畫面,否則畫面會疊加,影響觀看效果。並根據作業系統選擇對應的清屏指令。Windows: 使用 cls
而 Unix/Linux/MacOS: 使用 clear
。
繪製車子與道路
def draw_car(position, direction="right"):
...
畫布由 6 行寬度 60 的字元組成,最底層為底線路面,車子的 ASCII 藝術根據方向切換,並按照指定的 position
插入畫布,確保不超出邊界。
ASCII 動畫
car_right = [
' ______',
' /|_||_\\`.__',
' ( _ _ _\\',
' `-(_)--(_)-\'']
car_left = [
' ______',
' __.\'/_||_||\\',
' /_ _ _ )',
' \'-(_)--(_)-\'']
動畫邏輯透過從左到右及右到左的循環控制車子位置,每幀更新畫面並調用 draw_car
繪製,並使用 try-except
捕捉鍵盤中斷 (Ctrl+C) 安全結束動畫。
執行效果
執行程式後,畫面上會顯示一輛小車以流暢的動畫形式來回移動:
______
/|_||_\`.__
( _ _ _\
`-(_)--(_)-'
________________________________________________________
結論
利用 Python 創建 ASCII 動畫,是一個結合程式邏輯與創意表現的有趣專案。在這篇教學中,我們從基本畫布開始,搭配循環控制和 ASCII 藝術,製作出一個車子左右移動的動態效果。通過清理畫面、更新位置和處理方向,動畫變得流暢自然。此外,我們還學習了使用 try-except
捕捉鍵盤中斷 (Ctrl+C),讓程式能安全地結束。這樣的項目不僅讓人回味 ASCII 藝術的懷舊魅力,還提供了很大的擴展性,無論是添加背景元素、實現多車互動,甚至創造完全自定義的場景,都能激發你的創意。現在就動手試試,探索 ASCII 動畫的無限可能吧!