Технологии, методы, структуры, принципы положенные в основу алгоритма




Содержание

 

Обозначения и сокращения

Введение

1. Постановка задачи

2. Технологии, методы, структуры, принципы положенные в основу алгоритма

3. Разработка структуры программы

3.1 Структура программы

3.2 Схема алгоритма № 1

3.3 Схема алгоритма № 2

3.5 Состав проекта

4. Разработка программы

4.1 Разработка метода private void MainForm_Load ()

4.2 Разработка метода private void RichTextBox_KeyPress ()

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

Заключение

Список использованных источников

Приложение A

 


Обозначения и сокращения

 

Проект 1 - В Visual Studio 2013 проектом называется совокупность файлов, создаваемых в процессе разработки программы.

MMORPG 2 - жанр онлайновых компьютерных ролевых игр, в которых большое количество игроков взаимодействуют друг с другом, в виртуальном мире <https://ru.wikipedia.org/wiki/%D0%92%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B8%D1%80>.

ПО 3 - программное обеспечение.

ООП 4 - объектно-ориентированное программирование.

 


Введение

 

KeyBoard Racer - компьютерная игра, которая позволяет быстрее и точнее научиться набирать тексты, используя соревновательный режим. Можно считать, что это пример "соло на клавиатуре" только используя сетевые возможности. Вы можете играть как один, так и вместе со своим другом, по сети.

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

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

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

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

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

В курсовом проекте требовалось разработать игру "Keyboard Racer". Курсовой проект (получивший рабочее название Keyboard Racer) выполнен в Visual Studio 2013.


Постановка задачи

 

Целью данной курсовой работы является разработка программы-игры "Keyboard Racer". В игре должны быть реализованы следующие моменты:

а) Играть можно вдвоем (по сети).

б) Реализация набора текста на скорость

в) Визуализация набора текста гоночной игрой

г) Возможность посмотреть игровую статистику

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

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

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

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

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


Технологии, методы, структуры, принципы положенные в основу алгоритма

 

Схема работа программы:

 

Рисунок 2.1 - Схема работы программы

Studio 2013 позволяет программисту разрабатывать программы, которые могут выводить графику: схемы, чертежи, иллюстрации.

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

Перечень основных методов, которые потребуются при разработке программного игрового приложения "Keyboard Racer":Graphics. DrawImage (Image image, int x, int y)

Метод DrawImage

Синтаксис:

Объект. DrawImage (Image image, int x, int y);

Где:

Объект - имя объекта (компонента), на поверхности которого выполняется вычерчивание, x, y - координаты x и y положения рисунка, image - картинка, которая будет прорисована.

Метод DrawImage рисует изображение, содержащееся в объекте, указанном параметром Image, сохраняя исходный размер изображеня в его источнике и перенося изображение в область объекта Graphics, верхний левый угол которой определяется параметрами x и y. Источник изображения может быть битовой матрицей, пиктограммой или метафайлом.TextBoxBase. Select (int start, int length)

Метод Select

Синтаксис:

Объект. Select (int start, int length)

Где:

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

Объект - имя объекта (компонента), на поверхности которого выполняется выделение, start - начальная позиция, length - количество символов которые требуется выделить.

Метод Select выделяет область текста в текст боксе задавая ее входными параметрами, начальная позиция области определяется параметром start, количество необходимых выделенных символов определяется параметром length, который указывает сколько символов нам нужно выделить начиная с позиции start.

При разработке программы основным компонентом является Timer, который вызывает событие через определенные интервалы времени. Этот компонент предназначен для среды Windows Forms, в которой и разрабатывалось данное приложение.

Длина интервалов определяется свойством Interval, значение которого исчисляется в миллисекундах. Когда компонент включен, событие Tick вызывается через каждый интервал. В этом месте следует добавить выполняемый код. Ключевыми методами компонента Timer являются Start и Stop, которые включают и выключают таймер. При выключении таймера его параметры сбрасываются; приостановить компонент Timer нельзя.

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

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

Класс Socket обеспечивает широкий набор методов и свойств для сетевых взаимодействий. Класс Socket позволяет выполнять как синхронную, так и асинхронную передачу данных с использованием любого из коммуникационных протоколов, имеющихся в перечислении ProtocolType <https://msdn.microsoft.com/ru-ru/library/system.net.sockets.protocoltype>.

Класс Socket придерживается шаблона имен платформы.net Framework для асинхронных методов. Например, синхронный метод Receive <https://msdn.microsoft.com/ru-ru/library/system.net.sockets.socket.receive> соответствует асинхронным методам BeginReceive <https://msdn.microsoft.com/ru-ru/library/system.net.sockets.socket.beginreceive> и EndReceive <https://msdn.microsoft.com/ru-ru/library/system.net.sockets.socket.endreceive>.

Если используется протокол, ориентированный на установление соединения, такой как протокол TCP, сервер должен выполнять прослушивание подключений, используя метод Listen <https://msdn.microsoft.com/ru-ru/library/system.net.sockets.socket.listen>. Метод Accept <https://msdn.microsoft.com/ru-ru/library/system.net.sockets.socket.accept> обрабатывает любые входящие запросы на подключение и возвращает объект Socket, который может использоваться для передачи данных с удаленного узла. Используйте этот возвращенный объект Socket для вызова метода Send <https://msdn.microsoft.com/ru-ru/library/system.net.sockets.socket.send> или Receive <https://msdn.microsoft.com/ru-ru/library/system.net.sockets.socket.receive>. Вызовите метод Bind <https://msdn.microsoft.com/ru-ru/library/system.net.sockets.socket.bind>, прежде чем производить обращение к методу Listen <https://msdn.microsoft.com/ru-ru/library/system.net.sockets.socket.listen>, если необходимо указать локальный IP-адрес или номер порта. Используйте нулевое значение для номера порта, если требуется, чтобы свободный порт был назначен основным поставщиком услуг. Если требуется произвести подключение к прослушивающему узлу, вызовите метод Connect <https://msdn.microsoft.com/ru-ru/library/system.net.sockets.socket.connect>. Для обмена данными вызовите метод Send <https://msdn.microsoft.com/ru-ru/library/system.net.sockets.socket.send> или Receive <https://msdn.microsoft.com/ru-ru/library/system.net.sockets.socket.receive>.

Если используется протокол, не ориентированный на установление соединения, такой как протокол UDP, нет необходимости в отслеживании подключений. Для приема всех поступающих датаграмм вызовите метод ReceiveFrom <https://msdn.microsoft.com/ru-ru/library/system.net.sockets.socket.receivefrom>. Для посылки датаграмм на удаленный узел воспользуйтесь методом SendTo <https://msdn.microsoft.com/ru-ru/library/system.net.sockets.socket.sendto>.

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

Если применяется протокол, ориентированный на установление соединения, такой как протокол TCP, используйте методы Socket, BeginConnect <https://msdn.microsoft.com/ru-ru/library/system.net.sockets.socket.beginconnect> и EndConnect <https://msdn.microsoft.com/ru-ru/library/system.net.sockets.socket.endconnect> для подключения к прослушивающему узлу. Для асинхронного обмена данными воспользуйтесь методами BeginSend <https://msdn.microsoft.com/ru-ru/library/system.net.sockets.socket.beginsend> и EndSend <https://msdn.microsoft.com/ru-ru/library/system.net.sockets.socket.endsend> или методами BeginReceive <https://msdn.microsoft.com/ru-ru/library/system.net.sockets.socket.beginreceive> и EndReceive <https://msdn.microsoft.com/ru-ru/library/system.net.sockets.socket.endreceive>. Входящие запросы на подключение могут быть обработаны с помощью методов BeginAccept <https://msdn.microsoft.com/ru-ru/library/system.net.sockets.socket.beginaccept> и EndAccept <https://msdn.microsoft.com/ru-ru/library/system.net.sockets.socket.endaccept>.

Если используется протокол без установления соединения, такой как протокол UDP, можно воспользоваться для посылки датаграмм методами BeginSendTo <https://msdn.microsoft.com/ru-ru/library/system.net.sockets.socket.beginsendto> и EndSendTo <https://msdn.microsoft.com/ru-ru/library/system.net.sockets.socket.endsendto>, а для получения датаграмм можно применить методы BeginReceiveFrom <https://msdn.microsoft.com/ru-ru/library/system.net.sockets.socket.beginreceivefrom> иEndReceiveFrom <https://msdn.microsoft.com/ru-ru/library/system.net.sockets.socket.endreceivefrom>.

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

Когда прием и отправка данных завершены, используйте метод Shutdown <https://msdn.microsoft.com/ru-ru/library/system.net.sockets.socket.shutdown> для того, чтобы отключить объект Socket. После вызова метода Shutdown <https://msdn.microsoft.com/ru-ru/library/system.net.sockets.socket.shutdown> обратитесь к методу Close <https://msdn.microsoft.com/ru-ru/library/system.net.sockets.socket.close>, чтобы освободить все связанные с объектом Socket ресурсы.

Класс Socket позволяет выполнить настройку объекта Socket с использованием метода SetSocketOption <https://msdn.microsoft.com/ru-ru/library/system.net.sockets.socket.setsocketoption>. Извлеките эти параметры, используя метод GetSocketOption <https://msdn.microsoft.com/ru-ru/library/system.net.sockets.socket.getsocketoption>.

