Составляем слова

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

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 09.03.2023
Размер файла 4,6 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Карагандинский технический университет

Кафедра: ИВС

КУРСОВАЯ РАБОТА

По дисциплине: "Методы и технологии программирования”

Тема: Составляем слова

Приняла:

доц. Томилова Н.И.

Выполнил:

Садырбаев А. Т.

Караганды 2021

СОДЕРЖАТЕЛЬНАЯ ПОСТАНОВКА ЗАДАЧИ

Задачей курсового проекта является разработка программы создания игры с человеком или компьютером “Составляем слова” - одной из большого количества словесных игр, предназначенной для большого количества людей (по большинству может быть предназначена для школьников и детей дошкольного возраста) вне зависимости от их специальности и прочих факторов с целью обучения звукобуквенному анализу, развития памяти, внимания, логического мышления, а также пополнения словарного запаса.

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

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

Курсовая работа выполнена в среде Python с использованием графического модуля Tkinter.

ВВЕДЕНИЕ

Наименование программы

Наименование разрабатываемой программы - «Составляем слова»

Назначение и область применения

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

2) «Составляем слова» или иначе - «Наборщик» - среди многих игр со словами одна из самых популярных как настольная, так и на ПК. В Интернете в открытом доступе есть множество вариаций «Наборщика», однако большинство из них труднодоступны для начинающих пользователей.

3) Благодаря модулю Tkinter в высокоуровневом языке программирования Python возникает возможность создания удобного графический интерфейса, который будет наиболее удобен и лёгок в понимании для всех пользователей.

ОСНОВАНИЯ ДЛЯ РАЗРАБОТКИ

Система разрабатывается на основании учебного плана кафедры 050704 ИВС в качестве курсового проекта по дисциплине «Структуры данных и процессы разработки программ».

НАЗНАЧЕНИЯ ДЛЯ РАЗРАБОТКИ

Программа предназначена для обучения звукобуквенному анализу, развития памяти, эрудиции, внимания, логического мышления, а также пополнения словарного запаса.

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

ТРЕБОВАНИЯ К ПРОГРАММЕ ПРОГРАММНОМУ ИЗДЕЛИЮ

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

Система должна обеспечивать возможность выполнения следующих функций:

· Функция составления различных слов

· Выбор права первого хода

· Функция вывода выигрыша в случае составления наибольшего количества слов

· Возможность игры с ЭВМ

· Введение слов по очерёдности

Исходные данные

*Случайно сгенерированное ЭВМ слово;

Результат

Результатом работы программы является наибольшее число составленных слов одним из двух пользователей или ЭВМ, что будет обозначать победу в игре.

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

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

Обеспечить целостность информации, хранящейся в базе данных.

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

· Система должна работать на IBM совместимых персональных компьютерах

· Минимальная конфигурация:

а) тип процессора Intel Pentium III и выше;

б) объем оперативного запоминающего устройства 128 Мб и выше.

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

Система должна работать под управлением семейства операционных систем Windows 32/64x - Windows 2000, XP, Vista, 7, 8, 8.1.

ТРЕБОВАНИЯ К ПРОГРАММНОЙ ДОКУМЕНТАЦИИ

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

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

В состав сопровождающей документации должны входить:

Пояснительная записка на 25-30 листах, содержащая описание разработки. пользовательский интерфейс операционный программный

Руководство пользователя.

ТЕХНИКО-ЭКОНОМИЧЕСКИЕ ПОКАЗАТЕЛИ

Ориентировочная экономическая эффективность не рассчитываются.

Предполагаемая годовая потребность не рассчитывается.

Экономические преимущества: бесплатное распространение. Существующие аналоги: https://www.logozavr.ru/514/, https://www.min2win.ru/gm.php?id=1873

СТАДИИ И ЭТАПЫ РАЗРАБОТКИ

Стадии разработки

Разработка должна быть проведена следующими стадиями:

- разработка технического задания;

- проектирование;

- реализация и отладка;

- внедрение.

Этапы разработки

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

На стадии проектирования должны быть выполнены перечисленные ниже этапы работ:

- Разработка спецификации программы;

- Составление проекта программы и плана отладки.

На стадии реализации и отладки должны быть выполнены перечисленные ниже этапы работ:

- Алгоритмизация. Выбор основных средств отладки;

- Программирование. Подготовка тестов;

- Отладка программы.

На стадии внедрения должен быть выполнен этап разработки подготовка и передача программы.

Сроки разработки

1) Разработка технического задания - 1 неделя;

2) Разработка спецификации программы - 1 неделя;

3) Составление проекта программы и плана отладки - 2 недели;

4) Алгоритмизация. Выбор основных средств отладки - 2 недели;

5) Программирование. Подготовка тестов - 3 недели;

6) Отладка программы - 5 недель.

ПОРЯДОК КОНТРОЛЯ И ПРИЕМКИ

Виды испытаний

- Испытание общей работоспособности на различных операционных системах и различном оборудовании;

- Испытания работоспособности набора и форматирования текста;

- Испытания работоспособности дополнительных функций программы (открытие, справка и т.д.).

Общие требования к приемке

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

- Программа должна иметь удобный, интуитивно-понятный пользовательский интерфейс;

ФУНКЦИОНАЛЬНАЯ ЧАСТЬ

Таблица Функции программы

Функция. Требования к составу выполняемой функции.

Входные данные

Выходные данные

1

Выбор игры с компьютером или другим игроком

Появление стартового окна выбора, содержащего 2 кнопки - «Компьютер» и «2 игрока»

