예제 #1
0
    def render(self, timestamp, canvas):
        if not self.redraw:
            return False
        self.redraw = False
        clear(canvas, (128, 128, 128))

        puttextblock(canvas,
                     0,
                     4,
                     canvas.width,
                     self.TITLE,
                     font_color=(255, 0, 0),
                     font=self.font,
                     shadow_color=(0, 0, 0),
                     align='center')

        for i, value in enumerate(self.OPTIONS):
            puttextblock(canvas,
                         0,
                         int((1.5 + i) * (self.font.line_height + 1)) + 4,
                         canvas.width,
                         value,
                         font_color=(255, 255, 0) if i == self.index else
                         (255, 0, 0),
                         font=self.font,
                         shadow_color=(70, 0, 0),
                         align='center')

        return True
예제 #2
0
    def render(self, timestamp, canvas):
        clear(canvas, 0x4e4a4e)
        for item in self.items:
            item.render(timestamp, canvas)
        puttextblock(canvas,
                     0,
                     1,
                     canvas.width,
                     '> HERO <',
                     font_color=0xdeeed6,
                     font=self.FONT,
                     align='center')

        return True
예제 #3
0
    def render(self, timestamp, canvas):
        self.offset -= 1
        self.redraw = False
        clear(canvas, (100, 100, 100))
        puttextblock(canvas,
                     0,
                     self.offset,
                     canvas.width,
                     self.text,
                     font_color=(255, 0, 0),
                     font=self.font,
                     shadow_color=(70, 0, 0),
                     align='center')

        return True
예제 #4
0
import time
from random import randint
from engine.keyboard import Keyboard, Keys
from engine.screen import SubPixelScreen
from engine.drawing import draw

with SubPixelScreen(width=63, height=63) as screen, Keyboard() as keyboard:
    t0 = time.time()

    count = 0
    draw.clear(screen.canvas, 0xff0000)
    draw.line(screen.canvas, 0, 0, screen.width - 1, screen.height - 1,
              0x00ff00)
    screen.sync()
    keyboard.getch()

    while True:
        if keyboard.getch(False) == Keys.ESC:
            break
        x0 = randint(0, screen.width - 1)
        x1 = randint(0, screen.width - 1)
        y0 = randint(0, screen.height - 1)
        y1 = randint(0, screen.height - 1)
        color = randint(0, 0xffffff)

        draw.line(screen.canvas, x0, y0, x1, y1, color)
        screen.sync()
        count += 1

    t1 = time.time()
예제 #5
0
    def interact(self, event) -> bool:
        if self.states:
            return False
        key = event.key
        pos_x, pos_y, pos_z, ang, item_pos = self.prev_state
        show_item = item_pos > 0
        if key in (Keys.UP, Keys.DOWN, 'x'):
            if key == 'x' and not (round(2 * pos_x) == 1 and round(
                    2 * pos_z) == 5 and self.inventory.current == 'sword'
                                   and self.env.dragon_hp is not None):
                return True
            mult = -1 if key == Keys.DOWN else 1

            new_pos_x = round(2 * pos_x +
                              mult * math.sin(ang) * self.STEP_LENGTH)
            new_pos_z = round(2 * pos_z +
                              mult * math.cos(ang) * self.STEP_LENGTH)
            cell = LEVEL[new_pos_z][new_pos_x]

            if key == 'x':
                if self.inventory.current == 'sword':
                    f = [0.1, 0.2, 0.25, 0.2, 0.1, 0.0]
                    self.env.dragon_hp -= 1
                    self.sound_effects.play('media/sound/sword-unsheathe.ogg')
                else:
                    return True
            elif (cell in (' ', 'd') or (cell == 'X' and not show_item) or
                  (cell == 'D' and self.env.door_open)) and (
                      self.env.dragon_hp is None or new_pos_x != 1
                      or new_pos_z != 6):
                f = [(i + 1) / self.FPT for i in range(self.FPT)]
                self.sound_effects.play('media/sound/interface2.ogg')
            else:
                f = [0.1, 0.25, 0.35, 0.20, 0.1, 0.0]
                if mult == -1:
                    f = [0.5 * i for i in f]
                self.sound_effects.play('media/sound/interface1.ogg')

            for m in f:
                self.states.append(
                    (pos_x + mult * math.sin(ang) * self.STEP_LENGTH * m,
                     pos_y,
                     pos_z + mult * math.cos(ang) * self.STEP_LENGTH * m, ang,
                     item_pos))

            if self.env.dragon_hp is not None and self.env.dragon_hp <= 0:
                self.scene._objects.remove(DRAGON)
                self.env.dragon_hp = None
                self.sound_effects.play('media/sound/random1.ogg')

        if key in (Keys.LEFT, Keys.RIGHT):  # Turn left / right
            mult = 1 if key == Keys.LEFT else -1
            for i in range(self.FPT):
                self.states.append(
                    (pos_x, pos_y, pos_z, (ang + mult * math.pi / 2 *
                                           (i + 1) / self.FPT) % (2 * math.pi),
                     item_pos))

        if key == Keys.SPACE:  # Jumping
            for j in [-0.2, -0.3, -0.35, -0.3, -0.2, 0.0]:
                self.states.append((pos_x, pos_y + j, pos_z, ang, item_pos))

        if key in ('n', 'm'):  # Ascend / Descend
            mult = 1 if key == 'n' else -1
            for i in range(self.FPT):
                self.states.append(
                    (pos_x, pos_y + 0.45 * mult * (i + 1) / self.FPT, pos_z,
                     ang, item_pos))

        if key in '<>' and item_pos > 0:  # Switch active inventory item
            self.inventory.prev() if key == '<' else self.inventory.next()
            self.states.append((pos_x, pos_y, pos_z, ang, item_pos))

        if key == '?':
            if show_item:
                for i in range(self.FPT):
                    self.states.append(
                        (pos_x, pos_y, pos_z, ang, 1 - (i + 1) / self.FPT))
            else:
                for i in range(self.FPT):
                    self.states.append(
                        (pos_x, pos_y, pos_z, ang, (i + 1) / self.FPT))

        if key == 'e':
            new_pos_x = round(2 * pos_x + math.sin(ang) * self.STEP_LENGTH)
            new_pos_z = round(2 * pos_z + math.cos(ang) * self.STEP_LENGTH)

            if not show_item:
                if LEVEL[new_pos_z][
                        new_pos_x] == 'D' and not self.env.door_open:
                    clear(self.overlay, Color4f(0, 0, 0, 0))
                    puttextblock(self.overlay,
                                 6,
                                 10,
                                 63,
                                 "Locked!!!",
                                 font_color=(255, 255, 255),
                                 font=FONT,
                                 shadow_color=(0, 0, 0))
                    self.overlay_count = 50
                if round(2 * pos_x) == 3 and round(
                        2 * pos_z) == 9 and not self.env.has_key:
                    TEXTURES['c'].texture = ImageTexture(self.tileset[45 * 64 +
                                                                      45])
                    self.env.has_key = True
                    clear(self.overlay, Color4f(0, 0, 0, 0))
                    puttextblock(self.overlay,
                                 6,
                                 10,
                                 63,
                                 "You found",
                                 font_color=(255, 255, 255),
                                 font=FONT,
                                 shadow_color=(0, 0, 0))
                    puttextblock(self.overlay,
                                 6,
                                 22,
                                 63,
                                 "   Gold Key",
                                 font_color=(255, 255, 0),
                                 font=FONT,
                                 shadow_color=(0, 0, 0))
                    self.overlay_count = 50
                    self.inventory.items.append('gold_key')
            elif show_item and self.inventory.current == 'gold_key':
                if LEVEL[new_pos_z][new_pos_x] == 'D':
                    if self.env.door_open:
                        TEXTURES['D'].texture = ImageTexture(
                            self.tileset[11 * 64 + 32 - 5 - 4])
                    else:
                        TEXTURES['D'].texture = ImageTexture(
                            self.tileset[11 * 64 + 32 - 5])
                    self.env.door_open = not self.env.door_open
                    self.sound_effects.play('media/sound/door.ogg')

            elif show_item and self.inventory.current == 'shovel':
                if self.env.tresure_pos and abs(
                        self.env.tresure_pos[0] - pos_x) < 0.01 and abs(
                            self.env.tresure_pos[1] - pos_z) < 0.01:
                    clear(self.overlay, Color4f(0, 0, 0, 0))
                    puttextblock(self.overlay,
                                 6,
                                 10,
                                 63,
                                 "You found",
                                 font_color=(255, 255, 255),
                                 font=FONT,
                                 shadow_color=(0, 0, 0))
                    puttextblock(self.overlay,
                                 6,
                                 22,
                                 63,
                                 "Long Sword",
                                 font_color=(255, 255, 0),
                                 font=FONT,
                                 shadow_color=(0, 0, 0))
                    self.overlay_count = 50
                    self.inventory.items.append('sword')
                    self.env.tresure_pos = None
                else:
                    clear(self.overlay, Color4f(0, 0, 0, 0))
                    puttextblock(self.overlay,
                                 6,
                                 10,
                                 63,
                                 "You dig!!!",
                                 font_color=(255, 255, 255),
                                 font=FONT,
                                 shadow_color=(0, 0, 0))
                    self.overlay_count = 50

            self.states.append(self.prev_state)

        if key == Keys.ESC:
            self.loop.exit()

        return True