Файл: Игра 3 в ряд на языке Python по дисциплине Языки и системы программирования. Данная программа осуществляет вывод на экран случайным образом расположенных объектов разного цвета и дальнейшие варианты их взаимодействия.docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 07.11.2023

Просмотров: 941

Скачиваний: 20

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Рисунок 2.4. Эффект победы.Проигрывание эффекта поражения если количество очков меньше GOAL_SCORE:

else:

draw.lose()

sound.play_effect(«lose»)

gameover_displayed = True

pygame.display.flip()
Рисунок 2.5. Эффект проигрыша.2.4. Графическая часть программыВ данном разделе осуществлён разбор программного кода модуля draw.py с последующим описанием основных функций.После запуска программы происходит загрузка основных файлов игры из папки images.Всего в папке находится 7 файлов, 6 файлов являются изображениями плиток, firetransparent является изображением логотипа приложения.

def load_images():

image_names = [«fire», «air», «water», «earth», «light», «dark», «fire_transparent»]

for i in range(len(image_names)):

file_path = «images/» + image_names[i] + «.png»

image_dict[image_names[i]] = pygame.image.load(file_path)
Далее идёт открытие игрового окна, для которого устанавливается размер, иконка приложения и название.

def create_screen(grid_width, grid_height, box_length):

global BOX_LENGTH, screen

BOX_LENGTH = box_length



load_images()

window_icon = image_dict[«fire_transparent»]

pygame.display.set_icon(window_icon)

pygame.display.set_caption(«Element Crush»)

screen = pygame.display.set_mode((BOX_LENGTH*(grid_width+2),

BOX_LENGTH*grid_height))

return screen
Устанавливается размер в пикселях.

def to_pixels(x):

return x*BOX_LENGTH
Прорисовывается игровое поле, для которого устанавливается белый цвет, а также устанавливается правая часть поля с игровым интерфейсом.

def window (board, turns_left, score, goal_score):

screen.fill((255, 255, 255)) #Clears the screen to all white

draw_sidebar(turns_left, score, goal_score)

draw_board(board)
Текстовая честь интерфейса, содержащая надписи количества очков, которые нужно набрать, количества ходов, количества набранных очков, формулы подсчёта очков.

def draw_sidebar(turns_left, score, goal_score):

font = pygame.font.SysFont(«Times New Roman», 40)

text = font.render(«Goal:», True, (205,133,63))

screen.blit(text, (to_pixels(7.25), to_pixels(0)))

pygame.draw.line(screen, (205,133,63), (to_pixels(7), to_pixels(0.6)),

(to_pixels(8.75),to_pixels(0.6)), 1)

text = font.render(str(goal_score), True, (205,133,63))

screen.blit(text, (to_pixels(7.4), to_pixels(0.6)))

text = font.render(«Turns», True, (0,0,0))

screen.blit(text, (to_pixels(7.2), to_pixels(1.5)))

text = font.render(«Left:», True, (0,0,0))

screen.blit(text, (to_pixels(7.3), to_pixels(2)))

pygame.draw.line(screen, (0,0,0), (to_pixels(7), to_pixels(2.6)),

(to_pixels(8.75),to_pixels(2.6)), 1)

text = font.render(str(turns_left), True, (0,191,255))

screen.blit(text, (to_pixels(7.5), to_pixels(2.6)))

text = font.render(«SCORE:», True, (0,0,255))

screen.blit(text, (to_pixels(7), to_pixels(3.5)))

pygame.draw.line(screen, (0,0,255), (to_pixels(7), to_pixels(4.1)),

(to_pixels(8.9),to_pixels(4.1)), 1)

offset = 0

if score >= 100: offset = -0.3

elif score >= 10: offset = -0.15

text = font.render(str(score), True, (255,0,0))

screen.blit(text, (to_pixels(7.75 + offset), to_pixels(4.1)))

text = font.render(«Scoring:», True, (0,0,0))

screen.blit(text, (to_pixels(7), to_pixels(5)))

pygame.draw.line(screen, (0,0,0), (to_pixels(7), to_pixels(5.6)),

(to_pixels(8.9),to_pixels(5.6)), 1)

font = pygame.font.SysFont(«Times New Roman», 12)

text = font.render(«Elements Matched in a Turn», True, (0,0,0))

screen.blit(text, (to_pixels(7), to_pixels(5.7)))