Переход в окно выбора первого хода

2

Разыгрывание первого хода

Появление окна разыгрывания первого хода, содержащего 3 кнопки - «Случайный выбор», «Компьютер», «Игрок», «Игрок 1» и «Игрок 2»

Переход в окно игры

3

Вывод окна справки с объяснением работы программы и информации о разработчике

Появление окна справки по нажатию кнопки в меню

Отображение информации о предназначении программы

4

Подтверждение ответа

Введённое пользователем слово

Подтверждение ответа и его вывод в строку ведения игры

5

Проигрыш

Условие проигрыша игрока в случае отсутствия ответа

Подтверждение проигрыша ходившего игрока и выход в окно результатов

6

Проверка вводимого слова

Введённое пользователем слово

Допущение слова и его вывод в строку ведения игры в случае корректности введения; Вывод текста «Вы ввели неправильное слово» в случае некорректности введения

Тип пользовательского интерфейса

В приложение реализовано иерархическое меню.

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

Древовидная организация меню предполагает строго ограниченную навигацию: либо переходы «вверх» к корню дерева, либо - «вниз» по выбранной ветви. Каждому уровню иерархического меню соответствует свое определенное окно, содержащее пункты данного уровня. При этом возможны два варианта реализации меню: каждое окно меню занимает весь экран или на экране одновременно присутствуют несколько меню разных уровней. Во втором случае окна меню появляются при выборе пунктов соответствующего верхнего уровня -- «выпадающие» меню.

Диаграммы ПС

На рисунках продемонстрированы: диаграмма переходов состояний (рис. 1), диаграмма потоков данных (рис. 2.1. и 2.2.), SADT-модель (рис. 3.1. и 3.2.).

ЭКСПЛУТАЦИОННАЯ ЧАСТЬ

Требования к производительности

К разработке данного ПО предоставляются следующие требования к производительности;

- обеспечить максимальную скорость переходов между окнами;

- обеспечить максимальную скорость обработки текстовой информации

- обеспечить максимальную производительность программы при анализе текста;

- обеспечить минимальное использование оперативной памяти.

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

К разработке данного ПО предоставляются следующие требования к надежности:

- обеспечить безотказность работы программы;

- обеспечить целостность обрабатываемой информации.

Обработка ошибок

К разработке данного ПО предоставляются следующие требования к обработке ошибок:

- если пользователь введёт слово некорректным образом, то программа выдаст сообщение о неправильно введённом слове;

- если пользователь захочет сдаться, программа спросит его, точно ли он хочет сдаться или нет;

- если пользователь захочет выйти из программы, программа спросить его, точно ли он хочет выйти из нее или нет.

Интерфейсные требования

К разработке данного ПО предоставляются следующие интерфейсные требования:

- минимальность затрат ресурсов пользователя при вводе, модификации и просмотре данных;

- максимально простое взаимодействие программы и пользователя;

- минимальный объём оперативной памяти пользователя;

- максимально простая навигация меню;

- комфортная цветовая гамма.

Ограничения

К разработке данного ПО предоставляются следующие ограничения:

- программа должна быть написана на языке программирования Python;

- программа должна иметь модульную структуру.

ОБРАТНЫЕ ТРЕБОВАНИЯ

К разработке данного ПО предоставляются обратные требования:

- программа не должна работать с данными типа integer и др.;

- программа не должна проводить математические расчёты

Рис. 1 - Диаграмма переходов состояний

Рис. 2.1. - Диаграмма потоков данных

Рис. 2.2. - Дополненная диаграмма потоков управляющих данных

Рис. 3.1. - SADT модель: концептуальный уровень

I1 - Запуск программы

R1 - В

R2 - Вывод случайного слова

Рис. 3.2. - SADT модель: детальный уровень

МЕТОД РЕШЕНИЯ

АЛГОРИТМ РЕШЕНИЯ ОСНОВНОЙ ФУНКЦИОНАЛЬНОСТИ ПО (в виде блок-схемы)

Рис. 4. - Блок-схема алгоритма решения основной функциональности ПО

АЛГОРИТМ РЕШЕНИЯ ОСНОВНОЙ ФУНКЦИОНАЛЬНОСТИ ПО (словесный)

1. Начало: запуск программы

2. При открытии окна происходит выбор игрока

3. При переходе в следующее окно разыгрывается первый ход

4. При переходе в основное окно игры пользователем вводится слово

5. При нажатии на кнопку «Ввести слово» подтверждается введённое слово

6. Если слово введено корректно, то ход предоставляется другому игроку

7. Если слово введено некорректно, то система напишет «Вы ввели неправильное слово»

8. При нажатии на кнопку «Сдаться» происходит переход в окно результатов игры, где написано количество очков и проигравший игрок

9. В окне результатов игры при нажатии на кнопку «В главное меню» происходит переход в изначальное окно выбора игрока

ПРОЕКТ ПРОГРАММНОЙ СИСТЕМЫ

КОНЦЕПТУАЛЬНЫЙ АЛГОРИТМ РАБОТЫ ПС

Шаг 1. Определяем структуру управляющей программы:

Программа.

Инициализировать глобальные значения

Вывести окно игры и меню

Выполнять

Если выбрана Команда подтверждение введённого слова

то Выполнить Команду

иначе Обработать корректность введённого слова

Все-если

до Команда=Выход

Конец.

Шаг 2. Детализируем операцию Выполнить команду подтверждение введённого слова:

Выбор команда

