Разработка программы «Лабиринт»

Государственное образовательное учреждение высшего  профессионального образования

«Сибирская  государственная автомобильно-дорожная академия

(СибАДИ)» 

Факультет  Информационные системы в управлении

Специальность Прикладная информатика в экономике

Кафедра  Прикладная информатика в экономике 
 
 
 

Пояснительная записка

к курсовой работе 

по дисциплине «Вычислительная математика и программирование» 

Название работы Разработка программы «Лабиринт» 
 

Выполнил: студентка гр. ПИ-09И1

Ф.И.О. Названов Павел Александрович

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

Толкачева Е.В. 
 
 
 

Омск 2010 
 

 

Содержание

 

Введение

       Целью курсовой работы является получение опыта самостоятельной разработки в соответствии с заданием пользовательского приложения, работающего под управлением ОС Microsoft Windows, в среде разработки приложений Microsoft Visual Basic .Net, а также получение навыка составления пояснительной записки и оформления в соответствии с требованиями, принятыми на факультете «Информационные системы в управлении».

       Задачами  курсовой работы являются: 1) разработка программы  
в соответствии с заданием; 2) составление пояснительной записки  
в соответствии с требованиями.

       В первой главе пояснительной записки к курсовой работе приводится краткое описание возможностей интегрированной среды разработки приложений Microsoft Visual Basic .Net, основных алгоритмических конструкций языка программирования Visual Basic и базовых элементов управления.

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

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

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

 

       1. Среда разработки приложений Microsoft Visual Basic .Net

       1.1 Основы языка Visual Basic

       В таблице 1.1 описаны типы данных Visual Basic и диапазоны значений.

Таблица 1.1 – Типы данных Visual Basic

Тип

Visual Basic

Диапазон  значений
Boolean True или False
Byte От 0 до 255 (беззнаковый).
Char От 0 до 65535 (беззнаковый).
Date От 0:00:00 (полночь) 1 января 0001 года до 11:59:59 вечера  
31 декабря 9999 года.
Decimal От 0 до +/–7,9... E + 28 без десятичной запятой.
Double Число двойной  точности с плавающей запятой;

от –1,79769313486231570E+308 до –4.94065645841246544E–324 для отрицательных  значений; от 4,94065645841246544E–324  
до 1,79769313486231570E+308 для положительных значений

Integer От –2 147 483 648 до 2 147 483 647 (знаковый)
Long Длинное целое  число, от –9 223 372 036 854 775 808 (–9,2... E+18) до 9 223 372 036 854 775 807 (9,2... E+18) (знаковый)
SByte От –128 до 127 (знаковый)
Short Короткое целое  число, от –32 768 до 32 767 (знаковый)
Single Число одиночной  точности с плавающей запятой,

от –3,4028235E+38 до –1,401298E–45 для отрицательных значений;

от 1,401298E–45 до 3,4028235E+38 для положительных значений

String Строка переменной длины, от 0 до приблизительно 2 миллиардов знаков в кодировке Юникод.
UInteger От 0 до 4 294 967 295 (беззнаковый).
ULong От 0 до 18 446 744 073 709 551 615 (1,8... E+19) (знаковый)
UShort От 0 до 65 535 (беззнаковый)

       В таблице 1.2 кратко описаны основные циклические структуры в Visual Basic (позволяют выполнить одну или несколько строк кода несколько раз). 

Таблица 1.2 – Циклические структуры Visual Basic

Циклическая конструкция Краткое описание
While...

End While

Выполняет набор  инструкций, пока значение условия, указанного в операторе While, равно True.
Do...Loop Позволяет проверить  условие в начале или в конце  структуры цикла. Можно также  указать, следует ли повторять цикл, пока значение условия равно True или же до тех пор, пока оно не станет равно True.
For...Next Выполняет определенное число итераций. Для отслеживания числа повторений в ней используется управляющая переменная цикла, называющаяся счетчиком. Необходимо указать начальное и конечное значения для этого счетчика и при необходимости указать шаг, на который счетчик будет увеличен за одно повторение.
For Each...

Next

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

             Подробную информацию об основах программирования на языке Visual Basic можно найти в [1, 2].

1.2 Элементы управления в Microsoft Visual Basic .Net

             Свойства управляющих элементов, используемых в программе, описаны в таблице 1.3 

Таблица 1.3 – Свойства управляющих элементов Visual Basic

Тип Назначение
PictureBox Предназначен  для размещения на форме графического изображения. Размещенное в форме  графическое изображение поместить  в рамку, используя свойство BorderStyle: None (Без рамки), FixedSingle(Одномерная рамка) и Fixed3D(Объемная рамка). Свойство SizeMode (Autosize, CenterImage, Normal, StretchImage) для размещения в форме графического объекта.
ImageList Предназначен  для хранения графического изображения  домино.

       1.3 Обработка событий в Microsoft Visual Basic .Net

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

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

       Любой объект, способный вызывать события, является отправителем событий, также называемым источником событий. Формы и элементы управления являются примерами отправителей событий.

       Обработчики событий – это процедуры, вызываемые при возникновении соответствующего события. Можно использовать любые допустимые процедуры в качестве обработчика событий. В Visual Basic используется стандартное положение об именовании обработчиков событий. Имя должно состоять из имени отправителя события, знака подчеркивания и имени события. Например, событие Click кнопки с именем button1 будет иметь имя Sub button1_Click [1]. В теле процедуры необходимо описать действия, которые программа должна выполнить при получении сигнала о том, что данное событие произошло.

       Пользователь  оказывает управляющее воздействие  на программу посредством внешних  периферийных устройств. Наиболее распространенными среди них являются клавиатура и манипулятор «мышь». Далее подробно рассмотрены основные события, связанные с этими устройствами. В таблице 1.4 приведен перечень основных событий, передающих в программу сигнал, поступающий от клавиатуры. В таблице 1.5 приведен перечень основных событий, передающих в программу сигнал, поступающий от мыши. 
 
 
 
 
 
 
 

Таблица 1.4 – Перечень основных событий, связанных с клавиатурой

Название

события

Краткое описание события Параметры, передаваемые  
в процедуру обработки
KeyDown Происходит  при нажатии клавиши, если элемент  управления имеет фокус. Sender типа Object,

e типа KeyEventArgs

KeyPress Происходит  при нажатии клавиши, если элемент  управления имеет фокус. Sender типа Object,

e типа KeyPressEventArgs

KeyUp Происходит  при отпускании клавиши, если элемент  управления имеет фокус. Sender типа Object,

e типа KeyEventArgs

 

       Sender – ссылка на объект-отправитель события.

       Объект  класса KeyPressEventArgs имеет свойство KeyChar типа Char, которое получает знак, соответствующий нажатой клавише.

       Объект  класса KeyEventArgs имеет свойства:

    • Alt, Control, Shift типа Boolean показывают, была ли нажата клавиша ALT, CTRL, SHIFT;
    • KeyCode, KeyData типа Keys получают код нажатой клавиши (например, Keys.A, Keys.F1, Keys.Insert и т. п.);
    • KeyValue типа Integer получает значение нажатой клавиши (например, для клавиши ENTER значение KeyValue равно 13).
 
 
 
 
 
 

Таблица 1.5 – Перечень основных событий, связанных с мышью

Название

события

Краткое описание события Параметры, передаваемые  
в процедуру обработки
Click Происходит при щелчке левой кнопкой мыши по элементу управления Sender типа Object,

e типа EventArgs

DoubleClick Происходит при двойном щелчке левой кнопкой мыши по элементу управления Sender типа Object,

e типа EventArgs

MouseClick Происходит при щелчке любой кнопкой мыши по элементу управления Sender типа Object,

e типа MouseEventArgs

Mouse-

DoubleClick

Происходит при двойном щелчке любой кнопкой мыши по элементу управления Sender типа Object,

e типа MouseEventArgs

MouseDown Происходит  при нажатии любой кнопки мыши, если указатель мыши установлен на элементе управления Sender типа Object,

e типа MouseEventArgs

MouseEnter Происходит, когда  указатель мыши входит в границы  элемента управлеия Sender типа Object,

e типа EventArgs

MouseHover Происходит, когда  указатель мыши наведен на элемент  управления Sender типа Object,

e типа EventArgs

MouseLeave Происходит, когда указатель мыши покидает границы элемента управления Sender типа Object,

e типа EventArgs

MouseMove Происходит  при перемещении указателя мыши по элементу управления Sender типа Object,

e типа MouseEventArgs

MouseUp Происходит при отпускании любой кнопки мыши, если указатель мыши установлен на элементе управления Sender типа Object,

e типа MouseEventArgs

MouseWheel Происходит при повороте колесика мыши, если указатель мыши установлен на элементе управления Sender типа Object,

e типа MouseEventArgs

 

       Sender – ссылка на объект-отправитель события.

       Объект  класса EventArgs не содержит данных.

       Объект класса MouseEventArgs имеет свойства:

    • Button типа MouseButton получает сведения о нажатой кнопке мыши (MouseButton.Left, если нажата левая кнопка мыши, MouseButton.Right – правая кнопка мыши, MouseButton.Middle – средняя кнопка мыши);
    • Clicks типа Integer получает число нажатий и отпусканий кнопки мыши;
    • Delta типа Integer получает число со знаком, указывающее количество делений, на которое повернулось колесико мыши (делением называется один зубец колесика мыши);
    • X типа Integer получает координату x указателя мыши на момент создания события;
    • Y типа Integer получает координату у указателя мыши на момент создания события.

 

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

       Приложение  представляет собой стандартное  окно Windows фиксированных размеров, которое можно свернуть или закрыть. В окне имеется стандартное меню, включающее разделы «Игра» и «Справка». Раздел «Игра» включает подразделы «Новая игра», «Отменить ход» (доступна только для последнего сделанного хода) и «Выход». Раздел «Справка» содержит подразделы «Вызов справки» и «О программе…». Программа поддерживает два способа управления: с помощью мыши и с помощью клавиатуры.

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

       В таблице 2.1 перечислены используемые в программе глобальные константы  и переменные, в таблице 2.2 – элементы управления, в таблице 2.3 – процедуры и функции. 

Таблица 2.1 – Глобальные константы и переменные

Имя Тип Назначение
rn Integer Координаты  куда мы кликнули мышкой
cn Integer Координаты  куда мы кликнули мышкой
Mass Комната Масив в которм храняться данные комнаты о проходах
mas(7, 7) Integer Массив где  находится информация где находится  фишка
R,c Integer Координаты  фишки
mask(7, 7) Integer Масив где находятся  информация о ключах и дверях
smas(7, 7) Integer Координаты  фишки прошлого хода
 
Имя Тип Назначение
sr, sc Integer Координаты  фишки прошлого хода
st Integer Количество  ходов прошлого хода
s Integer   Количество  ходов
KA, KB, KC, KD, KE, KF, KG String Информация  о ключах если 0 нету если 1 то есть
sKA, sKB, sKC, sKD, sKE, sKF, sKG String Старая информация о ключах
 

Таблица 2.3 – Процедуры и функции

Имя Тип Назначение
NewGame Пользовательская  процедура Инициализация начальных значений параметров игры
Form1_Load Пользовательская  функция Инициализация игры
L_MouseDown Пользовательская  процедура Передвижение  фишки
PictureBox1_Paint Пользовательская  процедура Рисует ключи  там где стоит 0
НазадToolStripMenuItem_Click_1 Пользовательская  процедура Действие Назад
Ход() Пользовательская  процедура Записание ходов
Проверка() Пользовательская  процедура Происходит  возврат домино.

 

2.1 Блок-схема  программы

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 
 
 
 
 
 
 
 
 
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

      Программа PictureBox1_MouseDown

        Рисует ключи  там где написано 0  
 
 
 
 
 
 
 
 
 
 
 

 

         Проверка есть ли в ячейке ключ

         
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

         Ход назад

         
2.2 Демонстрация работы программы

       Для начала работы с программой нужно  запустить файл Лабиринт.exe. Появится окно программы (рисунок 2.6).

       

       Рисунок 2.6 – окно программы «Лабиринт»

 

        Заключение

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

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

       Полученные  знания использованы на практике. Результатом работы является приложение-игра «Лабиринт», работающее под ОС Windows.

 

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

  1. Библиотека MSDN (по-русски) [Электронный ресурс] – Электрон. дан. – Microsoft Corporation, 2010 – Режим доступа: http://msdn.microsoft.com/ru-ru/library/ms123401.aspx, свободный. – Загл. с экрана. – Яз. рус.
  2. Долженков В. Visual Basic .NET. Учебный курс / В. Долженков, М. Мозговой. – СПб., Питер, 2003. – 464 с.

 

Приложение А 
Листинг программы

Public Class Form1

    Const p = 30 ' ширина клетки поля в пиксв.

    Dim Mass(14, 15) As Комната 'Масив в которм храняться данные комнаты о проходах

    Dim mas(14, 15), r, c As Integer

    Dim mask(7, 7) As Integer

    Dim smas(14, 15), sr, sc, st, s As Integer 'Массив для отмены  хода

    Dim KA, KB, KC, KD, KE, KF, KG, sKA, sKB, sKC, sKD, sKE, sKF, sKG As String 

    Sub newgame()

        'Проход L-Слева P-Справа V-Сверху N-Снизу, LN-Слева и снизу, LP... 

        Mass(1, 1).PN() : Mass(1, 2).LPN() : Mass(1, 3).LPN() : Mass(1, 4).LPN() : Mass(1, 5).LPN() : Mass(1, 6).LPN() : Mass(1, 7).LN()

        Mass(2, 1).PVN() : Mass(2, 2).LPVN() : Mass(2, 3).LPVN() : Mass(2, 4).LVN() : Mass(2, 5).LPVN() : Mass(2, 6).LPVN() : Mass(2, 7).LVN()

        Mass(3, 1).PVN() : Mass(3, 2).LPVN() : Mass(3, 3).LPVN() : Mass(3, 4).LPVN() : Mass(3, 5).LPVN() : Mass(3, 6).LPVN() : Mass(3, 7).LVN()

        Mass(4, 1).PV() : Mass(4, 2).LPVN() : Mass(4, 3).LPVN() : Mass(4, 4).LPVN() : Mass(4, 5).LPVN() : Mass(4, 6).LPVN() : Mass(4, 7).LVN()

        Mass(5, 1).PN() : Mass(5, 2).LPVN() : Mass(5, 3).LPVN() : Mass(5, 4).LPVN() : Mass(5, 5).LPV() : Mass(5, 6).LPVN() : Mass(5, 7).LVN()

        Mass(6, 1).PVN() : Mass(6, 2).LPVN() : Mass(6, 3).LPVN() : Mass(6, 4).LVN() : Mass(6, 5).PN() : Mass(6, 6).LPVN() : Mass(6, 7).LVN()

        Mass(7, 1).V() : Mass(7, 2).PV() : Mass(7, 3).LPV() : Mass(7, 4).LPV() : Mass(7, 5).LV() : Mass(7, 6).PV() : Mass(7, 7).LV()

        s = 0

        KA = 0

        KB = 0

        KC = 0

        KD = 0

        KE = 0

        KF = 0

        KG = 0

        Label3.Text = "   Ключ А-" + KA + "   Ключ B-" + KB + "   Ключ C-" + KC + "   Ключ D-" + KD + "   Ключ E-" + KE + "   Ключ F-" + KF + "   Ключ G-" + KG

        For i = 1 To 13

            For j = 1 To 15

                mas(i, j) = 1

            Next

        Next

        mask(4, 1) = 1 : mask(7, 2) = 2 : mask(4, 2) = 3 : mask(6, 5) = 4 : mask(5, 5) = 5 : mask(7, 6) = 6 : mask(7, 7) = 7

        mask(2, 5) = 8 : mask(5, 1) = 9 : mask(6, 2) = 10 : mask(2, 6) = 11 : mask(3, 3) = 12 : mask(7, 1) = 13 : mask(7, 5) = 14

        'Начальные координаты нашей фишки

        r = 4

        c = 1

        mas(4, 1) = 0

        Label2.Text = s

        Me.Refresh()

    End Sub

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        'Создаем экзэмпляр класса

        For i = 1 To 14

            For j = 1 To 15

                Mass(i, j) = New Комната

            Next j 

        Next i

        newgame()

    End Sub

    Private Sub L_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles L.MouseDown

        'Здесь мы описываем условия по которым будет передвигаться фишка

       Dim rn, cn As Integer

        rn = e.Y \ p + 1

        cn = e.X \ p + 1

        If mas(rn, cn) = 1 And r - rn = -1 And c = cn And Mass(r, c).NN = 1 And Mass(rn, cn).VV = 1 Then 

            st = s

            sr = r

            sc = c

            Ход()

            mas(rn, cn) = 0

            mas(r, c) = 1

            r = rn

            c = cn

            s = s + 1 

            Проверка() 
 

        End If 

        If mas(rn, cn) = 1 And r - rn = 1 And c = cn And Mass(r, c).VV = 1 And Mass(rn, cn).NN = 1 Then

            st = s

            sr = r

            sc = c

            Ход()

            mas(rn, cn) = 0

            mas(r, c) = 1

            r = rn

            c = cn

            Проверка()

            s = s + 1 

        End If 

        If mas(rn, cn) = 1 And r = rn And c - cn = -1 And Mass(r, c).PP = 1 And Mass(rn, cn).LL = 1 Then

            Ход()

            st = s

            sr = r

            st = s

            mas(r, c) = 1

           mas(rn, cn) = 0

            r = rn

            c = cn

            Проверка()

            s = s + 1

        End If 

        If mas(rn, cn) = 1 And r = rn And c - cn = 1 And Mass(r, c).LL = 1 And Mass(rn, cn).PP = 1 Then

Разработка программы «Лабиринт»