МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ АВИАЦИОННЫЙ ИНСТИТУТ (ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ)
ДИСЦИПЛИНА «ИНФОРМАТИКА»
КУРСОВАЯ РАБОТА НА ТЕМУ:
Создание игры “Реверси”, при помощи языка программирования Visual Basic
Выполнил студент гр. _____
________________
Москва, 20__ год.
Содержание.
Введение. 3
Описание хода работы. 4
Создание игрового интерфейса. 4
Написание кода программы для кнопки Новая Игра. 6
Написание программного кода для игрового поля. 8
Заключительная часть 14
Приложение (исходный код программы) 15
Создание игры “Реверси”, при помощи языка программирования Visual Basic
Введение
Задачей, поставленной при написании курсовой работы, стало создание логической игры «Реверси» в среде программирования Visual Basic. При работе над ней использовалась сама среда программирования Visual Basic для создания непосредственно самой игры, а так же средство Microsoft Word для создания отчета о проделанной работе.
Интерфейс данной программы прост, как и действия, выполняемые пользователями. Поле для игры представляет собой квадрат жёлтых шашек 8?8. Для начала игры игроку необходимо нажать на кнопку Новая игра, а далее нажимать на шашки поля так, чтобы шашки противника оказались «зажаты». Для этого при нажатии шашки будут поочередно менять свой цвет, либо на белый, либо на чёрный. В случае, когда игра закончена, пользователю нужно снова нажать кнопку Новая игра, для начала новой партии.
Описание хода работы
Создание игрового интерфейса
Одна из важнейших задач, которая стоит перед тем, кто хочет создать при помощи Microsoft Visual Basic любую программу, пусть даже самую простейшую, это разработка интерфейса этой программы.
Используя панель инструментов, мы создаём следующий интерфейс:
Выбрав элемент CommandButton(Командная Кнопка), мы создаём на нашей форме 64 идентичных, ничем не отличающихся друг от друга кнопки, которые будут играть роль шашек, заполнение которых своим цветом и является целью игры. Все эти кнопки имеют одинаковое имя – Command1. Их цвет (параметр BackColor) жёлтый. Важно также отметить, что на кнопках ничего не написано (параметр Caption не заполнен). Кнопки имеют форму квадратов, т.е. параметры Width(ширина) и Height(высота) имеют одинаковые значения, в нашем случае эти значения равны 495.
Создание интерфейса программы
Помимо этих 64 кнопок, на форме мы располагаем кнопку для начала игры, её параметры следующие: имя – ComNew, она светлого жёлтого цвета(BackColor), в отличие от тех 64 кнопок, на этой есть надпись(Caption) – Новая игра, т.е. из названия следует, что после нажатия на эту кнопку начнётся новая игра, ширина(Width) и высота(Height) на этот раз отличаются по своим значениям, т.к. кнопка имеет прямоугольную форму.
Теперь, когда поле и кнопка начала игры создана, мы создаём при помощи элемента TextBox, два окошка, в которых будут отображаться кол-ва очков играющих сторон. Таких окна нам нужно два (т.к. количество игроков в нашей версии программы равно двум), они имеют имена Text1 и Text2 соответственно. Параметр Text для этих двух окон не заполняется, так как в них будут отображаться числа, равные кол-ву квадратов, занятых одной из сторон (Text1 для белых шашек, Text2 для чёрных) на игровом поле, а изначально эти два окна должны быть пусты.
Затем, при помощи элемента Label, мы создаём две надписи, и располагаем их над окошками где будут выводиться очки играющих (см. выше), эти две надписи создаются для удобства пользователя, чтобы было видно какое из окон отображает кол-во чёрных шашек, а какое кол-во белых. Надписи имеют параметры: Имена – Label1 и Label2, на одной из них написано “Белые”, а на второй “Чёрные”, т.е. параметры Caption заполняются соответствующим образом. Параметры текста (параметр Font) этих названий имеют следующий вид: Шрифт - Arial, начертание – жирный курсив, размер шрифта – 18. Текст на надписях расположен в центре (параметр Alignment).
Напоследок создаётся кнопка выполняющая операцию выхода из игры. Имя – ComEnd, надпись (Caption) – ВЫХОД.
Написание кода программы для кнопки Новая игра
Создание программного кода является основным этапом в создании любой программы. Код представляет собой алгоритм, на основе которого будет действовать программа.
Одна из самых важнейших частей программного кода связана с кнопкой Новая игра (ComNew), при её нажатии выполняются следующий действия: Во-первых, стираются все “окрашенные” шашки на игровом поле:
Col = vbBlack
For Index = 0 To 63
Command1.Item(Index).BackColor = vbYellow
Command1.Item(Index).Enabled = True
Next Index
Эти строчки означают, что поступает команда для всех этих кнопок поменять цвет на жёлтый.
Однако это не все операции, которые происходят при нажатии на кнопку Новая игра, также происходит окраска 4 шашек, расположенных в центре поля (это 27-ая, 28-ая, 35-ая и 36-ые шашки), две из шашек становятся чёрными, а две других белыми:
Command1.Item(27).BackColor = vbWhite
Command1.Item(28).BackColor = vbBlack
Command1.Item(35).BackColor = vbBlack
Command1.Item(36).BackColor = vbWhite
Command1.Item(27).Enabled = False
Command1.Item(28).Enabled = False
Command1.Item(35).Enabled = False
Command1.Item(36).Enabled = False
До нажатия клавиши Новая игра
После нажатия
Эта операция необходима для того, чтобы играющие вначале были в равных условиях, и у каждого уже было какое-то кол-во шашек на поле.
В состав кода для этой кнопки входят также следующие действия – во-первых, задаётся цвет первого хода, тут нужно обратить внимание на то, что этот цвет “ходит первым” после нажатия кнопки Новая игра, а не после появления 4 уже покрашенных шашек.
Во-вторых, в текстовые окна (TextBox) вводятся исходные данные, они равны 2, так как после нажатия на кнопку Новая игра, у каждого из играющего находиться по две, уже окрашенных шашки:
Text1.Text = 2
Text2.Text = 2
На этом заканчивается написание кода для кнопки Новая Игра.
Написание программного кода для игрового поля
Часть программного кода, касающегося самого игрового поля, является самой главной.
В первую очередь мы задаём 6 переменных, одна из них (переменная Col, которая будет относиться к цвету) имеет тип String, это стартовый тип, предназначенный для описания символов и строк символов. Другие 5 переменных (Down,Right, Vert, Gor, A, необходимые для вычислений) имеют тип Integer, предназначенный для хранения целых чисел, а также чисел со знаком.
Dim Col As String
Dim Down, Right, Vert, Gor, A As Integer
Теперь для массива управления 64 шашек (Command1) пишется операция, которая выбирает цвет следующего хода, в зависимости от того какой цвет ходил в прошлый раз, как раз тут используется переменная Col.
Затем создаётся процедура, которая выполняет такую функцию: после нажатия на шашку, она окрашивается в тот цвет, который сейчас активен (т.е. чей сейчас ход). Одновременно с этим задаётся команда, что такая шашка уже не может быть нажата игроками ещё раз, то есть её свойство Enabled становится False.
If Col = vbBlack Then
Col = vbWhite
Else
Col = vbBlack
End If
Command1.Item(Index).BackColor = Col
Command1.Item(Index).Enabled = False
Следующий шаг в написание алгоритма для этих кнопок это – вычисление по формулам координат шашек по вертикальной и горизонтальной осям. Происходит это по следующим формулам:
Vert = Index \ 8 + 1
Gor = 9 - (7 * Vert - (Index - Vert))
Down = 8 - Vert
Right = 8 – Gor
White = 0
Black = 0
На этом же шаге для некоторых переменных, которые будут позже использованы в дальнейших операциях, задаются исходные значения. Так переменным Down, Right, являющимися пределами максимально изменения параметра A во многих следующих циклах кода, задаются значения 8 – Vert и 8 – Gor соответственно. Также переменным White и Black задаются нулевые значения, что необходимо для дальнейшего корректного подсчета количества очков, полученных игроками в ходе игры.
Далее пишутся логические выражения, обеспечивающие смену цвета шашек, при выигрышном ходе игрока, то есть таком, при котором происходит двустороннее «окружение» шашек противника шашками своего цвета. Происходит это за счет использования циклического алгоритма For с шагом Step равным (-1) для переменной A. Например:
For A = Down To 1 Step -1
…
Next A
Внутрь это циклического алгоритма вкладывается разветвляющийся алгоритм, реализованный с помощью неполной команды ветвления с проверкой цвета фона необходимой клавиши, определяемой математическим выражением с параметром A.
Например:
If Command1.Item(Index - 7 * A).BackColor = Col Then
…
End If
В тело этого алгоритма вложена ещё одна неполная команда ветвления аналогичного вида, проверяющая свойство Enabled выбираемой при помощи математического выражения с параметром A кнопки, например:
If Command1.Item(Index - 7 * (A - 1)).Enabled = False Then
Command1.Item(Index - 7 * (A - 1)).BackColor = Col
End If
Таким образом в совокупности они выглядят следующим образом (примерный вариант):
For A = Vert - 1 To 1 Step -1
If Command1.Item(Index - 7 * A).BackColor = Col Then
If Command1.Item(Index - 7 * (A - 1)).Enabled = False Then
Command1.Item(Index - 7 * (A - 1)).BackColor = Col
End If
End If
Next A
Вышеприведенный цикл последовательно производит следующие логические операции:
1 шаг: задает численное значение переменной A;
2 шаг: проверяет цвет фона, выбираемой согласно параметру A, шашки и при его совпадении со значением переменной Col, переходит к проверке следующего условия, то есть шагу 3, а в обратном случае возвращается к шагу 1;
3 шаг: проверяет, была ли нажата ранее кнопка, определяющаяся выражением с параметром A, если условие выполняется, то данная шашка закрашивается цветом, определяющимся переменной Col, в обратном случае возвращается на шаг 1.
До нажатия помеченной кнопки
После нажатия пользователем кнопки
Циклов таких было использовано 8, связанно это с направлениями изменения определяющего параметра A:
For A = Down To 1 Step -1
If Command1.Item(Index + 8 * A).BackColor = Col Then
If Command1.Item(Index + 8 * (A - 1)).Enabled = False Then
Command1.Item(Index + 8 * (A - 1)).BackColor = Col
Else
End If
End If
Next A
For A = Vert - 1 To 1 Step -1
If Command1.Item(Index - 8 * A).BackColor = Col Then
If Command1.Item(Index - 8 * (A - 1)).Enabled = False Then
Command1.Item(Index - 8 * (A - 1)).BackColor = Col
End If
End If
Next A
For A = Right To 1 Step -1
If Command1.Item(Index + A).BackColor = Col Then
If Command1.Item(Index + A - 1).Enabled = False Then
Command1.Item(Index + A - 1).BackColor = Col
End If
End If
Next A
For A = Gor - 1 To 1 Step -1
If Command1.Item(Index - A).BackColor = Col Then
If Command1.Item(Index - A + 1).Enabled = False Then
Command1.Item(Index - A + 1).BackColor = Col
End If
End If
Next A
For A = Down To 1 Step -1
If Command1.Item(Index + 7 * A).BackColor = Col Then
If Command1.Item(Index + 7 * (A - 1)).Enabled = False Then
Command1.Item(Index + 7 * (A - 1)).BackColor = Col
Else
End If
End If
Next A
For A = Vert - 1 To 1 Step -1
If Command1.Item(Index - 7 * A).BackColor = Col Then
If Command1.Item(Index - 7 * (A - 1)).Enabled = False Then
Command1.Item(Index - 7 * (A - 1)).BackColor = Col
End If
End If
Next A
For A = Down - 1 To 1 Step -1
If Command1.Item(Index + 9 * A).BackColor = Col Then
If Command1.Item(Index + 9 * (A - 1)).Enabled = False Then
Command1.Item(Index + 9 * (A - 1)).BackColor = Col
Else
End If
End If
Next A
For A = Vert - 2 To 1 Step -1
If Command1.Item(Index - 9 * A).BackColor = Col Then
If Command1.Item(Index - 9 * (A - 1)).Enabled = False Then
Command1.Item(Index - 9 * (A - 1)).BackColor = Col
End If
End If
Next A
После это происходит процесс подсчета очков обоих игроков. Для этого вводится циклический алгоритм
For Index = 0 To 63
...
Next Index
Внутри которого происходит проверка цветов шашек при помощи команды выбора Select, где предположением служит Command1.Item(Index).BackColor, то есть цвет фона шашки. В соответствии со значениями этого предположения изменяются переменные White и Black, значения которых выводятся в элементы Text1 и Text2.
For Index = 0 To 63
Select Case Command1.Item(Index).BackColor
Case Is = vbWhite
White = White + 1
Case Is = vbBlack
Black = Black + 1
End Select
Text1.Text = White
Text2.Text = Black
Next Index
После этого в аналогичном цикле происходит подсчет количества уже нажатых кнопок, достигается это путем вложения в тело цикла неполной команды ветвления с проверкой условия о нажатии кнопки.
A = 0
For Index = 0 To 63
If Command1.Item(Index).Enabled = False Then
A = A + 1
End If
Next Index
If A = 64 Then
приглашение = "Игра закончена.Начните снова!"
If White > Black Then
сообщение = "Белые выиграли!"
Else
If White < Black Then
сообщение = "Чёрные выиграли!"
Else
сообщение = “Ничья!”
End If
End If
MsgBox сообщение, vbExclamation, приглашение
End If
Последнее описываемое событие – нажатие на кнопку ВЫХОД. Самый простой алгоритм
Private Sub ComEnd_Click()
End
End Sub
На этом разработка кода программы завершена и программа игры Реверси готова к использованию.
Заключительная часть
Таким образом, создание программы в среде программирования Visual Basic можно разделить на 2 основных этапа:
создание интерфейса
написание программного кода
Именно возможность создания и просмотра интерфейса программы в режиме проектирования и является отличительной чертой среды Visual Basic, как графической, делающей её гибкой и приемлемой для решения разнообразных задач, в том числе и для создания игр, что было рассмотрено нами на примере создания игры «Реверси».
Приложение (исходный код программы)
Dim Col As String
Dim Down, Right, Vert, Gor, A As Integer
Private Sub ComNew_Click()
Col = vbBlack
For Index = 0 To 63
Command1.Item(Index).BackColor = vbYellow
Command1.Item(Index).Enabled = True
Next Index
Command1.Item(27).BackColor = vbWhite
Command1.Item(28).BackColor = vbBlack
Command1.Item(35).BackColor = vbBlack
Command1.Item(36).BackColor = vbWhite
Command1.Item(27).Enabled = False
Command1.Item(28).Enabled = False
Command1.Item(35).Enabled = False
Command1.Item(36).Enabled = False
Text1.Text = 2
Text2.Text = 2
End Sub
Private Sub Command1_Click(Index As Integer)
If Col = vbBlack Then
Col = vbWhite
Else
Col = vbBlack
End If
Command1.Item(Index).BackColor = Col
Command1.Item(Index).Enabled = False
Vert = Index \ 8 + 1
Gor = 9 - (7 * Vert - (Index - Vert))
Down = 8 - Vert
Right = 8 - Gor
White = 0
Black = 0
For A = Down To 1 Step -1
If Command1.Item(Index + 8 * A).BackColor = Col Then
If Command1.Item(Index + 8 * (A - 1)).Enabled = False Then
Command1.Item(Index + 8 * (A - 1)).BackColor = Col
Else
End If
End If
Next A
For A = Vert - 1 To 1 Step -1
If Command1.Item(Index - 8 * A).BackColor = Col Then
If Command1.Item(Index - 8 * (A - 1)).Enabled = False Then
Command1.Item(Index - 8 * (A - 1)).BackColor = Col
End If
End If
Next A
For A = Right To 1 Step -1
If Command1.Item(Index + A).BackColor = Col Then If Command1.Item(Index + A - 1).Enabled = False Then
Command1.Item(Index + A - 1).BackColor = Col
End If
End If
Next A
For A = Gor - 1 To 1 Step -1
If Command1.Item(Index - A).BackColor = Col Then
If Command1.Item(Index - A + 1).Enabled = False Then
Command1.Item(Index - A + 1).BackColor = Col
End If
End If
Next A
For A = Down To 1 Step -1
If Command1.Item(Index + 7 * A).BackColor = Col Then
If Command1.Item(Index + 7 * (A - 1)).Enabled = False Then
Command1.Item(Index + 7 * (A - 1)).BackColor = Col
Else
End If
End If
Next A
For A = Vert - 1 To 1 Step -1
If Command1.Item(Index - 7 * A).BackColor = Col Then
If Command1.Item(Index - 7 * (A - 1)).Enabled = False Then
Command1.Item(Index - 7 * (A - 1)).BackColor = Col
End If
End If
Next A
For A = Down - 1 To 1 Step -1
If Command1.Item(Index + 9 * A).BackColor = Col Then
If Command1.Item(Index + 9 * (A - 1)).Enabled = False Then
Command1.Item(Index + 9 * (A - 1)).BackColor = Col
Else
End If
End If
Next A
For A = Vert - 2 To 1 Step -1
If Command1.Item(Index - 9 * A).BackColor = Col Then
If Command1.Item(Index - 9 * (A - 1)).Enabled = False Then
Command1.Item(Index - 9 * (A - 1)).BackColor = Col
End If
End If
Next A
For Index = 0 To 63
Select Case Command1.Item(Index).BackColor
Case Is = vbWhite
White = White + 1
Case Is = vbBlack
Black = Black + 1
End Select
Text1.Text = White
Text2.Text = Black
Next Index
A = 0
For Index = 0 To 63
If Command1.Item(Index).Enabled = False Then
A = A + 1
End If
Next Index
If A = 64 Then
приглашение = "Игра закончена.Начните снова!"
If White > Black Then
сообщение = "Белые выиграли!"
Else
If White < Black Then
сообщение = "Чёрные выиграли!"
Else
сообщение = "Ничья!"
End If
End If
MsgBox сообщение, vbExclamation, приглашение
End If
End Sub
Private Sub ComEnd_Click()
End
End Sub