Программное приложение "Keyboard Racer" является многопоточным.

Потоки позволяют программе Visual Basic или C# выполнять параллельную обработку, за счет чего появляется возможность одновременного выполнения нескольких операций. Например, потоки можно использовать для наблюдения ввода данных пользователем, выполнения фоновых задач и обработки одновременных потоков ввода.

Потоки имеют следующие свойства.

Потоки позволяют программе выполнять параллельную обработку.

Пространство имен.net Framework System. Threading <https://msdn.microsoft.com/ru-ru/library/system.threading.aspx> упрощает использование потоков.

Потоки используют одни и те же ресурсы приложения.

По умолчанию программа на языке Visual Basic или C# имеет один поток. Однако параллельно основному потоку могут создаваться и использоваться вспомогательные потоки. Эти потоки часто называются рабочими потоками.

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

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

Обычно рабочие потоки используются для выполнения трудоемких или срочных задач, для которых не требуется большое количество ресурсов, используемых другими потоками. Естественно, некоторые используемые программой ресурсы должны быть доступны для нескольких потоков. В этих случаях пространство имен System. Threading <https://msdn.microsoft.com/ru-ru/library/system.threading.aspx> предоставляет классы для синхронизации потоков. Эти классы включают Mutex <https://msdn.microsoft.com/ru-ru/library/system.threading.mutex.aspx>, Monitor <https://msdn.microsoft.com/ru-ru/library/system.threading.monitor.aspx>, Interlocked <https://msdn.microsoft.com/ru-ru/library/system.threading.interlocked.aspx>, AutoResetEvent <https://msdn.microsoft.com/ru-ru/library/system.threading.autoresetevent.aspx> и ManualResetEvent <https://msdn.microsoft.com/ru-ru/library/system.threading.manualresetevent.aspx>.

Можно использовать некоторые или все эти классы для синхронизации работы нескольких потоков, но некоторые многопоточные функции поддерживаются языками Visual Basic и C#. Например, инструкция Оператор SyncLock <https://msdn.microsoft.com/ru-ru/library/3a86s51t.aspx> в Visual Basic и инструкция Lock <https://msdn.microsoft.com/ru-ru/library/c5kehkcz.aspx> в C# обеспечивают возможности синхронизации за счет неявного использования класса Monitor <https://msdn.microsoft.com/ru-ru/library/system.threading.monitor.aspx>.

Программное приложение "Keyboard Racer" написано на объектно-ориентированном языке C# и соответствует принципам концепции ООП:

Концепция ООП возникла в середине 80-х годов. Главная ее идея в том, что программное приложение, как и окружающий нас мир, должно состоять из объектов, обладающих собственными свойствами и поведением. ООП объединяет исполняемый код программы и ее данные в объекты, что упрощает создание сложных программных приложений. Например, можно организовать коллективную работу над проектом, где каждый участник создает собственный класс объектов, который становится доступным другим участникам проекта.

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

Чтобы проект можно было считать объектно-ориентированным, объекты должны удовлетворять некоторым требованиям. Этими требованиями являются инкапсуляция, наследование и полиморфизм.

Инкапсуляция - означает, что объекты скрывают детали своей работы. Инкапсуляция позволяет разработчику объекта изменять внутренние принципы его функционирования, не оказывая никакого влияния на пользователя объекта. В VB этот принцип реализуется, в основном, за счет применения описаний Private и Public.

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

Полиморфизм - многие объекты могут иметь одноименные методы, которые могут выполнять разные действия для разных объектов. Например, оператор "+" для числовых величин выполняет сложение, а для текстовых - склеивание.

В ООП центральным является понятие класса. Класс - это шаблон, по которому создаются объекты определенного типа. Класс объединяет в себе данные и методы их обработки.

Объекты - это экземпляры определенного класса. Например, кнопки или текстовые поля, устанавливаемые на форме являются экземплярами соответствующих стандартных классов VB.

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

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

ООП характеризуется следующими принципами (по Алану Кею):

· все является объектом;

· вычисления осуществляются путем взаимодействия (обмена данными) между объектами, при котором один объект требует, чтобы другой объект выполнил некоторое действие; объекты взаимодействуют, посылая и получая сообщения; сообщение - это запрос на выполнение действия, дополненный набором аргументов, которые могут понадобиться при выполнении действия;

· каждый объект имеет независимую память, которая состоит из других объектов;

· каждый объект является представителем класса, который выражает общие свойства объектов данного типа;

· в классе задается функциональность (поведение объекта); тем самым все объекты, которые являются экземплярами одного класса, могут выполнять одни и те же действия;

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




Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2020-04-01 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: