Exemplo n.º 1
0
def plan():
    logging = Logging()

    display = DisplayBlock()
    dim_x, dim_y = display.get_dimensions()

    logging.info("resolution x: %d, y: %d" % (dim_x, dim_y))
    display.draw_ellipse(int(dim_x / 2), int(dim_y / 2),
                         int(dim_x / 2) - 5,
                         int(dim_y / 2) - 5)

    text = "Hallo"
    letter_width = 8
    letter_height = 8

    text_x = int(dim_x / 2) - int(len(text) * letter_width / 2) + 1
    text_y = int(dim_y / 2) - int(letter_height / 2) - 1

    display.print_text(text_x, text_y, text)
    line_y = text_y + letter_height + 2
    display.draw_line(text_x, line_y, text_x + len(text) * letter_width - 2,
                      line_y)

    display.showtime()
Exemplo n.º 2
0
class Plan:
    def __init__(self):
        self.started = False
        self.display = DisplayBlock()
        self.logging = Logging("plan")
        self.button = ButtonBlock()
        self.rgb = RgbLedBlock()
        self.led_default()
        self.dim_x, self.dim_y = self.display.get_dimensions()
        self.center_x = int(self.dim_x / 2)
        self.center_y = int(self.dim_y / 2)
        self.point = None
        self.map = None
        self.score = 0

        self.wait_for_start()
        self.redraw()

    def wait_for_start(self):
        self.started = False
        self.score = 0
        self.point = Point(self.center_y)
        self.map = Map(self.dim_x, self.dim_y)
        self.display.invert(True)
        self.button.value.changed(False, self.start_button)
        gc.collect()  #force garbage collection before game starts

    def start_button(self):
        self.started = True
        self.logging.info("started")
        self.redraw()
        self.led_default()

    def redraw(self):
        speed = int(self.map.current_x / 400) + 1
        if speed > 10:
            speed = 10

        if not self.map.is_enough_data():
            remove_step_count = speed
            self.map.remove_first_layers(remove_step_count)
            self.map.add_random_layers(remove_step_count)

        self.display.clean()
        self.point.draw(self.display)
        if self.started:
            if self.button.value.get():
                self.point.y -= 2
            else:
                self.point.y += 2

        border_top, border_bottom = self.map.get_borders(self.point.x)

        touch = False
        if self.point.y < border_top + self.point.r - 1:
            self.point.y = border_top + self.point.r
            touch = True

        if self.point.y > border_bottom - self.point.r:
            self.point.y = border_bottom - self.point.r
            touch = True

        if not touch:
            diamonds = self.map.get_diamonds(self.point.x)
            for diamond in diamonds:
                if diamond.is_in_area(self.point.y - self.point.r,
                                      self.point.y + self.point.r):
                    self.map.remove_diamond(diamond)
                    self.score += 1
                    self.rgb.set_color(RgbLedBlockColor.green)
                    Planner.postpone(0.05, self.led_default)

        self.map.draw(self.display)
        if self.started:
            self.display.invert(False if touch else True)
            self.map.current_x += speed
        #score = int(self.map.current_x / 10)
        self.display.print_text(0, 0, str(self.score), color=0)
        self.display.showtime()
        if not touch:
            Planner.postpone(0.05, self.redraw)
        else:
            self.started = False
            self.rgb.set_color(RgbLedBlockColor.red)
            Planner.postpone(
                1, self.wait_for_reset_pressed
            )  #wait a while to prevent random press and wait for starting new game

    def led_default(self):
        self.rgb.set_color(RgbLedBlockColor.aquamarine)

    def wait_for_reset_pressed(self):
        self.button.value.equal_to(True, False, self.wait_for_reset_released)

    def wait_for_reset_released(self):
        self.button.value.equal_to(False, False, self.wait_for_start)