Вывод введённого слова в поле игры

Если Да:

то Подтвердить вывод слова в поле игры

иначе Выдать ошибку «Вы ввели неправильное слово»

Все-если

Все выбор

Шаг 3: Объединение шагов 1, 2

Программа.

Инициализировать глобальные значения

Вывести окно игры и меню

Выполнять

Если выбрана Команда, то

Выбор команда

Вывод введённого слова в поле игры

Если Да:

то Подтвердить вывод слова в поле игры

иначе Выдать ошибку «Вы ввели неправильное слово»

Все-если

Все выбор

иначе Обработать корректность введённого слова

Все-если

до Команда=Выход

Конец.

Рис 5.1 Структурная схема ПО

СТРУКТУРНАЯ СХЕМА ПС

Рис. 5.2. Структурная карта Константайна

Рис. 5.3 Структурная карта Джексона

Полный список операций в структурной карте Джексона, которые должна выполнять программа:

1 - запуск программы

2 - подтверждение слова

3 - завершение игры кнопкой «Сдаться»

4 - вывод окон выбора игрока, первого хода и игры

5 - получить введённое пользователем слово в случае нажатой кнопки «Ввести слово»

6 - проверить корректность вводимого слова

7 - вывести введённое слово в строку данных об игре

8 - получить данные о ходе игры

9 - вывести окно результатов в случае нажатой кнопки «Сдаться»

Псевдокод структурной карты Джексона:

Игра последовательность

Запуск программы

Вывести окно игры и меню

Ввод слов

Вывести окно результатов игры

Конец игры

Обработка данных повторение Пока не получить наибольшее количество слов

Получить подтверждение введённого слова

Проверить корректность введённого слова

Обработка конца повторение Пока не вывести окно результатов игры

Ввод слов

Обработка данных конец

Обработка конца игры конец

Завершение программы

Игра конец

ПОЛЬЗОВАТЕЛЬСКИЙ ИНТЕРФЕЙС

Тип интерфейса

В приложении реализован иерархический интерфейс, который включает в себя: Справка с виджетами «Помощь», «О программе», игровое поле, окно выбора игрока, окно разыгрывания первого хода, кнопка «Ввести слово» и кнопка «Сдаться»

Макет интерфейса

На рисунке представлен макет пользовательского интерфейса:

Граф диалога

Описание интерфейса и команд меню

Структура главного окна

1 - Строка заголовка - содержит название программы/вариант задания

2 - Строка меню - главное меню программы

3 - Кнопка свернуть - сокращает размер окна до значка в панели задач. Чтобы восстановить окно, нужно щелкнуть по его значку в панели задач

4 - Кнопка развернуть - разворачивает окно на весь экран

5 - Кнопка закрыть - закрывает программу: окно исчезает, программа завершает свою работу и освобождает память компьютера

6 - Игровое поле

7 - Кнопка «Ввести слово» - служит для подтверждения введённого слова

8 - Кнопка «Сдаться» - служит для перехода в окно результатов

9 - Поле для ввода - служит для ввода слова пользователем

Структура меню

Меню "Справка"

1 - Пункт «Помощь» - служит для вызова правил игры

2 - Пункт «О программе» - содержит краткую информацию о программе

3 - Пункт «Вызвать справочное меню» - служит для вызова Справочного меню

Процесс изменения пользовательского интерфейса

Пользовательский интерфейс не меняется и остается в исходном состоянии.

КОНЦЕПТУАЛЬНАЯ АРХИТЕКТУРА ПО

ПО разрабатываемого курсового проекта состоит из 4 программных модулей и 1 файла справки.

Программные модули:

1. tkinter - модуль, предназначенный для графического интерфейса

2. random - модуль для вывода случайного слова из закодированного файла

3. os - модуль для открытия справочной системы

Cхема программных модулей:

Рис. 6.1 Схема программных модулей

Таблицы описания методов модулей:

Таблица 6.1.1. tkinter

Наименование подпрограммы

Описание подпрограммы

__init__

Функция инициализации переменных для их автоматического срабатывания при запуске класса

StartPage

Класс, который запускает стартовое окно выбора игрока

Computer

Класс, который запускает окно выбора первого хода при игре с компьютером

TwoPlayers

Класс, который запускает окно выбора первого хода при игре со вторым игроком

Play_TwoPlayers

Класс, который запускает окно игры при игре со вторым игроком

Play_Computer

Класс, который запускает окно игры при игре с компьютером

GameLost

Класс, который запускает окно результатов игры

SampleApp

Класс, который связывает все остальные классы и задаёт для них определённые параметры

Таблица 6.1.2. random

Наименование подпрограммы

Описание подпрограммы

create_word(label_word)

Функция создания случайного слова

random_move_TwoPlayers

Функция случайного выбора первого хода при игре со вторым игроком

random_move_Computer

Функция случайного выбора первого хода при игре с компьютером

Таблица 6.1.3. os

Наименование подпрограммы

Описание подпрограммы

startfile

Открытие справочной системы

ДИАГРАММА КЛАССОВ

Рис 6.2. Диаграмма классов

БЛОК-СХЕМЫ ОСНОВНЫХ РЕАЛИЗОВАННЫХ ФУНКЦИЙ ПС

Блок-схема функции вывода случайного слова

Рис. 6.3.1. Блок-схема функции create_word

Блок-схема функции вывода результатов

Рис. 6.3.2. Блок-схема функции first_launch

Блок-схема функции ввода слова пользователем

Рис. 6.3.3. Блок-схема функции word_entred

