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))))
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 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 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 die(self): self.speed = 0 self.display = on_red(bold(yellow('o')))
import sys from curtsies.fmtfuncs import blue, red, bold, on_red from curtsies.window import Window from curtsies.terminal import Terminal if __name__ == '__main__': print(blue('hey') + ' ' + red('there') + ' ' + red(bold('you'))) with Terminal(sys.stdin, sys.stdout) as tc: with Window(tc) as t: rows, columns = t.tc.get_screen_size() while True: c = t.tc.get_event() if c == "": sys.exit() # same as raise SystemExit() elif c == "a": a = [blue(on_red(c*columns)) for _ in range(rows)] elif c == "b": a = t.array_from_text("a small array") else: a = t.array_from_text("try a, b, or ctrl-D") t.render_to_terminal(a)
from curtsies.fmtfuncs import blue, red, bold, on_red from curtsies.window import FullscreenWindow import time if __name__ == '__main__': print(blue('hey') + ' ' + red('there') + ' ' + red(bold('you'))) n = int(sys.argv[1]) if len(sys.argv) > 1 else 100 with FullscreenWindow() as window: rows, columns = window.get_term_hw() t0 = time.time() for i in range(n): a = [blue(on_red('qwertyuiop'[i%10]*columns)) for _ in range(rows)] window.render_to_terminal(a) t1 = time.time() t2 = time.time() for i in range(n): a = [blue(on_red('q'[i%1]*columns)) for _ in range(rows)] window.render_to_terminal(a) t3 = time.time() t4 = time.time() a = [blue(on_red('q'*columns)) for _ in range(rows)] arrays = [] for i in range(n): a[i // columns] = a[i // columns].setitem(i % columns, 'x') arrays.append([fs.copy() for fs in a]) for i in range(n): window.render_to_terminal(arrays[i])
def test_new_with_atts_removed(self): a = fmtstr("hi", "blue", "on_green") b = fmtstr("there", "blue", "on_red") c = a + b self.assertEqual(c.new_with_atts_removed("fg"), on_green("hi") + on_red("there"))
def test_bg(self): on_red('asdf') on_blue('asdf') self.assertTrue(True)
def test_bg(self): on_red("asdf") on_blue("asdf") self.assertTrue(True)
def test_new_with_atts_removed(self): a = fmtstr('hi', 'blue', 'on_green') b = fmtstr('there', 'blue', 'on_red') c = a + b self.assertEqual(c.new_with_atts_removed('fg'), on_green('hi') + on_red('there'))
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)
from curtsies.window import FullscreenWindow import time if __name__ == '__main__': print(blue('hey') + ' ' + red('there') + ' ' + red(bold('you'))) n = int(sys.argv[1]) if len(sys.argv) > 1 else 100 with FullscreenWindow() as window: rows, columns = window.get_term_hw() t0 = time.time() for i in range(n): a = [ blue(on_red('qwertyuiop'[i % 10] * columns)) for _ in range(rows) ] window.render_to_terminal(a) t1 = time.time() t2 = time.time() for i in range(n): a = [blue(on_red('q'[i % 1] * columns)) for _ in range(rows)] window.render_to_terminal(a) t3 = time.time() t4 = time.time() a = [blue(on_red('q' * columns)) for _ in range(rows)] arrays = [] for i in range(n): a[i // columns] = a[i // columns].setitem(i % columns, 'x') arrays.append([fs.copy() for fs in a])