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
Beispiel #2
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
Beispiel #3
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'
     )
Beispiel #4
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",
     )
Beispiel #5
0
    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'))
Beispiel #6
0
    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"))
Beispiel #7
0
    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))))
Beispiel #8
0
    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'))))
Beispiel #9
0
    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))))
Beispiel #11
0
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)
Beispiel #12
0
 def test_bg(self):
     on_red('asdf')
     on_blue('asdf')
     self.assertTrue(True)
Beispiel #13
0
 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))
Beispiel #14
0
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)
Beispiel #15
0
 def test_bg(self):
     on_red("asdf")
     on_blue("asdf")
     self.assertTrue(True)
Beispiel #16
0
 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),
     )
Beispiel #17
0
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)
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))]