# -*- encoding: utf-8 -*-
#
# Обработка клавиатуры
#
# Основано на примерах Simpson College Computer Science <http://cs.simpson.edu>

import pygame

# Определим константы для цветов (модель RGB)
black = (0, 0, 0)
white = (255, 255, 255)
green = (0, 255, 0)
red = (255, 0, 0)
blue = (0, 0, 255)
dkgreen = (0, 100, 0)
purple = (0xBF, 0x0F, 0xB5)
brown = (0x55, 0x33, 0x00)


def draw_background(screen):
    """Отрисовка заднего фона"""

    # Заполняем белым цветом
    screen.fill(white)


def draw_item(screen, x_float, y_float):
    # Округлим позицию, т.к. функции рисования принимают int
    x = round(x_float)
    y = round(y_float)

    pygame.draw.rect(screen, green, [0 + x, 0 + y, 30, 10], 0)
    pygame.draw.circle(screen, black, [15 + x, 5 + y], 7, 0)
    

def main_impl():
    # Инициализируем экран для рисования
    size = (640, 480)
    screen = pygame.display.set_mode(size)

    # Текущая скорость объекта в пикселах в секунду
    x_speed = 0
    y_speed = 0

    # Текущая позиция объекта в пикселах
    x_coord = 10.0
    y_coord = 10.0

    clock = pygame.time.Clock()

    # Флаг: стоит ли завершить игру
    done = False

    # Время, прошедшее с отрисовки предыдущего кадра
    dt = 0

    # Константа: скорость движения при нажатии на кнопку (пикселы в секунду)
    moving_speed = 200.0

    # ------- главный цикл приложения
    while not done:
        # Обработаем события (ввод с клавиатуры, мышь и т.п.)
        for event in pygame.event.get():
            if event.type == pygame.QUIT:  # пользователь нажал кнопку закрытия окна
                done = True  # завершить главный цикл на следующей итерации

            # Пользователь нажал на кнопку
            if event.type == pygame.KEYDOWN:
                # Определим, какая именно кнопка нажата и изменим скорость
                # объекта соотвествующим образом

                if event.key == pygame.K_LEFT:
                    x_speed = -moving_speed
                if event.key == pygame.K_RIGHT:
                    x_speed = moving_speed
                if event.key == pygame.K_UP:
                    y_speed = -moving_speed
                if event.key == pygame.K_DOWN:
                    y_speed = moving_speed

            # Пользователь отпустил кнопку
            if event.type == pygame.KEYUP:
                # Определим, какая именно кнопка нажата и изменим скорость
                # объекта соотвествующим образом

                if event.key == pygame.K_LEFT:
                    x_speed = 0
                if event.key == pygame.K_RIGHT:
                    x_speed = 0
                if event.key == pygame.K_UP:
                    y_speed = 0
                if event.key == pygame.K_DOWN:
                    y_speed = 0

        # Сдвинем объект
        x_coord += x_speed * dt
        y_coord += y_speed * dt

        # Рисуем задний фон
        draw_background(screen)

        # Рисуем объект
        draw_item(screen, x_coord, y_coord)

        # Показываем на экран только что нарисованный кадр
        pygame.display.flip()

        # Ограничиваем частоту обновления экрана 20 кадрами в секунду
        dt = clock.tick(40) / 1000


def main():
    # Инициализируем библиотеку PyGame.
    pygame.init()

    try:
        main_impl()
    finally:
        # Всегда деинициализируем библиотеку PyGame, даже в случае падения.
        pygame.quit()


if __name__ == "__main__":
    main()