Skip to content

Instantly share code, notes, and snippets.

@dblotsky
Last active August 29, 2015 14:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dblotsky/2eb0a9ec20c445faf343 to your computer and use it in GitHub Desktop.
Save dblotsky/2eb0a9ec20c445faf343 to your computer and use it in GitHub Desktop.
Curses die-roller for Settlers of Catan
#! /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()
@dblotsky
Copy link
Author

Works best with high terminal font size.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment