Выбор средств разработки кода



Описание интегрированной среды PyCharm

 

PyCharm – это одна из наиболее удобных сред разработки на языке Python. Существует в двух версиях:

· PyCharm Community – свободно-распространяемая версия с открытым исходным кодом.

· PyCharm Professional – проприетарная платная версия с триальным периодом.

PyCharm — интегрированная среда разработки для языка программирования Python. Предоставляет средства для анализа кода, графический отладчик, инструмент для запуска юнит-тестов и поддерживает веб-разработку на Django. PyCharm разработана компанией JetBrains на основе IntelliJ IDEA.

PyCharm позволяет:

· Производить отладку кода

· Запускать тесты

· Профилировать код и находить узкие места

· Работать с службами контроля версий

· Производить автоматическое развертывание

· Удаленная разработка

· Работа с базами данных

· Настраиваемый интерфейс

· Кроссплатформенность

· Расширяемый функционал с помощью плагинов

 

Выбор GUI -фреймворка

GUI (графический интерфейс пользователя) — это форма интерфейса, которая позволяет пользователю взаимодействовать с электронным устройством с помощью графических иконок и аудио-индикаторов вместо текстовых интерфейсов. GUI появился в ответ на кажущуюся крутой кривую изучения CLI (интерфейса командной строки), которая требует команд, набираемых с клавиатуры.

GUI-фреймворки легко доступны — они бесплатны и имеют открытый исходный код. В Python есть широкий спектр вариантов: от кроссплатформенных до заточенных под конкретную платформу.

· Kyvi - это бесплатная библиотека Python с открытым исходным кодом. Она используется для разработки мобильных приложений и других приложений широкого назначения с естественным пользовательским интерфейсом. Распространяется по лицензии MIT и может работать на: Android, iOS, GNU / Linux, macOS, Windows.

· PyQT - кроссплатформенная Python-библиотка, реализующая библиотеку Qt (принадлежит Nokia) из одноименного фреймворка для разработки приложений. Сейчас PyQT доступна на Unix/Linux, Windows, macOS и Sharp Zaurus. Она объединяет лучшее из Python и Qt. И только разработчик решает, как создавать программу: с помощью кода или Qt Designer для дизайна визуальных элементов.

· Tkinter - Tkinter — связка Python с набором GUI-инструментов Tk. Это стандартный интерфейс-Python. Он доступен на Linux, Windows и macOS с установленными Python. Имя Tkinter происходит от Tk interface.

· WXPython - это смесь из библиотеки классов WxWidgets (ранее — WxWindows) для C++ и Python.

 

Разработка GUI

Выберем в качестве GUI-фреймворка библиотеку Tkinter так как она является самой распространенной [3].

Tkinter (от англ. Tk interface) — кроссплатформенная событийно-ориентированная графическая библиотека на основе средств Tk (широко распространённая в мире GNU/Linux и других UNIX‐подобных систем, портирована также и на Microsoft Windows), написанная Стином Лумхольтом (Steen Lumholt) и Гвидо ван Россумом. Входит в стандартную библиотеку Python.

Tkinter — это свободное программное обеспечение, распространяемое под Python-лицензией

Библиотека предназначена для организации диалогов в программе с помощью оконного графического интерфейса (GUI). В составе библиотеки присутствуют общие графические компоненты:

· Toplevel/Tk — Окно верхнего уровня (корневой виджет).

· Frame — Рамка. Содержит в себе другие визуальные компоненты, используется для группировки виджетов.

· Label — Этикетка. Показывает некоторый текст или графическое изображение.

· Text — Форматируемое поле ввода текста. Позволяет показывать, редактировать и форматировать текст с использованием различных стилей, а также внедрять в текст рисунки и окна.

· Canvas — Холст. Может использоваться для вывода графических примитивов, таких как прямоугольники, эллипсы, линии, а также текст, изображения и окна.

· Button — Кнопка. Простая кнопка для выполнения команды и других действий.

· Radiobutton — Переключатель. Представляет одно из альтернативных значений некоторой переменной. Обычно действует в группе. Когда пользователь выбирает какую-либо опцию, с ранее выбранного в этой же группе элемента выбор снимается.

· Checkbutton — Флажок. Похож на Radiobutton, но имеет возможность множественного выбора, предоставляя отдельную переменную на каждый экземпляр виджета.

· Scale — Шкала с ползунком. Позволяет задать числовое значение путём перемещения движка.

· Listbox — Список. Показывает список, из которого пользователь может выделить один или несколько элементов.

· Scrollbar — Полоса прокрутки. Может использоваться вместе с некоторыми другими компонентами для их прокрутки.

· Menu — Меню. Служит для организации всплывающих (popup) и ниспадающих (pulldown) меню.

· Menubutton — Кнопка-меню. Используется для организации pulldown-меню.

· Message — Сообщение. Аналогично Label, но позволяет заворачивать длинные строки и легко меняет свой размер.

Был разработан следующий графический интерфейс (рисунок 4)

Рисунок 4 – Графический интерфейс

Тестирование

 

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

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

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

Тестирование оказывается довольно необычным процессом (поэтому и считается трудным), так как этот процесс разрушительный. Ведь цель проверяющего (тестовика) - заставить программу сбиться.

Отладку программы начинают с составления плана тестирования. Составление плана опирается на понятие об источниках и характере ошибок. Учитывая разнообразие источников ошибок, при составлении плана тестирования классифицируют ошибки на два типа: 1 - синтаксические; 2 - семантические (смысловые).

1. Синтаксические ошибки – это ошибки в записи конструкций языка программирования (чисел, переменных, функций, выражений, операторов, меток, подпрограмм).

2. Семантические ошибки – это ошибки, связанные с неправильным содержанием действий и использованием недопустимых значений величин.

Обнаружение большинства синтаксических ошибок автоматизировано в основных системах программирования. Поиск же семантических ошибок гораздо менее формализован; часть их проявляется при исполнении программы в нарушениях процесса автоматических вычислений и индицируется либо выдачей диагностических сообщений рабочей программы, либо отсутствием печати результатов из-за бесконечного повторения одной и той же части программы (зацикливания), либо появлением непредусмотренной формы или содержания печати результатов.

Отладка программы заканчивается, когда достаточное количество тестов выполнилось неуспешно, то есть программа на них выдала правильные результаты.

Утверждение о работоспособности программы осуществляется на основе следующих фактов:

1. независание фигуры при падении;

2. падение фигуры до дна ящика;

3. невыход фигуры за границы ящика;

4. сдвиг фигуры и поворот её на расстоянии от стенок;

5. неналожение фигуры при достижении лежащих на дне ящика других фигур;

6. изъятие слоя, не содержащего пустых ячеек (все ячейки заполнены квадратами фигур);

7. окончание игры при заполнении ящика или по команде игрока.

Надежное функционирование программы обеспечивается проверкой наложения при перемещении фигур и ограничением, накладываемым на набор входных данных (коды нажатых клавиш игнорируются, если эти клавиши не являются управляющими в игре).

 

Код тестирования представлен в Приложении 3.

ЗАКЛЮЧЕНИЕ

 

В результате выполнения курсовой работы были достигнуты следующие результаты:

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

· Были составлены диаграммы вариантов использования, активности и деятельности программы.

· Для написания программного кода и создания графического интерфейса была выбрана среда разработки PyCharm и библиотека Tkinter.

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

· Осуществлено тестирование, проверяющее правильное выполнение команд пользователя.

· Все задачи и цели выполнены, согласно требованиям технического задания.

 

СПИСОК ЛИТЕРАТУРЫ

1. Полупанов, Д. В. Программирование в Python 3 : учебное пособие / Д. В. Полупанов, С. Р. Абдюшева, А. М. Ефимов. — Уфа : БашГУ, 2020. — 164 с. — ISBN 978-5-7477-5230-6. — Текст : электронный

2. Косицин, Д. Ю. Язык программирования Python : учебно-методическое пособие / Д. Ю. Косицин. — Минск : БГУ, 2019. — 136 с. — ISBN 978-985-566-746-0. — Текст : электронный // Лань : электронно-библиотечная система. — URL: https://e.lanbook.com/book/180546

3. https://ru.wikipedia.org/wiki/Tkinter

4. Широбокова, С. Н. Программирование на языке Python для лабораторных занятий : учебное пособие / С. Н. Широбокова, А. А. Кацупеев, А. В. Сулыз. — Новочеркасск : ЮРГПУ, 2020. — 104 с. — ISBN 978-5-9997-0725-3

5. Тарланов, А. Т. Основы языка программирования Python : учебно-методическое пособие / А. Т. Тарланов, Ш. Г. Магомедов. — Москва : РТУ МИРЭА, 2019. — 107 с


ПРИЛОЖЕНИЕ 1

Спецификация

Обозначение Наименование Примечание
  Документация  
