#!/usr/bin/python3
# ===================================================================
# draw a smiley face using curses
# ===================================================================
import curses
from curses import wrapper
import time
face = [ ' **** ', # row 0
' ** ** ', # row 1
' * * ', # row 2
'* ** ** *', # row 3
'* ** ** *', # row 4
'* *', # row 5
'* * * *', # row 6
' * **** * ', # row 7
' * * ', # row 8
' **** ' ] # row 9
blink3 = '* ** *' # blink row 3
blink4 = '* -- ** *' # blink row 4
row_offset = 10 # location offset
col_offset = 5 # location offset
# -------------------------------------------------------------------
# ---- main function
# -------------------------------------------------------------------
def main(stdscr):
# ---- create color (id,forground,background)
curses.init_pair(1,curses.COLOR_RED,curses.COLOR_BLACK)
curses.init_pair(2,curses.COLOR_WHITE,curses.COLOR_BLACK)
red_black = curses.color_pair(1)
white_black = curses.color_pair(2)
# ---- clear screen
stdscr.clear()
# ---- draw face
blink = False
col = 0
loop = 12
while True:
# ---- test loop?
if loop < 0:
break
loop -= 1
# ---- draw face
for row in range(len(face)):
rr = row + row_offset
cc = col + col_offset
if row == 3 and blink:
ss = ''.join(f'{c}{c}' for c in blink3)
stdscr.addstr(rr,cc,ss,white_black)
continue
if row == 4 and blink:
ss = ''.join(f'{c}{c}' for c in blink4)
stdscr.addstr(rr,cc,ss,white_black)
continue
ss = ''.join(f'{c}{c}' for c in face[row])
stdscr.addstr(rr,cc,ss,white_black)
# ---- blink next loop?
blink = not blink
# ---- refresh screen
stdscr.refresh()
# ---- sleep
time.sleep(0.5)
# -------------------------------------------------------------------
# ---- main - curses wrapper
# -------------------------------------------------------------------
# ---- initialize curses
wrapper(main)