СТРУКТУРНОЕ ТЕСТИРОВАНИЕ

Игровая часть

Граф передачи управления игровой части

Маршрут

Переменные

Результат

1-2-3-5-6-1

new_word =/= word

new_word == used_words

Маршрут выполняется

1-2-3-4-7-9-1

new_word = word

button_surrender.clicked = False

Маршрут выполняется

1-2-3-4-7-8-10

new_word = word

button_surrender.clicked = True

Маршрут выполняется

1-2-3-5-1

new_word =/= word

Маршрут выполняется

ФУНКЦИОНАЛЬНОЕ ТЕСТИРОВАНИЕ

Эквивалентное разбиение

Ограничения на значения параметра

Правильные классы эквивалентности

Неправильные классы эквивалентности

ent_word, тип str

данные типа str

данные других типов

ТЕСТИРОВАНИЕ ПОЛЬЗОВАТЕЛЬСКОГО ИНТЕРФЕЙСА

Таблица 7.3. Результаты тестирования пользовательского интерфейса

№ п/п

Действие

Реакция системы

Результат

1

Щелкнуть по кнопке «Ввести слово»

Произойдет подтверждение введённого слова и его вывод в окно данных об игре

Верно

2

Щелкнуть по кнопке «Сдаться»

Произойдет переход в окно результатов

Верно

3

Ввести слово в поле для ввода

Произойдет написание слова в поле для ввода

Верно

4

Ввести слово, которое уже использовалось

Окно данных об игре выдаст сообщение “Данное слово уже было использовано. Попробуйте ввести друое”

Верно

5

Ввести неправильное слово

Окно данных об игре выдаст сообщение “Вы ввели неправильное слово” или “Игрок ввел неправильное слово”

Верно

6

Перейти в пункт «Вызов справочной системы» в меню «Справка»

Произойдет открытие окна справки о программе

Верно

7

Перейти в пункт «О программе» в меню «Справка»

Произойдет открытие окна с информацией о программе

Верно

8

Перейти в пункт «Помощь» в меню «Справка»

Произойдет открытие окна с информацией о разработчике

Верно

РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ

НАЗНАЧЕНИЕ ПРОГРАММЫ

Программа предназачена для осуществления словесной игры «Составляем слова» или «Наборщик». Программа позволяет играть в данную игру.

РАБОТА С ПРОГРАММОЙ

Рис.8.2.1. Окно выбора игрока

Запуск программы производится после двойного щелчка левой кнопкой мыши по иконке приложения. После запуска появится окно выбора игрока, представленное на рис. 8.1.

В зависимости от выбора игрока после этого произойдёт переход в окно разыгрывания первого хода. На рис. 8.2. показано окно разыгрывания первого хода при игре с компьютером

Рис. 8.2.2. Окно разыгрывания первого хода (Компьютер)

На рис. 8.2.3. показано окно разыгрывания первого хода при игре со вторым игроком

Рис. 8.2.3. Окно разыгрывания первого хода (2-й игрок)

Рис. 8.2.4. Окно игры

На рис. 8.2.5. показано окно результатов игры

Рис. 8.2.5. окно результатов игры

1) Запуск программы сопровождается открытием окна выбора игрока. В зависимости от выбора игрока происходит переход в окно разыгрывания первого хода. После выбора первого хода открывается главное окно игры

2) Ввод слова производится в поле для ввода, находящемся между количеством очков и кнопкой «Ввести слово», с помощью клавиатуры

3) Подтверждение слова и его вывод в окно данных об игре возникает при нажатии на кнопку «Ввести слово»

4) Если пользователь не способен придумать новое слово, то ему следует нажать на кнопку «Сдаться», после нажатия которой произойдёт переход в окно результатов

СООБЩЕНИЯ ПОЛЬЗОВАТЕЛЮ

В результате действий пользователя, могут появляться следующие сообщения об ошибках и сообщения о подтверждениях.

Таблица сообщения об ошибках

Вывод сообщения об ошибке

Причина и метод устранения ошибки

Причиной служит некорректно введённое слово. Для устранения ошибки следует ввести слово корректно с учётом условий и правил игры

Причиной служит ввод слова, которое уже вводилось. Для устранения ошибки следует ввести слово, не повторяющееся с предыдущими

Таблица сообщений подтверждения

Окно сообщения об подтверждении

Причина и результаты подтверждения

Окно запроса подтверждения о выходе в окно результатов.

Да - произойдет выход в окно результатов.

Нет - произойдет возврат в окно игры.

ЗАКЛЮЧЕНИЕ

Разработка данного курсового проекта привела к следующим результатам:

· Определены требования к программе;

· Разработано техническое задание и спецификация требования к программному средству;

· Разработан проект архитектуры программной системы;

· Разработан пользовательский интерфейс;

· Произведена разработка архитектуры программного обеспечения;

· Создано рабочее программное обеспечение;

· Программа имеет все функции, которые были определены в техническом задании;

· Программа имеет максимально простой в навигации и легкий в изучении пользовательский интерфейс;

· Программа имеет мощную справочную систему и всплывающие подсказки;

· Написано руководство пользователя к программному обеспечению;

· Было произведено тестирование и отладка программного обеспечения;

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

КАЛЕНДАРНЫЙ ПЛАН

Наименование этапов работы

Срок выполнения этапов работы

Примечание

1

Предпроектное обследование. Разработка ТЗ.

1 неделя (6%)

2

Разработка спецификации ПС

1 неделя (6%)

3

