Curseyou is a Python Rogue style game that's intended to be small and simple. You can take this and turn it into your own game, but keep in mind it's built in stages based on the content of Learn Python the Hard Way 6th Edition.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
curseyou-python-rogue/phase_03.py

97 lines
2.5 KiB

import curses
import sys
class Map:
def __init__(self):
self.map = [
"####################",
"###....#############",
"###....#############",
"###...........######",
"#############.######",
"#############....###",
"#############....###",
"####################"]
def move_player(self, player_y, player_x, target_y, target_x):
if self.map[target_y - 1][target_x - 1] != '#':
return target_y, target_x
else:
return player_y, player_x
def draw(self, win):
map_line = 1
for line in self.map:
win.addstr(map_line, 1, line)
map_line += 1
class UI:
def __init__(self, stdscr, the_map, 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)
win.keypad(True)
status = win.subwin(status_height, width-2, height-status_height, begin_x+1)
# keep these for later by assigning to self
self.begin_x = 0
self.begin_y = 0
self.map = the_map
self.height = height
self.width = width
self.win = win
self.status = status
self.status_height = status_height
def update(self, player_y, player_x):
self.win.clear()
self.win.box()
self.status.hline(0,0, curses.ACS_HLINE, self.width - 2)
self.map.draw(self.win)
self.draw_status()
self.draw_player(player_y, player_x)
self.win.refresh()
def draw_status(self):
self.status.addstr(1, 1, "PLAYER STATS")
def draw_player(self, player_y, player_x):
self.win.addstr(player_y, player_x, '@', curses.A_BOLD)
def handle_input(self, y, x):
ch = self.win.getch()
if ch == ord('q'):
sys.exit(0)
elif ch == curses.KEY_UP:
y = (y - 1) % self.height
elif ch == curses.KEY_DOWN:
y = (y + 1) % self.height
elif ch == curses.KEY_RIGHT:
x = (x + 1) % self.width
elif ch == curses.KEY_LEFT:
x = (x - 1) % self.width
return y, x
def main(stdscr):
width=80
height=26
the_map = Map()
ui = UI(stdscr, the_map, height, width, 5)
player_x = 4
player_y = 4
while True:
ui.update(player_y, player_x)
new_y, new_x = ui.handle_input(player_y, player_x)
player_y, player_x = the_map.move_player(player_y, player_x, new_y, new_x)
curses.wrapper(main)