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

СРВ_4

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

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

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

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

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

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

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

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

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

Выполнили:

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

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

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

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

Уфа 2024

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

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

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

import simplegui

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 = simplegui.load_image("https://steamuserimages-a.akamaihd.net/ugc/963102626831738904/AF6C24D887432C20A8DF151004A25B6E21DBC763/?imw=512&imh=461&ima=fit&impolicy=Letterbox&imcolor=%23000000&letterbox=true") # Изображение персонажа

background_image = simplegui.load_image("https://courses.cs.duke.edu/fall10/cps108/code/src/vooga/examples/control/resources/images/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 = simplegui.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 == simplegui.KEY_MAP['left']:

player_pos[0] -= 25 # Движение влево

elif key == simplegui.KEY_MAP['right']:

player_pos[0] += 25 # Движение вправо

# Сброс игры

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 = simplegui.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.

8

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