Разработка проекта программы. Разработка структуры интерфейса ПС.

2 недели (12%)

4

Разработка архитектуры ПС

2 недели (12%)

5

Реализация программного обеспечения

3 недели (18%)

6

Отладка и тестирование ПС.

4 недели (40%)

7

Оформление пояснительной записки и графического материала

1 неделя (6%)

Содержание пояснительной записки

Сроки выполнения

Примерный объем

1

Предпроектное обследование. Разработка ТЗ

1 неделя

6%

2

Разработка спецификации ПС

1 неделя

6%

3

Разработка проекта программы. Разработка структуры интерфейса ПС.

2 недели

12%

4

Алгоритмизация

2 недели

12%

5

Реализация программного обеспечения

3недели

18%

6

Отладка и тестирование ПС.

4 недели

40%

7

Оформление пояснительной записки и графического материала

1 неделя

6%

Содержание графической части

Сроки выполнения

Количество листов

Формат

1

Диаграмма переходов состояний

06.09-18.09

1

А4

2

Диаграмма потоков данных

19.09-25.09

1

А4

3

Граф диалога пользовательских интерфейсов

26.09-30.09

1

А4

4

Структурная схема ПС

01.10-07.10

1

А4

5

Блок-схема общей функциональности программы

08.10-18.10

1

А4

Литература:

1_ Томилова Н.И. Электронный учебник по дисциплине, 2021;

3_ Сысоев М.В. «Программирование для "нормальных" с нуля на языке Python»;

import tkinter as tk # python 3

from tkinter import Menu, Tk, font as tkfont # python 3

import random

import os

from tkinter.constants import BOTH, Y

score_Player_1 = 0

score_Player_2 = 0

score_Player = 0

score_Computer = 0

with open("words.txt", encoding='UTF-8') as f: # Вывел из функции так как понадобилась вне одной функции

input_list = f.read().splitlines() # создаем список с элементами через enter;

# компьтер ищет слова - начало

def charCount(word):

dict = {}

for i in word:

dict[i] = dict.get(i, 0) + 1

return dict

def possible_words(lwords, charSet):

global used_words

words = list()

for word in lwords:

flag = 1

chars = charCount(word)

for key in chars:

if key not in charSet:

flag = 0

break

else:

if charSet.count(key) < chars[key]:

flag = 0

break

if word == lwords:

flag = 0

for used_word in used_words:

if word == used_word:

flag = 0

break

if flag == 1:

words.append(word)

return words

# компьтер ищет слова - конец

# процесс содания рандомного слова компьютером - начало

def create_word(label_word):

random_word = random.choice(input_list)

charSet = list(random_word)

while len(charSet) < 9:

random_word = random.choice(input_list)

charSet = list(random_word)

label_word['text'] = 'Введенное слово: ' + random_word

# процесс содания рандомного слова компьютером - конец

def random_move_TwoPlayers():

random_num = random.randint(0, 1)

if random_num == 0:

main_text_TwoPlayers.insert(1.0, 'Первый ход делает Игрок1')

else:

main_text_TwoPlayers.insert(1.0, 'Первый ход делает Игрок2')

def random_move_Computer():

random_num = random.randint(0, 1)

if random_num == 0:

main_text_Computer.insert(1.0, 'Первый ход делает компьютер')

else:

main_text_Computer.insert(1.0, 'Первый ход делаете Вы')

def surrender_TwoPlayers():

global player, who_lost

who_lost = "Проиграл Игрок " + player

app.show_frame('GameLost')

def surrender_Computer_Player():

global who_lost

who_lost = "Проиграл Игрок"

app.show_frame('GameLost')

def surrender_Computer_Computer():

global who_lost

who_lost = "Проиграл Компьютер"

app.show_frame('GameLost')

class SampleApp(tk.Tk):

def __init__(self, *args, **kwargs):

tk.Tk.__init__(self, *args, **kwargs)

self.title('Игра "Наборщик"')

def help_menu():

os.startfile('help1.chm')

mainmenu = Menu()

self.config(menu=mainmenu)

helpmenu = Menu(mainmenu, tearoff=0)

helpmenu.add_command(label="Помощь")

helpmenu.add_command(label="О программе")

helpmenu.add_command(label="Вызвать справочную систему", command=help_menu)

mainmenu.add_cascade(label="Справка",menu=helpmenu)

self.title_font = tkfont.Font(family='Helvetica', size=14, weight="bold", slant="italic")

container = tk.Frame(self)

container.pack(side="top", fill="both", expand=True)

container.grid_rowconfigure(0, weight=1)

container.grid_columnconfigure(0, weight=1)

self.frames = {}

for F in (StartPage, Computer, TwoPlayers, Play_TwoPlayers, Play_Computer, GameLost):

page_name = F.__name__

frame = F(parent=container, controller=self)

self.frames[page_name] = frame

frame.grid(row=0, column=0, sticky="nsew")

self.show_frame("StartPage")

def show_frame(self, page_name):

'''Show a frame for the given page name'''

frame = self.frames[page_name]

frame.tkraise()

try:

frame.first_Launch()

except:

pass

class GameLost(tk.Frame):

def first_Launch(self):

global who_lost,score_Player_1,score_Player_2,score_Player,score_Computer

who_lost_lable['text'] = who_lost

if who_lost.strip('Проиграл Игрок') == "1" or who_lost.strip('Проиграл Игрок') == "2":

final_score['text'] = "Игрок1: " + str(score_Player_1) + " Игрок2: " + str(score_Player_2)

