Разработка программы аналога игры Pipe Dream

Заказать уникальную курсовую работу
Тип работы: Курсовая работа
Предмет: Программирование
  • 33 33 страницы
  • 6 + 6 источников
  • Добавлена 24.06.2023
1 000 руб.
  • Содержание
  • Часть работы
  • Список литературы
  • Вопросы/Ответы
Введение 2
1. Проектирование пользовательского интерфейса 3
1.1 Создание XAML разметки для окна 3
2. Реализация классов 6
2.1 Реализация класса Pipe 6
2.2 Реализация класса CellBox 7
3. Реализация логики игры 8
3.1 Генерация игрового поля 8
3.2 Генерация стартовой и конечной трубы 9
3.3 Генерация списка следующих труб 11
3.3 Обработка событий кликов 12
3.4 Создание таймера 13
3.5 Создание воды и привязка к таймеру 15
3.5.1 Угловая труба 0 градусов 17
3.5.2 Угловая труба 90 градусов 18
3.5.3 Угловая труба 180 градусов 19
3.5.4 Угловая труба 270 градусов 19
3.6 Проверка выигрыша и проигрыша 20
3.7 Рестарт игры, вывод сообщения о проигрыше и выигрыше 21
Заключение 23
Список литературы 24
Фрагмент для ознакомления

(См. Рис. 31, 32)Рисунок 31. Угловая труба под 270 градусовРисунок 32. Функция обработчикВ случае первого сценария наш курсор смещается на клетку вправо от текущей позиции. Но если мы рассматриваем тот случай, когда вода поступает справа, то курсор смещается вверх.3.6 Проверка выигрыша и проигрышаПока что мы реализовали движение воды таким образом, что в том случае, если условия поворота трубы не будут соблюдены, игра продолжится, хотя вода и продолжит течь.Чтобы этого избежать в каждом из условий, задающего алгоритм движения воды в зависимости от типа трубы добавим дополнительное условие. Которое будет срабатывать, если предыдущие индексы курсора и алгоритм движения воды не совпадают с типом или углом поворота трубы в следующей клетке, куда должна была двинуться вода.(См. Рис. 33)Рисунок 33. Добавляем возможность проигрышаАналогичное условие добавим и в функцию CheckWaterTube, если в следующей клетке нет установленной трубы.(См. Рис. 34)Рисунок 34. Обработка ситуаций проигрыша и выигрышаЗдесь же добавим проверку на то, совпадает ли индекс нашего курсора с индексами конечной трубы, и если совпадение есть, то игра считается пройденной.3.7 Рестарт игры, вывод сообщения о проигрыше и выигрышеДля того, чтобы привязать событие клика на кнопку к определенной функции, в данном случае функция рестарта игры, нам необходимо указать ее уникальное имя в файле XAML.(См. Рис. 35)Рисунок 35. Добавляем кнопку в XAMLИ при инициализации программы мы делегируем событие нажатия кнопки на функцию, которая будет перезапускать игру.(См. Рис. 36)Рисунок 36. Обработка клика на кнопкуКроме этого, чтобы уведомлять игрока о его победах и поражениях в нашем XAMLшаблоне создадим текстовое поле, значения которого будем изменять в зависимости от вызываемых функций Win() и Fail()(См. Рис. 37, 38) [6]Рисунок 37. Текстовое поле XAMLРисунок 38. Обработка ситуаций проигрыша и выигрыша4. ТестированиеЗапускаем нашу игру, чтобы проверить и тут же проигрываем.(См. Рис. 39)Рисунок 39. Тестирование проигрыша с неправильными трубамиПроверяем выход за пределы карты(См. Рис. 40)Рисунок 40. Проигрыш с выходом за картуИ наконец пробуем выиграть, но в ходе тестирования приходим к выводу, что вода двигается слишком быстро. Поэтому уменьшаем частоту тиков до тика раз в две секунды. Победа!(См. Рис. 41)Рисунок 41. Выигрыш5. Добавление уровней и генерация картыДалее немного перепишем код, чтобы наш результат был наиболее похож на оригинал. Для этого, создадим отдельную функцию, заполняющую весь наш массив ячеек случайными трубами под случайным углом, исключая только заранее сгенерированные клетки с начальной и конечной трубой. (См. Рис. 42)Рисунок 42. Функция генерации картыДалее, перезапишем клик по каждой ячейке на функцию, отвечающую за поворот ячейки на 90 градусов по часовой стрелке. (См. Рис. 43)Рисунок 43. Функция вращения ячейкиЗапустим наше приложение и проверим результат. Теперь у нас есть поле 10х10 заполненное случайными трубами, которые мы можем вращать по клику. (См. Рис. 44)Рисунок 44. Результат генерацииТеперь перейдем к реализации уровней. Для начала мы добавим в верстку нашего приложения поле с выводом нашего текущего уровня. (См. Рис. 45)Рисунок 45. XAMLразметка окна для вывода уровняРеализуем повышение сложности с каждым уровнем:В случае выигрыша, время ожидания до начала движения воды сокращается на 0,1 секунды и время каждого тика сокращается на 0,1 секунды.В случае проигрыша мы можем перепройти последний доступный уровень.Чтобы реализовать данный функционал немного модифицируем функцию Update(). (См. Рис. 46)Рисунок 46. Функция Update()Здесь мы запускаем таймер ожидания для прогрузки следующего уровня и обновляем параметры тиков и скорости течения воды, а также выводим время ожидания следующего уровня и номер уровня в приложение. (См. Рис. 47)Рисунок 47. Результат работы программыЗаключениеВ заключении к курсовой работе по проекту "Pipe Dream" можно отметить следующее:Были выполнены все поставленные задачи, такие как проектирование пользовательского интерфейса, создание классов Pipe и Cell, обработка событий кликов на трубы и ячейки, создание таймера и проверка наличия пути, а также тестирование приложения.Приложение успешно прошло тестирование на наличие ошибок и недостатков. Также было проведено тестирование производительности, и были произведены оптимизации кода для улучшения скорости и плавности работы приложения.Для улучшения проекта можно предложить добавить новые уровни сложности и возможность сохранения и загрузки прогресса игры. Также можно добавить визуальные эффекты для улучшения визуальной привлекательности игры.Список литературыРуководство по классическим приложениям (WPF .NET)URL: https://learn.microsoft.com/ru-ru/dotnet/desktop/wpf/overview/?view=netdesktop-6.0 (дата обращения 20.04.2023)WPF - обновить источник изображения после замены изображенияURL: https://stackru.com/questions/1057563/wpf-obnovit-istochnik-izobrazheniya-posle-zamenyi-izobrazheniya (дата обращения 20.04.2023)WPFTutorialURL: https://wpf-tutorial.com/ru/510/создание-игры-wpf-змейка/adding-food-for-the-snake/ (дата обращения 20.04.2023)Обзор XAML (WPF .NET) URL: https://learn.microsoft.com/ru-ru/dotnet/desktop/wpf/xaml/?view=netdesktop-7.0 (дата обращения 20.04.2023)Введение в язык XAML URL: https://metanit.com/sharp/wpf/2.php (дата обращения 20.04.2023)WPF C# Tutorial – Create a simple racing game in visual studio URL: https://www.mooict.com/wpf-c-tutorial-create-a-simple-racing-game-in-visual-studio/(датаобращения 20.04.2023)

