Skip to content

Instantly share code, notes, and snippets.

@dblotsky
Last active August 29, 2015 14:10
Show Gist options
  • Select an option

  • Save dblotsky/2eb0a9ec20c445faf343 to your computer and use it in GitHub Desktop.

Select an option

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
Copy Markdown
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