text = font.render(«X», True, (0,0,0))

screen.blit(text, (to_pixels(7.8), to_pixels(5.9)))

text = font.render(«Turn Combo Count», True, (0,0,0))

screen.blit(text, (to_pixels(7.25), to_pixels(6.1)))
Прорисовка игровых плиток:

def draw_icon(num, x, y):

icon = None

x = to_pixels(x)+3 #box = 70x70, images are 64x64, pixel offset to center

y = to_pixels(y)+3



if num == 1:

icon = image_dict[«water»]

elif num == 2:

icon = image_dict[«fire»]

elif num == 3:

icon = image_dict[«air»]

elif num == 4:

icon = image_dict[«earth»]

elif num == 5:

icon = image_dict[«light»]

elif num == 6:

icon = image_dict[«dark»]

if num != 0:

screen.blit(icon, (x,y))
Прорисовка выделения плитки:

def selected(x, y):

x = to_pixels(x)

y = to_pixels(y)

rect = pygame.Rect(x, y, BOX_LENGTH, BOX_LENGTH)

pygame.draw.rect(screen, (255,0,0), rect, 3)
Прорисовка эффектов выигрыша и проигрыша:

def win():

center_msg(«WIN!»)

def lose():

center_msg(«LOSE»)

def center_msg(msg):

color = (0,0,0)

if msg == «WIN!»: color = (0,255,0)

elif msg == «LOSE»: color = (255,0,0)



rect = pygame.Rect(to_pixels(2), to_pixels(3),

to_pixels(3), to_pixels(2))

pygame.draw.rect(screen, (255,255,255), rect, 0)

pygame.draw.rect(screen, color, rect, 4)

font = pygame.font.SysFont(«Times New Roman», 70)

text = font.render(«YOU», True, color)

screen.blit(text, (to_pixels(2.4), to_pixels(3)))

text = font.render(msg, True, color)

screen.blit(text, (to_pixels(2.4), to_pixels(4)))

Прорисовка эффекта комбинаций от 2 до 5:

def combo_msg(combo_count):

msg = ««

color = (0,0,0)

x = 0.1



if combo_count >= 5:

color = (255,0,0)

msg = «LEGENDARY»

elif combo_count == 4:

color = (255,0,255)

msg = «EPIC»

x = 2.25

elif combo_count == 3:

color = (0,255,255)

msg = «TRIPLE»

x = 1.65

elif combo_count == 2:

color = (0,255,0)

msg = «DOUBLE»

x = 1.2
Рисунок 2.6.Эффект при двух подряд собраных цепочках.2.5. Отладка программыОтладка, или debugging - это поиск (локализация), анализ и устранение ошибок в программном обеспечении, которые были найдены во время тестирования.Виды ошибок:1. Ошибки компиляцииЭто простые ошибки, которые в компилируемых языках программирования выявляет компилятор (программа, которая преобразует текст на языке программирования в набор машинных кодов). Если компилятор показывает несколько ошибок, отладку кода начинают с исправления самой первой, так как она может быть причиной других.В интерпретируемых языках (например Python) текст программы команда за командой переводится в машинный код и сразу исполняется. К моменту обнаружения ошибки часть программы уже может исполниться.2. Ошибки компоновкиОшибки связаны с разрешением внешних ссылок. Выявляет компоновщик (редактор связей) при объединении модулей программы. Простой пример - ситуация, когда требуется обращение к подпрограмме другого модуля, но при компоновке она не найдена. Ошибки также просто найти и устранить.3. Ошибки выполнения (RUNTIME Error)Ошибки, которые обнаруживают операционная система, аппаратные средства или пользователи при выполнении программы. Они считаются непредсказуемыми и проявляются после успешной компиляции и компоновки. Можно выделить четыре вида проявления таких ошибок:

  • Сообщение об ошибке, которую зафиксировали схемы контроля машинных команд. Это может быть переполнение разрядной сетки (когда старшие разряды результата операции не помещаются в выделенной области памяти), «деление на ноль», нарушение адресации и другие;

  • Сообщение об ошибке, которую зафиксировала операционная система. Она же, как правило, и документирует ошибку. Это нарушение защиты памяти, отсутствие файла с заданным именем, попытка записи на устройство, защищенное от записи;

  • Прекращение работы компьютера или зависание. Это и простые ошибки, которые не требуют перезагрузки компьютера, и более сложные, когда нужно выключать ПК;

  • Получение результатов, которые отличаются от ожидаемых. Программа работает стабильно, но выдает некорректный результат, который пользователь воспринимает за истину.