643.КНФУ.00001.01.81 Спецификация  
643.КНФУ.00001.01.90 Техническое задание  
643.КНФУ.00001.01.12 Текст программы  

 

ПРИЛОЖЕНИЕ 2

Техническое задание
«Игра-головоломка TETRIS »

Техническое задание

1.1. Введение

Данный проект представляет собой приложение игра-головоломка "Тетрис".

 

1.2. Назначение системы

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

 

1.3. Требования к программному проекту

1.3.1. Требования к функциональным характеристикам

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

1.3.2. Требования к надежности

Надежное функционирование программы обеспечивается проверкой наложения при перемещении фигур и ограничением, накладываемым на набор входных данных (коды нажатых клавиш игнорируются, если эти клавиши не являются управляющими в игре).

1.3.3. Требования к эксплуатаций

Эксплуатация программного обеспечения может выполняться без специальной подготовки пользователем, имеющим базовые навыки работы с компьютером в системе семейства MS Windows.

1.3.4. Требования к информационной и программной совместимости

Среда проектирования, используемая при разработке данного проекта – PyCharm 2021.  Работа продукта основана на стандартных библиотеках системы, и не требует установки дополнительных компонентов.

 

 

1.3.5. Требования к техническому обеспечению

Для нормального функционирования данного программного продукта необходимо наличие:

· оперативной памяти не менее 128 Мб

· процессора, с частотой не менее 600 МГц

· не менее 10 Мб свободного места на жестком диске

· клавиатуры

· мыши

· монитора

 

 

ПРИЛОЖЕНИЕ 3

Листинг программы (…/ main . py )

from tkinter import *
from tkinter import messagebox
from random import choice, randrange
from copy import deepcopy
import time

W, H = 10, 11
TILE = 45
GAME_RES = W * TILE, H * TILE
RES = 960, 540
FPS = 60


def on_closing():
if messagebox.askokcancel("Выход из приложения", "Хотите выйти из приложения?"):
   tk.destroy()


tk = Tk()
app_running = True
tk.protocol("WM_DELETE_WINDOW", on_closing)
tk.title("Курсовая работа ИСИП-33 Зорин_Д_И")
tk.resizable(0, 0)
tk.wm_attributes("-topmost", 1)

scr = Canvas(tk, height=RES[1], bg="black", highlightthickness=0)
scr.pack()

def g_record():
try:
   with open('record') as f:
       return f.readline()
except FileNotFoundError:
   with open('record', 'w') as f:
       f.write('0')
   return "0"

def s_record(record, score):
rec = max(int(record), score)
with open('record', 'w') as f:
   f.write(str(rec))

game_scr = Canvas(tk, height=H*TILE+1, bg="gray", highlightthickness=0)
game_scr.place(x=20, y=20, anchor=NW)

img_obj1 = PhotoImage(file="img/back_0.png")
scr.create_image(0, 0, anchor=NW, image=img_obj1)

grid = [game_scr.create_rectangle(x * TILE, y * TILE, x * TILE+TILE, y * TILE+TILE) for x in range(W) for y in range(H)]

figures_pos = [[(-1, 0), (-2, 0), (0, 0), (1, 0)],
          [(0, -1), (-1, -1), (-1, 0), (0, 0)],
          [(-1, 0), (-1, 1), (0, 0), (0, -1)],
          [(0, 0), (-1, 0), (0, 1), (-1, -1)],
          [(0, 0), (0, -1), (0, 1), (-1, -1)],
          [(0, 0), (0, -1), (0, 1), (1, -1)],
          [(0, 0), (0, -1), (0, 1), (-1, 0)]]

