Last active
August 29, 2015 14:10
-
-
Save dblotsky/2eb0a9ec20c445faf343 to your computer and use it in GitHub Desktop.
Curses die-roller for Settlers of Catan
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#! /usr/bin/python | |
import random | |
import curses | |
KEY_ESCAPE = 27 | |
KEY_ENTER = 10 | |
KEY_Q = 81 | |
KEY_q = 113 | |
def roll(): | |
return random.randint(1, 6) | |
def rolltwo(): | |
return roll() + roll() | |
def draw(screen, color, number): | |
screen.move(0, 0) | |
screen.erase() | |
height, width = screen.getmaxyx() | |
screen.move(height / 2, width / 2) | |
screen.addstr(str(number), color) | |
white = curses.color_pair(3) | |
screen.move(height - 2, 0) | |
screen.addstr("ENTER: roll", white) | |
screen.move(height - 1, 0) | |
screen.addstr("Q/q: quit", white) | |
def curses_setup(screen): | |
print '\033[?25l' # hide cursor | |
curses.start_color() | |
curses.init_pair(1, curses.COLOR_RED, curses.COLOR_BLACK) | |
curses.init_pair(2, curses.COLOR_GREEN, curses.COLOR_BLACK) | |
curses.init_pair(3, curses.COLOR_WHITE, curses.COLOR_BLACK) | |
curses.noecho() | |
screen.keypad(1) | |
curses.cbreak() | |
screen.move(0, 0) | |
screen.erase() | |
def curses_teardown(screen): | |
screen.move(0, 0) | |
screen.erase() | |
curses.nocbreak() | |
screen.keypad(0) | |
curses.echo() | |
curses.endwin() | |
print '\033[?25h' # show cursor | |
def main(): | |
random.seed() | |
screen = curses.initscr() | |
curses_setup(screen) | |
dice = rolltwo() | |
color_parity = True | |
try: | |
while True: | |
color_pair_id = 1 if color_parity else 2 | |
color = curses.color_pair(color_pair_id) | |
draw(screen, color, dice) | |
key = screen.getch() | |
if key == KEY_ENTER: | |
color_parity = not color_parity | |
dice = rolltwo() | |
elif key == KEY_ESCAPE or key == KEY_Q or key == KEY_q: | |
break | |
except KeyboardInterrupt as e: | |
pass | |
finally: | |
curses_teardown(screen) | |
if __name__ == '__main__': | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Works best with high terminal font size.