def __init__(self, width, height): self.width = width self.height = height n = 10 self.player = Entity(on_blue(green(bold('5'))), width // 2, height // 2 - 2, speed=5) self.npcs = [Entity(on_blue(red('X')), i * width // (n * 2), j * height // (n * 2)) for i in range(1, 2*n, 2) for j in range(1, 2*n, 2)] self.turn = 0
def __init__(self, width, height): self.width = width self.height = height n = 5 self.player = Entity(on_blue(green(bold('5'))), width // 2, height // 2 - 2, speed=5) self.npcs = [ Entity(on_blue(red('X')), i * width // (n * 2), j * height // (n * 2)) for i in range(1, 2 * n, 2) for j in range(1, 2 * n, 2) ] self.turn = 0
def test_right_sequence_in_py3(self): red_on_blue = fmtstr('hello', 'red', 'on_blue') blue_on_red = fmtstr('there', fg='blue', bg='red') green_s = fmtstr('!', 'green') full = red_on_blue + ' ' + blue_on_red + green_s self.assertEqual( full, on_blue(red("hello")) + " " + on_red(blue("there")) + green("!")) self.assertEqual( str(full), '\x1b[31m\x1b[44mhello\x1b[49m\x1b[39m \x1b[34m\x1b[41mthere\x1b[49m\x1b[39m\x1b[32m!\x1b[39m' )
def test_right_sequence_in_py3(self): red_on_blue = fmtstr("hello", "red", "on_blue") blue_on_red = fmtstr("there", fg="blue", bg="red") green_s = fmtstr("!", "green") full = red_on_blue + " " + blue_on_red + green_s self.assertEqual( full, on_blue(red("hello")) + " " + on_red(blue("there")) + green("!")) self.assertEqual( str(full), "\x1b[31m\x1b[44mhello\x1b[49m\x1b[39m \x1b[34m\x1b[41mthere\x1b[49m\x1b[39m\x1b[32m!\x1b[39m", )
def test_ljust_rjust(self): """""" b = fmtstr(u'ab', 'blue', 'on_red', 'bold') g = fmtstr(u'cd', 'green', 'on_red', 'bold') s = b + g self.assertEqual(s.ljust(6), b + g + on_red(' ')) self.assertEqual(s.rjust(6), on_red(' ') + b + g) # doesn't add empties to end self.assertEqual(s.ljust(4), b + g) self.assertEqual(s.rjust(4), b + g) # behavior if background different s = on_blue('a') + on_green('b') self.assertEqual(s.ljust(3), fmtstr('ab ')) self.assertEqual(s.rjust(3), fmtstr(' ab')) s = blue(on_blue('a')) + green(on_green('b')) self.assertEqual(s.ljust(3), blue('a') + green('b') + fmtstr(' ')) self.assertEqual(s.rjust(3), fmtstr(' ') + blue('a') + green('b')) #using fillchar self.assertEqual(s.ljust(3, '*'), fmtstr('ab*')) self.assertEqual(s.rjust(3, '*'), fmtstr('*ab'))
def test_ljust_rjust(self): """""" b = fmtstr("ab", "blue", "on_red", "bold") g = fmtstr("cd", "green", "on_red", "bold") s = b + g self.assertEqual(s.ljust(6), b + g + on_red(" ")) self.assertEqual(s.rjust(6), on_red(" ") + b + g) # doesn't add empties to end self.assertEqual(s.ljust(4), b + g) self.assertEqual(s.rjust(4), b + g) # behavior if background different s = on_blue("a") + on_green("b") self.assertEqual(s.ljust(3), fmtstr("ab ")) self.assertEqual(s.rjust(3), fmtstr(" ab")) s = blue(on_blue("a")) + green(on_green("b")) self.assertEqual(s.ljust(3), blue("a") + green("b") + fmtstr(" ")) self.assertEqual(s.rjust(3), fmtstr(" ") + blue("a") + green("b")) # using fillchar self.assertEqual(s.ljust(3, "*"), fmtstr("ab*")) self.assertEqual(s.rjust(3, "*"), fmtstr("*ab"))
def tick(self): for npc in self.npcs: self.move_entity(npc, *npc.towards(self.player)) for entity1, entity2 in itertools.combinations(self.entities, 2): if (entity1.x, entity1.y) == (entity2.x, entity2.y): if self.player in (entity1, entity2): return 'you lost on turn %d' % self.turn entity1.die() entity2.die() if all(npc.speed == 0 for npc in self.npcs): return 'you won on turn %d' % self.turn self.turn += 1 if self.turn % 20 == 0: self.player.speed = max(0, self.player.speed - 1) self.player.display = on_blue(green(bold(str(self.player.speed))))
def tick(self): """Returns a message to be displayed if game is over, else None""" for npc in self.npcs: self.move_entity(npc, *npc.towards(self.player)) for entity1, entity2 in itertools.combinations(self.entities, 2): if (entity1.x, entity1.y) == (entity2.x, entity2.y): if self.player in (entity1, entity2): return 'you lost on turn %d' % self.turn entity1.die() entity2.die() if all(npc.speed == 0 for npc in self.npcs): return 'you won on turn %d' % self.turn self.turn += 1 if self.turn % 20 == 0: self.player.speed = max(1, self.player.speed - 1) self.player.display = on_blue(green(bold(str(self.player.speed).decode('utf8'))))
def tick(self): """Returns a message to be displayed if game is over, else None""" for npc in self.npcs: self.move_entity(npc, *npc.towards(self.player)) for entity1, entity2 in itertools.combinations(self.entities, 2): if (entity1.x, entity1.y) == (entity2.x, entity2.y): if self.player in (entity1, entity2): return 'you lost on turn %d' % self.turn entity1.die() entity2.die() if all(npc.speed == 0 for npc in self.npcs): return 'you won on turn %d' % self.turn self.turn += 1 if self.turn % 20 == 0: self.player.speed = max(1, self.player.speed - 1) self.player.display = on_blue(green(bold(str(self.player.speed))))
def tick(self): for npc in self.npcs: self.move_entity(npc, *npc.towards(self.player)) for entity1 in self.entities: for entity2 in self.entities: if entity1 is entity2: continue if (entity1.x, entity1.y) == (entity2.x, entity2.y): if entity1 is self.player: return 'you lost on turn %d' % self.turn entity1.speed = 0 entity2.speed = 0 entity1.display = on_red(bold(yellow('o'))) entity2.display = on_red(bold(yellow('o'))) if all(npc.speed == 0 for npc in self.npcs): return 'you won on turn %d' % self.turn self.turn += 1 if self.turn % 20 == 0: self.player.speed = max(0, self.player.speed - 1) self.player.display = on_blue(green(bold(str(self.player.speed))))
from __future__ import unicode_literals # convenient for Python 2 import random from curtsies import FullscreenWindow, Input, FSArray from curtsies.fmtfuncs import red, bold, green, on_blue, yellow print(yellow('this prints normally, not to the alternate screen')) with FullscreenWindow() as window: with Input() as input_generator: msg = red(on_blue(bold('Press escape to exit'))) a = FSArray(window.height, window.width) a[0:1, 0:msg.width] = [msg] window.render_to_terminal(a) for c in input_generator: if c == '<ESC>': break elif c == '<SPACE>': a = FSArray(window.height, window.width) else: s = repr(c) row = random.choice(range(window.height)) column = random.choice(range(window.width-len(s))) color = random.choice([red, green, on_blue, yellow]) a[row, column:column+len(s)] = [color(s)] window.render_to_terminal(a)
def test_bg(self): on_red('asdf') on_blue('asdf') self.assertTrue(True)
def test_multiple_bfs_splice(self): self.assertEqual( fmtstr('a') + blue('b'), on_blue(' ' * 2).splice(fmtstr('a') + blue('b'), 0, 2)) self.assertEqual( on_red('yo') + on_blue(' '), on_blue(' ' * 5).splice(on_red('yo'), 0, 2)) self.assertEqual(' ' + on_red('yo') + on_blue(' '), on_blue(' ' * 6).splice(' ' + on_red('yo'), 0, 3)) self.assertEqual( on_blue("hey") + ' ' + on_red('yo') + on_blue(' '), on_blue(' ' * 9).splice(on_blue("hey") + ' ' + on_red('yo'), 0, 6)) self.assertEqual( on_blue(' ' * 5) + on_blue("hey") + ' ' + on_red('yo') + on_blue(' '), on_blue(' ' * 14).splice( on_blue("hey") + ' ' + on_red('yo'), 5, 11))
def mainloop(window, p2_bot=False): p1_attrs = { "appearance": on_blue(cyan("1")), "x": window.width // 4, "y": window.height // 2, "keys": { "w": 90, "a": 180, "s": 270, "d": 0 }, } p2_attrs = { "appearance": on_red(yellow("2")), "x": 3 * window.width // 4, "y": window.height // 2, "keys": { "<UP>": 90, "<LEFT>": 180, "<DOWN>": 270, "<RIGHT>": 0 }, } FPS = 15 players = [Cycle(p1_attrs), Cycle(p2_attrs)] if p2_bot: # make p2 a bot players[1] = Bot(p2_attrs) world = gameboard(window.width, window.height, players) dt = 1 / FPS world.draw_border() window.render_to_terminal(world.grid) reactor = Input() schedule_next_frame = reactor.scheduled_event_trigger(Frame) schedule_next_frame(when=time.time()) with reactor: for c in reactor: if isinstance(c, Frame): tick = world.tick() window.render_to_terminal(world.grid) if not tick: # if no crashes when = c.when + dt while when < time.time(): when += dt schedule_next_frame(when) else: # if crashed world.grid[0:4, 0:25] = fsarray([ world.winner_msg(tick), "r to restart", "q to quit", "b to make player 2 a bot", ]) window.render_to_terminal(world.grid) elif c.lower() in ["r", "q", "b"]: break else: # common case world.process_event(c) if c.lower() == "r": mainloop(window, p2_bot) elif c.lower() == "b": mainloop(window, True)
def test_bg(self): on_red("asdf") on_blue("asdf") self.assertTrue(True)
def test_multiple_bfs_splice(self): self.assertEqual( fmtstr("a") + blue("b"), on_blue(" " * 2).splice(fmtstr("a") + blue("b"), 0, 2), ) self.assertEqual( on_red("yo") + on_blue(" "), on_blue(" " * 5).splice(on_red("yo"), 0, 2)) self.assertEqual( " " + on_red("yo") + on_blue(" "), on_blue(" " * 6).splice(" " + on_red("yo"), 0, 3), ) self.assertEqual( on_blue("hey") + " " + on_red("yo") + on_blue(" "), on_blue(" " * 9).splice(on_blue("hey") + " " + on_red("yo"), 0, 6), ) self.assertEqual( on_blue(" " * 5) + on_blue("hey") + " " + on_red("yo") + on_blue(" "), on_blue(" " * 14).splice( on_blue("hey") + " " + on_red("yo"), 5, 11), )
from direct.showbase.ShowBase import ShowBase base = ShowBase() base.setSleep(0.001) import random from curtsies import FullscreenWindow, Input, FSArray from curtsies.fmtfuncs import red, bold, green, on_blue, yellow r = 0 print(yellow('the following code takes over the screen')) with FullscreenWindow() as window: print(red(on_blue(bold('Press escape to exit')))) with Input() as input_generator: a = FSArray(window.height, window.width) a[r, 0] = [repr("Test " + str(r))] window.render_to_terminal(a) r += 1 for c in input_generator: if c == '<ESC>': break elif c == '<SPACE>': a = FSArray(window.height, window.width) else: row = random.choice(range(window.height)) column = random.choice(range(window.width-len(repr(c)))) color = random.choice([red, green, on_blue, yellow]) a[row, column:column+len(repr(c))] = [color(repr(c))]