figures = [[[x + W // 2, y + 1, 1, 1] for x, y in fig_pos] for fig_pos in figures_pos]
field = [[0 for i in range(W)] for j in range(H)]

anim_count, anim_speed, anim_limit = 0, 50, 1000
score, lines = 0, 0
scores = {0: 0, 1: 100, 2: 300, 3: 700, 4: 1500}
record = "0"

scr.create_text(505, 10,text="TETRIS", font=("Times New Roman", 55),fill="red", anchor=NW)
scr.create_text(505, 320,text="очки:", font=("Times New Roman", 35),fill="white", anchor=NW)
_score = scr.create_text(505, 370,text=str(score), font=("Times New Roman", 35),fill="white", anchor=NW)
scr.create_text(505, 420,text="рекорд:", font=("Times New Roman", 35),fill="white", anchor=NW)
_record = scr.create_text(505, 470,text=record, font=("Times New Roman", 35),fill="gold", anchor=NW)

get_color = lambda : (randrange(30, 256), randrange(30, 256), randrange(30, 256))

figure, next_figure = deepcopy(choice(figures)), deepcopy(choice(figures))
color, next_color = get_color(), get_color()

def rgb_to_hex(rgb):
return '#%02x%02x%02x' % rgb

def check_borders():
if figure[i][0] < 0 or figure[i][0] > W - 1:
   return False
elif figure[i][1] > H - 1 or field[figure[i][1]][figure[i][0]]:
   return False
return True


def move_obj(event):
global rotate, anim_limit, dx
if event.keysym == 'space':
   rotate = True
elif event.keysym == 'Down':
   anim_limit = 80
elif event.keysym == 'Left':
   dx = -1
elif event.keysym == 'Right':
   dx = 1

game_scr.bind_all("<KeyPress-space>",move_obj)
game_scr.bind_all("<KeyPress-Down>",move_obj)
game_scr.bind_all("<KeyPress-Left>",move_obj)
game_scr.bind_all("<KeyPress-Right>",move_obj)

dx, rotate = 0, False
while app_running:
if app_running:
   record = g_record()
   # движение по х
   figure_old = deepcopy(figure)
   for i in range(4):
       figure[i][0] += dx
       if not check_borders():
           figure = deepcopy(figure_old)
           break
   # движение по y
   anim_count += anim_speed
   if anim_count > anim_limit:
       anim_count = 0
       figure_old = deepcopy(figure)
       for i in range(4):
           figure[i][1] += 1
           if not check_borders():
               for i in range(4):
                   field[figure_old[i][1]][figure_old[i][0]] = color
               figure, color = next_figure, next_color
               next_figure, next_color = deepcopy(choice(figures)), get_color()
               anim_limit = 2000
               break
   # контрольные линий
   center = figure[0]
   figure_old = deepcopy(figure)
   if rotate:
       for i in range(4):
           x = figure[i][1] - center[1]
           y = figure[i][0] - center[0]
           figure[i][0] = center[0] - x
           figure[i][1] = center[1] + y
           if not check_borders():
               figure = deepcopy(figure_old)
               break
   # check lines
   line, lines = H - 1, 0
   for row in range(H - 1, -1, -1):
       count = 0
         for i in range(W):
           if field[row][i]:
               count += 1
           field[line][i] = field[row][i]
       if count < W:
           line -= 1
       else:
           anim_speed += 3
           lines += 1
   # запись очков
   score += scores[lines]

   fig = []
   # создание фигуры
   for i in range(4):
       figure_rect_x = figure[i][0] * TILE
       figure_rect_y = figure[i][1] * TILE
       fig.append(game_scr.create_rectangle(figure_rect_x, figure_rect_y, figure_rect_x + TILE, figure_rect_y + TILE, fill=rgb_to_hex(color)))

   # создание игрового поля
   for y, raw in enumerate(field):
       for x, col in enumerate(raw):
           if col:
               figure_rect_x, figure_rect_y = x * TILE, y * TILE
               fig.append(game_scr.create_rectangle(figure_rect_x, figure_rect_y, figure_rect_x + TILE,
                                                   figure_rect_y + TILE, fill=rgb_to_hex(col)))

   fig2 = []
   # создание новой фигуры
   for i in range(4):
       figure_rect_x = next_figure[i][0] * TILE + 380
       figure_rect_y = next_figure[i][1] * TILE + 185
       fig2.append(scr.create_rectangle(figure_rect_x, figure_rect_y, figure_rect_x + TILE, figure_rect_y + TILE,
                           fill=rgb_to_hex(next_color)))
   # запись результатов
   scr.itemconfigure(_score, text=str(score))
   scr.itemconfigure(_record, text=record)

   # проигрыш
   for i in range(W):
       if field[0][i]:
           s_record(record, score)
           field = [[0 for i in range(W)] for i in range(H)]
           anim_count, anim_speed, anim_limit = 0, 60, 2000
           score = 0
           for item in grid:
               game_scr.itemconfigure(item, fill=rgb_to_hex(get_color()))
               time.sleep(0.005)
               tk.update_idletasks()
               tk.update()

           for item in grid:
               game_scr.itemconfigure(item, fill="")


   dx, rotate = 0, False
   tk.update_idletasks()
   tk.update()
   for id_fig in fig: game_scr.delete(id_fig)
   for id_fig in fig2: scr.delete(id_fig)
time.sleep(0.005)

tk.destroy()

 


Дата добавления: 2022-11-11; просмотров: 121; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!