else:

final_score['text'] = "Игрок: " + str(score_Player) + " Компьютер: " + str(score_Computer)

main_text_TwoPlayers.configure(state='normal')

main_text_Computer.configure(state='normal')

main_text_TwoPlayers.delete("1.0",tk.END)

main_text_Computer.delete("1.0",tk.END)

score_Player_1 = 0

score_Player_2 = 0

label_score_TwoPlayers['text'] = "Игрок1: 0 Игрок2: 0"

score_Player = 0

score_Computer = 0

def __init__(self, parent, controller):

global who_lost_lable, final_score

tk.Frame.__init__(self, parent)

self.controller = controller

who_lost_lable = tk.Label(self, text='', font=controller.title_font)

who_lost_lable.pack(side="top", fill="x", pady=10)

final_score = tk.Label(self, text='',

font=("Helvetica", 14, tkfont.BOLD, tkfont.ITALIC))

final_score.pack(side="top", fill="x", pady=10)

return_Button = tk.Button(self, text="В главное меню",

command=lambda: controller.show_frame("StartPage"), activebackground='#a7ccdf', font=("Helvetica", 14, tkfont.BOLD, tkfont.ITALIC), height=2)

return_Button.pack()

class StartPage(tk.Frame):

def __init__(self, parent, controller):

tk.Frame.__init__(self, parent)

self.controller = controller

label = tk.Label(self, text="Выберите с кем будете играть:", font=("Helvetica", 14, tkfont.BOLD, tkfont.ITALIC))

label.pack(side="top", fill="x", pady=50)

button1 = tk.Button(self, text="Компьютер",

command=lambda: controller.show_frame("Computer"), activebackground='#a7ccdf', font=("Helvetica", 14, tkfont.BOLD, tkfont.ITALIC), height=2, width=20)

button2 = tk.Button(self, text="Два игрока",

command=lambda: controller.show_frame("TwoPlayers"), activebackground='#a7ccdf', font=("Helvetica", 14, tkfont.BOLD, tkfont.ITALIC), height=2, width=20)

button1.pack()

button2.pack()

class Computer(tk.Frame):

def __init__(self, parent, controller):

tk.Frame.__init__(self, parent)

self.controller = controller

label = tk.Label(self, text="Выберите кто будет ходить первым:", font=("Helvetica", 14, tkfont.BOLD, tkfont.ITALIC))

label.pack(side="top", fill="x", pady=10)

button_1 = tk.Button(self, text="Случайный выбор",

command=lambda: [random_move_Computer(), controller.show_frame("Play_Computer")], activebackground='#a7ccdf', font=("Helvetica", 14, tkfont.BOLD, tkfont.ITALIC), height=2, width=20)

button_1.pack()

button_2 = tk.Button(self, text="Компьютер",

command=lambda: [main_text_Computer.insert(1.0, 'Первый ход делает компьютер'),

controller.show_frame("Play_Computer")], activebackground='#a7ccdf', font=("Helvetica", 14, tkfont.BOLD, tkfont.ITALIC), height=2, width=20)

button_2.pack()

button_3 = tk.Button(self, text="Я",

command=lambda: [main_text_Computer.insert(1.0, 'Первый ход делаете Вы'),

controller.show_frame("Play_Computer")], activebackground='#a7ccdf', font=("Helvetica", 14, tkfont.BOLD, tkfont.ITALIC), height=2, width=20)

button_3.pack()

class TwoPlayers(tk.Frame):

def __init__(self, parent, controller):

tk.Frame.__init__(self, parent)

self.controller = controller

label = tk.Label(self, text="Выберите кто будет ходить первым", font=("Helvetica", 14, tkfont.BOLD, tkfont.ITALIC))

label.pack(side="top", fill="x", pady=10)

button_1 = tk.Button(self, text="Случайный выбор",

command=lambda: [random_move_TwoPlayers(), controller.show_frame("Play_TwoPlayers")], activebackground='#a7ccdf', font=("Helvetica", 14, tkfont.BOLD, tkfont.ITALIC), height=2, width=20)

button_1.pack()

button_2 = tk.Button(self, text="Игрок 1",

command=lambda: [main_text_TwoPlayers.insert(1.0, 'Первый ход делает Игрок 1'),

controller.show_frame("Play_TwoPlayers")], activebackground='#a7ccdf', font=("Helvetica", 14, tkfont.BOLD, tkfont.ITALIC), height=2, width=20)

button_2.pack()

button_3 = tk.Button(self, text="Игрок 2",

command=lambda: [main_text_TwoPlayers.insert(1.0, 'Первый ход делает Игрок 2'),

controller.show_frame("Play_TwoPlayers")], activebackground='#a7ccdf', font=("Helvetica", 14, tkfont.BOLD, tkfont.ITALIC), height=2, width=20)

button_3.pack()

class Play_TwoPlayers(tk.Frame):

def word_entred(self):

global used_words, player, score_Player_1, score_Player_2

main_text_TwoPlayers.configure(state='normal')

ent_word = label_word_TwoPlayers.cget("text").strip('Введенное слово: ')

new_word = entry_new_word_TwoPlayers.get()

words = possible_words(input_list, ent_word)

for word in words:

if new_word == word:

main_text_TwoPlayers.insert(tk.END, "\nИгрок" + player + " ввел слово: " + new_word + "\n")

used_words.append(new_word)

if player == "1":

score_Player_1 += 1

player = "2"

else:

score_Player_2 += 1

player = "1"