1. Руководство по классическим приложениям (WPF .NET) URL: https://learn.microsoft.com/ru-ru/dotnet/desktop/wpf/overview/?view=netdesktop-6.0 (дата обращения 20.04.2023)
2. WPF - обновить источник изображения после замены изображения URL: https://stackru.com/questions/1057563/wpf-obnovit-istochnik-izobrazheniya-posle-zamenyi-izobrazheniya (дата обращения 20.04.2023)
3. WPF Tutorial URL: https://wpf-tutorial.com/ru/510/создание-игры-wpf-змейка/adding-food-for-the-snake/ (дата обращения 20.04.2023)
4. Обзор XAML (WPF .NET) URL: https://learn.microsoft.com/ru-ru/dotnet/desktop/wpf/xaml/?view=netdesktop-7.0 (дата обращения 20.04.2023)
5. Введение в язык XAML URL: https://metanit.com/sharp/wpf/2.php (дата обращения 20.04.2023)
6. WPF C# Tutorial – Create a simple racing game in visual studio URL: https://www.mooict.com/wpf-c-tutorial-create-a-simple-racing-game-in-visual-studio/ (дата обращения 20.04.2023)

Вопрос-ответ:

Какой язык программирования используется для разработки аналога игры Pipe Dream?

Для разработки аналога игры Pipe Dream используется язык программирования C# вместе с технологией .NET Framework.

Что такое XAML разметка и для чего она используется в данном проекте?

XAML (eXtensible Application Markup Language) - это язык разметки, используемый для создания пользовательского интерфейса в приложениях, написанных на платформе .NET. В данном проекте XAML используется для создания разметки окна игры.

Каким образом реализована логика игры в разрабатываемом аналоге игры Pipe Dream?

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

Как происходит генерация игрового поля в разрабатываемом аналоге игры Pipe Dream?

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

Каким образом реализуется обработка событий кликов в разрабатываемом аналоге игры Pipe Dream?

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

Какая игра разрабатывается в статье?

В статье разрабатывается аналог игры Pipe Dream 2.

Как задаются элементы пользовательского интерфейса в программе?

Элементы пользовательского интерфейса задаются с помощью XAML разметки для окна.

Какие классы реализуются в программе?

В программе реализуются классы Pipe и CellBox.

Какая логика игры реализована в программе?

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

Какие типы угловых труб реализованы в программе?

В программе реализованы угловые трубы под углом 0 градусов и угловые трубы под углом 90 градусов.

Какие основные этапы разработки были рассмотрены в статье?

В статье были рассмотрены этапы проектирования пользовательского интерфейса, реализации классов и разработки игровой логики.

Какие классы были реализованы при разработке программы аналога игры Pipe Dream?

Были реализованы классы Pipe и CellBox.