Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

СРВ_4

.odt
Скачиваний:
0
Добавлен:
07.04.2025
Размер:
551.91 Кб
Скачать

Министерство науки и высшего образования Российской Федерации

Федеральное государственное бюджетное

образовательное учреждение высшего образования

«Уфимский университет науки и технологий»

Институт информатики, математики и робототехники

Кафедра вычислительной математики и кибернетики

Отчет по лабораторной работе № 4, 5

по дисциплине «Системы реального времени»

Выполнили:

Студенты группы ПРО-432Б

Ихсанова Э. А., Мустафин А. А., Видманов А. А.

Проверил старший преподаватель ВМиК:

Ковтуненко А. В.

Уфа 2024

Цель работы: изучить библиотеку simplegui по курсам и написать свой пример видеоигры.

Ход работы: были изучены курсы по simplegui и написана игра, похожая на doodle jump

Код программы:

import simpleguitk import random # Константы экрана WIDTH = 400 HEIGHT = 600 GRAVITY = 0.5 JUMP_STRENGTH = -15 PLATFORM_WIDTH = 80 PLATFORM_HEIGHT = 10 SPEED = 5 # Глобальные переменные player_pos = [WIDTH // 2, HEIGHT - 50] player_vel = 0 platforms = [] score = 0 game_over = False # Загрузка изображений с использованием simpleguitk player_image = simpleguitk.load_image(r"D:\универ\4 курс\срв\4-5\player.png") # Изображение персонажа background_image = simpleguitk.load_image(r"D:\универ\4 курс\срв\4-5\background.png") # Размеры изображения персонажа PLAYER_WIDTH = 35 PLAYER_HEIGHT = 35 # Флаг загрузки изображений images_loaded = False def image_loader(): global images_loaded if player_image.get_width() > 0 and background_image.get_width() > 0: images_loaded = True # Таймер для проверки загрузки изображений image_timer = simpleguitk.create_timer(100, image_loader) # Создание платформ def create_platforms(): global platforms platforms = [] y = HEIGHT - 50 for _ in range(10): x = random.randint(0, WIDTH - PLATFORM_WIDTH) platforms.append([x, y]) y -= random.randint(50, 100) # Расстояние между платформами # Фон def draw_background(canvas): canvas.draw_image( background_image, (background_image.get_width() / 2, background_image.get_height() / 2), (background_image.get_width(), background_image.get_height()), (WIDTH / 2, HEIGHT / 2), (WIDTH, HEIGHT) ) # Основная функция отрисовки def draw(canvas): global player_pos, player_vel, platforms, score, game_over draw_background(canvas) if not game_over: # Обновляем позицию персонажа player_vel += GRAVITY player_pos[1] += player_vel # Проверка на прыжок от платформы for platform in platforms: platform_x, platform_y = platform if (platform_y <= player_pos[1] + PLAYER_HEIGHT / 2 < platform_y + PLATFORM_HEIGHT and platform_x < player_pos[0] < platform_x + PLATFORM_WIDTH and player_vel > 0): player_vel = JUMP_STRENGTH score += 1 # Обновляем платформы new_platforms = [] for platform in platforms: platform[1] += SPEED if platform[1] < HEIGHT: new_platforms.append(platform) else: # Создаем новую платформу сверху x = random.randint(0, WIDTH - PLATFORM_WIDTH) new_platforms.append([x, 0]) platforms = new_platforms # Рисуем платформы for platform in platforms: canvas.draw_line([platform[0], platform[1]], [platform[0] + PLATFORM_WIDTH, platform[1]], PLATFORM_HEIGHT, 'Green') # Рисуем игрока (персонаж) canvas.draw_image(player_image, [player_image.get_width() // 2, player_image.get_height() // 2], [player_image.get_width(), player_image.get_height()], player_pos, [PLAYER_WIDTH, PLAYER_HEIGHT]) # Проверка на падение за нижний край экрана if player_pos[1] > HEIGHT: game_over = True # Рисуем счет canvas.draw_text("Score: " + str(score), [10, 30], 24, "White") else: # Отображение конца игры и кнопки перезапуска canvas.draw_text("Game Over!", [WIDTH // 2 - 80, HEIGHT // 2], 36, "Red") canvas.draw_text("Score: " + str(score), [WIDTH // 2 - 50, HEIGHT // 2 + 40], 24, "White") # Обработка прыжка def jump(key): if key == simpleguitk.KEY_MAP['left']: player_pos[0] -= 20 # Движение влево elif key == simpleguitk.KEY_MAP['right']: player_pos[0] += 20 # Движение вправо # Сброс игры def reset_game(): global player_pos, player_vel, platforms, score, game_over player_pos = [WIDTH // 2, HEIGHT - 50] player_vel = 0 create_platforms() score = 0 game_over = False # Обработчик кнопки перезапуска def restart_handler(): reset_game() # Настройка игры frame = simpleguitk.create_frame("Doodle Jump", WIDTH, HEIGHT) frame.set_draw_handler(draw) frame.set_keydown_handler(jump) # Создание кнопки перезапуска frame.add_button("Restart", restart_handler, 100) # Начало игры reset_game() image_timer.start() frame.start()

Вывод: реализовали свой пример игры на CodeSkulptor.

5

Соседние файлы в предмете Системы реального времени