label_score_TwoPlayers['text'] = "Игрок1 :" + str(score_Player_1) + " Игрок2: " + str(

score_Player_2)

main_text_TwoPlayers.insert(tk.END, "\nХодит Игрок" + player)

main_text_TwoPlayers.see(tk.END)

main_text_TwoPlayers.configure(state='disabled')

break

for i in range(len(used_words)):

if new_word == used_words[i]:

main_text_TwoPlayers.insert(tk.END, "\nДанное слово уже было использовано. Попробуйте ввести другое")

main_text_TwoPlayers.see(tk.END)

main_text_TwoPlayers.configure(state='disabled')

break

else:

main_text_TwoPlayers.insert(tk.END, "\nИгрок" + player + " ввел неправильное слово")

main_text_TwoPlayers.see(tk.END)

main_text_TwoPlayers.configure(state='disabled')

def first_Launch(self):

global player, used_words

main_text_TwoPlayers.configure(state='disabled')

create_word(label_word_TwoPlayers)

used_words = list()

player = '1'

def __init__(self, parent, controller):

global label_word_TwoPlayers, main_text_TwoPlayers, entry_new_word_TwoPlayers, new_word, label_score_TwoPlayers

tk.Frame.__init__(self, parent)

self.controller = controller

label_word_TwoPlayers = tk.Label(self, font=controller.title_font)

label_word_TwoPlayers.pack(side="top", fill="x", pady=10)

main_text_TwoPlayers = tk.Text(self, font=controller.title_font, height=10)

main_text_TwoPlayers.pack(side="top", fill="x")

main_text_TwoPlayers.pack_propagate(0)

main_text_TwoPlayers_scrollbar = tk.Scrollbar(main_text_TwoPlayers, orient=tk.VERTICAL,

command=main_text_TwoPlayers.yview)

main_text_TwoPlayers.config(yscrollcommand=main_text_TwoPlayers_scrollbar.set)

main_text_TwoPlayers_scrollbar.pack(side="right", fill="y", pady=10)

label_score_TwoPlayers = tk.Label(self, font=controller.title_font, text='Игрок1: 0 Игрок2: 0')

label_score_TwoPlayers.pack(side="top", fill="x", pady=10)

entry_new_word_TwoPlayers = tk.Entry(self, font=controller.title_font)

entry_new_word_TwoPlayers.pack(side="top", fill="x", pady=10)

button_new_word_TwoPlayers = tk.Button(self, font=controller.title_font, text='Ввести слово',

command=self.word_entred)

button_new_word_TwoPlayers.pack(side="top", fill="x")

button_surrender_TwoPlayers = tk.Button(self, font=controller.title_font, text='Сдаться',

command=surrender_TwoPlayers)

button_surrender_TwoPlayers.pack(side="top", fill="x")

class Play_Computer(tk.Frame):

def get_word_Computer(self):

global used_words, score_Computer

ent_word = label_word_Computer.cget("text").strip('Введенное слово: ')

get_words = list()

get_words = possible_words(input_list, ent_word)

if get_words == list():

surrender_Computer_Computer()

new_word = random.choice(get_words)

used_words.append(new_word)

main_text_Computer.configure(state='normal')

main_text_Computer.insert(tk.END, "\nКомпьютер ввел слово: " + new_word + "\n")

main_text_Computer.insert(tk.END, "\nХод переходит Игроку")

main_text_Computer.see(tk.END)

main_text_Computer.configure(state='disabled')

score_Computer += 1

label_score_Computer['text'] = "Игрок: " + str(score_Player) + " Компьютер: " + str(score_Computer)

def word_entred(self):

global used_words, score_Player

main_text_Computer.configure(state='normal')

ent_word = label_word_Computer.cget("text").strip('Введенное слово: ')

new_word = entry_new_word_Computer.get()

words = possible_words(input_list, ent_word)

for word in words:

if new_word == word:

main_text_Computer.insert(tk.END, "\nВы ввели слово: " + new_word + "\n")

used_words.append(new_word)

score_Player += 1

label_score_Computer['text'] = "Игрок: " + str(score_Player) + " Компьютер: " + str(

score_Computer)

main_text_Computer.insert(tk.END, "\nХод переходит компьютеру")

main_text_Computer.see(tk.END)

main_text_Computer.configure(state='disabled')

self.get_word_Computer()

break

for i in range(len(used_words)):

if new_word == used_words[i]:

main_text_Computer.insert(tk.END, "\nДанное слово уже было использовано. Попробуйте ввести другое")

main_text_Computer.see(tk.END)

main_text_Computer.configure(state='disabled')

break

else:

main_text_Computer.insert(tk.END, "\nВы ввели неправильное слово")

main_text_Computer.see(tk.END)

main_text_Computer.configure(state='disabled')

def first_Launch(self):

global used_words

create_word(label_word_Computer)

used_words = list()

main_text_Computer.configure(state='disabled')

if main_text_Computer.get("1.0", 'end-1c') == "Первый ход делает компьютер":

self.get_word_Computer()

def __init__(self, parent, controller):

global label_word_Computer, main_text_Computer, used_words, entry_new_word_Computer, label_score_Computer

tk.Frame.__init__(self, parent)

self.controller = controller

label_word_Computer = tk.Label(self, font=controller.title_font)

label_word_Computer.pack(side="top", fill="x", pady=10)

main_text_Computer = tk.Text(self, font=controller.title_font, height=10)

main_text_Computer.pack(side="top", fill="x", pady=10)

main_text_Computer.pack_propagate(0)