Методы отладки программного обеспечения1. Метод ручного тестированияОтладка программы заключается в тестировании вручную с помощью тестового набора, при работе с которым была допущена ошибка. Несмотря на эффективность, метод не получится использовать для больших программ или программ со сложными вычислениями. Ручное тестирование применяется как составная часть других методов отладки.2. Метод индукцииВ основе отладки системы - тщательный анализ проявлений ошибки. Это могут быть сообщения об ошибке или неверные результаты вычислений. Например, если во время выполнения программы завис компьютер, то, чтобы найти фрагмент проявления ошибки, нужно проанализировать последние действия пользователя. На этапе отладки программы строятся гипотезы, каждая из них проверяется. Если гипотеза подтвердилась, информация об ошибке детализируется, если нет - выдвигаются новые.3. Метод дедукцииСначала специалисты предлагают множество причин, по которым могла возникнуть ошибка. Затем анализируют их, исключают противоречащие имеющимся данным. Если все причины были исключены, проводят дополнительное тестирование. В обратном случае наиболее вероятную причину пытаются доказать.4. Метод обратного прослеживанияЭффективен для небольших программ. Начинается с точки вывода неправильного результата. Для точки выдвигается гипотеза о значениях основных переменных, которые могли привести к ошибке. Далее на основании этой гипотезы строятся предположения о значениях переменных в предыдущей точке. Процесс продолжается до момента, пока не найдут ошибку. [12]2.6. Тестирование программыТестирование программы - это этап, на котором проверяется, как ведет себя программа на как можно большем количестве входных наборов данных, в том числе и на заведомо неверных.В разное время и в различных источниках тестированию давались различные определения, в том числе:

  • Процесс выполнения программы с целью нахождения ошибок;

  • Интеллектуальная дисциплина, имеющая целью получение надежного программного обеспечения без излишних усилий на его проверку;

  • Техническое исследование программы для получения информации о её качестве с точки зрения определённого круга заинтересованных лиц;

  • Проверка соответствия между реальным поведением программы и её ожидаемым поведением на конечном наборе тестов, выполненных определённым образом;

  • Процесс наблюдения за выполнением программы в специальных условиях и вынесения на этой основе оценки каких-либо аспектов её работы;

  • Процесс, имеющий целью выявление ситуаций, в которых поведение программы является неправильным, нежелательным или не соответствующим спецификации;

  • Процесс, содержащий в себе все активности жизненного цикла, как динамические, так и статические, касающиеся планирования, подготовки и оценки программного продукта и связанных с этим результатов работ с целью определить, что они соответствуют описанным требованиям, показать, что они подходят для заявленных целей и для определения дефектов.

Существует несколько признаков, по которым принято производить классификацию видов тестирования. Обычно выделяют следующие:

  1. По объекту тестирования
1.1 Функциональное тестирование1.2 Тестирование производительности1.2.1 Нагрузочное тестирование1.2.2 Стресс-тестирование1.2.3 Тестирование стабильности1.3 Конфигурационное тестирование1.4 Юзабилити-тестирование1.5 Тестирование безопасности1.6 Тестирование локализации1.7 Тестирование совместимости2. По знанию внутреннего строения системы2.1 Тестирование чёрного ящика2.2 Тестирование белого ящика2.3 Тестирование серого ящика3. По степени автоматизации3.1 Ручное тестирование3.2 Автоматизированное тестирование3.3 Полу автоматизированное тестирование4. По степени изолированности4.1 Тестирование компонентов4.2 Интеграционное тестирование4.3 Системное тестирование5. По времени проведения тестирования5.1 Альфа-тестирование5.1.1 Дымовое тестирование5.1.2 Тестирование новой функции 5.1.3 Подтверждающее тестирование5.1.4 Регрессионное тестирование5.1.5 Приёмочное тестирование5.2 Бета-тестирование6. По признаку позитивности сценариев6.1 Позитивное тестирование6.2 Негативное тестирование7. По степени подготовленности к тестированию7.1 Тестирование по документации7.2 Интуитивное тестирование [10]