import curses
import sys
MAP = [
" #################### " ,
" ###....############# " ,
" ###....############# " ,
" ###...........###### " ,
" #############.###### " ,
" #############....### " ,
" #############....### " ,
" #################### " ]
def draw_map ( win ) :
map_line = 1
for line in MAP :
win . addstr ( map_line , 1 , line )
map_line + = 1
def draw_status ( status ) :
status . addstr ( 1 , 1 , " PLAYER STATS " )
def draw_player ( win , player_y , player_x ) :
win . addstr ( player_y , player_x , ' @ ' , curses . A_BOLD )
def update ( win , status , player_y , player_x ) :
win . clear ( )
win . box ( )
status . hline ( 0 , 0 , curses . ACS_HLINE , 78 )
draw_map ( win )
draw_status ( status )
draw_player ( win , player_y , player_x )
win . refresh ( )
def create_ui ( stdscr , height , width , status_height ) :
curses . curs_set ( 0 )
stdscr . clear ( )
begin_x = 0
begin_y = 0
win = curses . newwin ( height , width , begin_y , begin_x )
status = win . subwin ( status_height , height - 2 , height - 6 , begin_x + 1 )
win . keypad ( True )
return win , status
def move_player ( player_y , player_x , target_y , target_x ) :
if MAP [ target_y - 1 ] [ target_x - 1 ] != ' # ' :
return target_y , target_x
else :
return player_y , player_x
def handle_input ( win , y , x , height , width ) :
ch = win . getch ( )
if ch == ord ( ' q ' ) :
sys . exit ( 0 )
elif ch == curses . KEY_UP :
y = ( y - 1 ) % height
elif ch == curses . KEY_DOWN :
y = ( y + 1 ) % height
elif ch == curses . KEY_RIGHT :
x = ( x + 1 ) % width
elif ch == curses . KEY_LEFT :
x = ( x - 1 ) % width
return y , x
def main ( stdscr ) :
width = 80
height = 26
win , status = create_ui ( stdscr , 26 , 80 , 5 )
player_x = 4
player_y = 4
while True :
update ( win , status , player_y , player_x )
new_y , new_x = handle_input (
win , player_y , player_x , height , width )
player_y , player_x = move_player (
player_y , player_x , new_y , new_x )
curses . wrapper ( main )