main_text_Computer_scrollbar = tk.Scrollbar(main_text_Computer,orient=tk.VERTICAL, command=main_text_Computer.yview)

main_text_Computer.config(yscrollcommand=main_text_Computer_scrollbar.set)

main_text_Computer_scrollbar.pack(side="right", fill="y", pady=10)

label_score_Computer = tk.Label(self, font=controller.title_font, text="Игрок: 0 Компьютер: 0")

label_score_Computer.pack(side="top", fill="x", pady=10)

entry_new_word_Computer = tk.Entry(self, font=controller.title_font)

entry_new_word_Computer.pack(side="top", fill="x", pady=10)

button_new_word_Computer = tk.Button(self, font=controller.title_font, text='Ввести слово',

command=self.word_entred)

button_new_word_Computer.pack(side="top", fill="x")

button_surrender_Computer = tk.Button(self, font=controller.title_font, text='Сдаться',

command=surrender_Computer_Player)

button_surrender_Computer.pack(side="top", fill="x")

if __name__ == '__main__':

app = SampleApp()

app.mainloop()

Размещено на Allbest.ru

...

Подобные документы

  • Требования к функциональным характеристикам, составу и параметрам технических средств, информационной и программной совместимости. Описание программы: общие сведения, логическая структура. Средства и порядок испытаний. Входные и выходные данные.

    курсовая работа [6,3 M], добавлен 12.01.2015

  • Технико-экономические показатели деятельности организации. Требования к информационной и программной совместимости. Описание нормативно-справочной информации. Требования к функциональным характеристикам. Руководство пользователя и программиста.

    отчет по практике [43,4 K], добавлен 23.02.2011

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

    курсовая работа [496,0 K], добавлен 03.12.2010

  • Требования к функциональным характеристикам программы, составу и параметрам технических средств, программной совместимости. Особенности программирования в среде Access. Описание интерфейса программы, ввод и редактирование данных, добавление новых книг.

    курсовая работа [1,5 M], добавлен 17.11.2010

  • Выявление классов-сущностей (диаграмма классов) и вариантов использований системы. Моделирование видов деятельности, взаимодействий, состояний, пользовательского интерфейса и архитектуры системы (диаграмм развертывания) на основе выявленных требований.

    дипломная работа [2,1 M], добавлен 24.01.2016

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

    курсовая работа [381,6 K], добавлен 13.08.2013

  • Разработка игровой программы "разгадывания кроссворда". Создание схемы хранения данных, изучение возможности среды программирования. Требования к функциональным характеристикам, составу и параметрам технических средств, информационной совместимости.

    курсовая работа [403,9 K], добавлен 26.03.2015

  • Меню программы и темы интерфейса WinRar. Добавление файлов и папок в архив. Извлечение архива в указанную папку. Добавление архивного комментария. Требования к функциональным характеристикам, к транспортированию и хранению, к программной документации.

    курсовая работа [3,7 M], добавлен 21.04.2014

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

    курсовая работа [678,1 K], добавлен 15.02.2016

  • Этапы решения задачи классификации цифр арабского алфавита на основе нейронных сетей: выбор класса, структуры и пакета нейронной сети, ее обучение, требования к информационной и программной совместимости, составу и параметрам технических средств.

    реферат [111,6 K], добавлен 19.10.2010

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

    курсовая работа [598,2 K], добавлен 17.05.2011

  • Эффективность и оптимизация программ. Разработка программных продуктов. Обеспечение качества программного продукта. Назначение, область применения, требование к программному продукту. Требования к функциональным характеристикам, надежности, совместимости.

    курсовая работа [46,8 K], добавлен 05.04.2009

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

    курсовая работа [3,5 M], добавлен 14.05.2015

  • Разработка инфологической модели базы данных "Рабочее место кассира", требования к ее функциональным характеристикам. Создание программы в Delphi. Описание компонентов для реализации графического интерфейса и интерфейса ввода справочника кассиров.

    курсовая работа [2,2 M], добавлен 17.04.2014

  • Разработка системы управления базой данных "Структура ВУЗа". Требования к программе: функциональным характеристикам, надежности, эксплуатации, составу и параметрам технических средств. Требования к программной документации. Порядок контроля и приемки.

    курсовая работа [982,7 K], добавлен 08.06.2015

  • Разработка программы для работы в операционных системах семейства Windows. Использование среды Delphi - современной технологии визуального проектирования. Создание пользовательского интерфейса, оконного приложения, меню; задание исходной матрицы.

    курсовая работа [1,5 M], добавлен 12.01.2011

  • Среда проектирования программного обеспечения Rational Rose. Унифицированный язык моделирования UML. Требования к функциональности, к безопасности, интерфейсу, настраиваемости, информационной и программной совместимости, программная документация.

    курсовая работа [582,0 K], добавлен 20.07.2011

  • Анализ аналогов и выбор прототипа, разработка алгоритма и графического интерфейса, кодирование и тестирование. Логическая модель данных "Нотариальная контора". Особенности реализации в MS SQL. Требования к функциональным характеристикам базы данных.

    курсовая работа [1,3 M], добавлен 12.01.2013

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

    курсовая работа [581,0 K], добавлен 13.11.2009

  • Системные требования – совокупность характеристик компьютерного обеспечения, необходимых для функционирования программного продукта. Операционные системы семейства Microsoft Windows и UNIX-подобные ОС, проблема совместимости с аппаратными компонентами.

    контрольная работа [2,5 M], добавлен 22.04.2011

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.