Разработка компьютерной игры "Морской бой"

 

Содержание проекта


Введение. Теоретическая часть

Игры и искусственный интеллект. Разработка приложения

Общая блок-схема программы

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

Внешний вид рабочей программы

Необходимые переменные, процедуры и функции

Описание объектов, используемых в приложении

Листинг программного кода

Заключение


Введение


Описание правил игры «Морской бой».

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

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

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

В данном проекте необходимо реализовать известную игру «Морской бой». Наиболее важные алгоритмы этой игры: алгоритмы расстановки кораблей по полю, выбора направления удара Компа в поле Игрока и непосредственно нанесение удара им.


I. Теоретическая часть


Игры и искусственный интеллект


Человек наделен интеллектом. А компьютер? Сейчас много говорят о так называемом искусственном интеллекте. У компьютера это, прежде всего память. Его оперативная память (предназначенная для быстрого использования) позволяет записывать слова и получать информацию за микросекунды.

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

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

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

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

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

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

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

Компьютерные игры реального времени на персональной ЭВМ для одного играющего без применения специального оборудования («мышек», «джойстиков» и др.) можно рассматривать как определенную задачу - в ней имеются условия, цель и средства ее достижения. Решение задачи - процесс, управляемый играющим в реальном времени по определенным правилам. Течение процесса оценивается по установленному критерию.

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

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

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

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

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

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

Оперативный план - совокупность действий внутри программы между двумя возможными действиями играющего.

Тактический план - совокупность игровых действий, ведущих к достижению какой-либо локальной цели.

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


II. Разработка приложения


Общая блок-схема программы



P1Left и P2Left - количество неубитых палуб кораблей полей 1 и 2 соответственно.

Блок-схемы алгоритмов.



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


Программа «Морской бой» состоит из трех форм и одного модуля, в котором находятся все основные процедуры. На основной форме расположены объекты, при помощи которых выполняются различные события. Так с помощью управляющих кнопок можно:

  1. начать игру (тут же автоматически расставить корабли)
  2. изменить сложность игры;
  3. получить информацию о правилах игры;
  4. получить справку об авторе.

Внешний вид рабочей программы




Необходимые переменные, процедуры и функции

игра морской бой компьютер

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

В приложении использованы следующие переменные:

S1 (9, 9) as Byte

S2 (9, 9) as Byte - поля 1 и 2, содержат полную информацию о расставленных на них кораблях, прострелянных и непрострелянных местах. Каждая клетка может содержать 4 значения: 0 - пусто и непростреляно, 1 - неподбитая часть корабля, 2 - пусто, но простреляно, 3 - подбитая часть корабля.

V1 (9,9) as Byte

V2 (9,9) as Byte - аналогично S1 (9,9) и S2 (9,9), только содержат информацию лишь об открытых игроком либо компьютером местах.

Num - номер текущего поля. Может быть либо 1, либо 2.

Slozhnost - уровень Компа. Может быть от 1 до 9.

StrX, StrY - координаты, выбранные компьютером для "удара". Могут быть от 0 до 9.

P1Left, P2Left - содержат количество "неубитых" сегментов кораблей для полей 1 и 2 соответственно.

ShotResult - содержит результат последнего выстрела: «Ранен», «Убит», «Мимо», «Повторная стрельба (было попадание) - ход засчитан» и «Повторная стрельба (мимо) - ход засчитан». Тип переменной - String.

ShipL - содержит длину последнего «убитого» корабля (от 1 до 4).

Moves - количество проделанных ходов Компа.- количество проделанных ходов Игрока.

Err - индикатор ошибки. Может быть True, если ошибка была, либо False, если её не было.

ErrName - описание ошибки, если она была. Тип переменной - String.

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

  1. Процедуры Sub (не возвращают значения)
  2. Процедуры Function (возвращают значения)
  3. Процедуры Property (могут возвращать и присваивать значения), а также устанавливать ссылки.

В приложении использованы следующие процедуры:

DrawSea (Num) - отображает всё поле номер Num

ViewSea (Num) - отображает открытые места поля номер Num(Num) - скрывает поле номер Num- отключает запись об ошибке: делает Err = False, а ErrName = ""(Num) - расставляет корабли на поле Num случайным образом(Num) - выбирает ячейку на поле Num для "огня" по ней. Алгоритм эффективен в зависимости от уровня игры компьютера (Slozhnost).

На выходе выдаёт переменные StrX и StrY, которые используются в качестве X и Y для "выстрела" (Fire (Num, StrX, StrY)), а также увеличивает переменную Moves на 1 за каждый раз.(Num, X, Y) - производит "огонь" по ячейке с координатами X, Y на поле Num.

На выходе выдаёт переменные ShotResult и ShipL(Num) - полностью открывает неизвестную игроку территорию поля Num(Num) - полностью стирает данные об «открытых» местах на поле Num.- подсчитывает, сколько "неубитых" сегментов кораблей есть на поле 1 и поле 2, и выдаёт на выходе соответствующие переменные: P1Left и P2Left.


Описание объектов, используемых в приложении


В приложении использованы объекты Microsoft Visual Basic, которые расположены на формах проекта для выполнения определенных событий, позволяющих пользователю визуально оценить процесс работы с данными.

В данной работе расположены следующие объекты:

·Label (Метка)

·Picture box (Графическое окно)

·Image (Изображение)

·Command button (Кнопка управления)

·Frame (Рамка)

·Timer (Таймер)

Описание используемых объектов:

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

Command button (Кнопка управления) - выполняет команду или действие, выбранные пользователем

Image (Изображение) - отображает побитовые изображения, значки или метафайлы Windows, файлы JPEG или GIF; при нажатии ведёт себя как кнопка управления

Picture box (Графическое окно) - отображает побитовые изображения, значки или метафайлы Windows, файлы JPEG или GIF. Он также отображает текст и является визуальным контейнером для других элементов управления

Timer (Таймер) - выполняет события через определённые интервалы времени

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


Листинг программного кода

_boi. Form

Dim Moixody As ByteSub CmdNewgame_Click().Caption = "0".Caption = "0".Caption = "20".Caption = "20"= 0= 0(1)(2)(1)(2)(1)(2)(1).Visible = FalseSubSub cmdFor_autor_Click().ShowSubSub cmdExit_Click()SubSub cmdPravila_Click()_igry.ShowSubSub CmdComp_Proff_Click()SubSub Form_Load()SubSub P2_Click(Index As Integer)= Moixody + 1.Caption = Str(Moixody)= Int(Index / 10)= Index - (X * 10)2, X, Y= ShotResult.Caption = ShotResult.Caption = ShipL(2).Caption = Str(Moves)res = "Ранен" Or res = "Убит" Then GoTo 2

: Pl2.Enabled = False(1)0.51, StrX, StrY= ShotResult(1).Caption = Str(Moves)res = "Ранен" Or res = "Убит" Then GoTo 1.Enabled = True

: CalcShipsLeft.Caption = Str(P1Left) + " ".Caption = Str(P2Left) + " "P1Left = 0 Then If P1Left = P2Left Then MsgBox "Ничья!" + vbCrLf + "В следующий раз обязательно повезет!!!",, "Исход игры: Ничья": Exit SubP2Left = 0 Then MsgBox "Игрок победил на " + Str(Moixody) + "-м ходу!!!",, "Исход игры: Поздравления": Exit SubP1Left = 0 Then MsgBox "Комп победил на " + Str(Moves) + "-м ходу!!!",, "Исход игры: Поражение": Exit Sub

End SubMain()_boi.Show(1)(2)(1)(2)i = 0 To 99

Morskoi_boi.P1(i).BorderStyle = 1_boi.P2(i).BorderStyle = 1

Next ilv As String

Do= InputBox("Задайте сложность игры (1-9):", "Добро пожаловать!!!")

Slozhnost = Val(lv)While Slozhnost < 1 Or Slozhnost > 9_Proff.Caption = "Уровень Компа: " + Str(Slozhnost)SubSub Wait(seconds) 'Замедляющая процедура - пауза на (n) секунд.Enabled = True_boi.Timer1.Interval = 1000 * secondsMe.Timer1.Interval > 0.Enabled = FalseSubSub Timer1_Timer().Interval = 0Sub

Procedurs_Modul. bas

Public S1(9, 9) As Byte, S2(9, 9) As Byte, V1(9, 9) As Byte, V2(9, 9) As ByteP1Left As Integer, P2Left As IntegerErr As Boolean, Moves As Integer, ErrName As String, ShotResult As StringShipL As Byte, Slozhnost As Byte, StrX As Byte, StrY As ByteDrawSea(Num As Byte) ' - отображает всё поле номер Num

'Если поле №1, то:

If Num = 1 Then

For i = 0 To 9j = 0 To 9_boi.P1(j * 10 + i).Picture = Morskoi_boi.Sprite(S1(j, i))jiSub If

'Если поле №2, то:

If Num = 2 Theni = 0 To 9j = 0 To 9_boi.P2(j * 10 + i).Picture = Morskoi_boi.Sprite(S2(j, i))jiSubIfSub ViewSea(Num As Byte) '- отображает открытые места поля номер Num

'Если поле №1, то:

If Num = 1 Then

For i = 0 To 9j = 0 To 9_boi.P1(j * 10 + i).Picture = Morskoi_boi.Sprite(V1(j, i))jiSubIf

'Если поле №2, то:Num = 2 Theni = 0 To 9j = 0 To 9_boi.P2(j * 10 + i).Picture = Morskoi_boi.Sprite(V2(j, i))jiSubIfSubHideSea(Num As Byte) ' - скрывает поле номер Num

'Если поле №1, то:

If Num = 1 Then

For i = 0 To 9j = 0 To 9_boi.P1(j * 10 + i).Picture = Morskoi_boi.Sprite(0)jiSubIf

'Если поле №2, то:

If Num = 2 Then

For i = 0 To 9j = 0 To 9_boi.P2(j * 10 + i).Picture = Morskoi_boi.Sprite(0)jiSubIf Sub

Sub SetShips(Num As Byte) ' - расставляет корабли на поле Num случайным образом

Dim S0(9, 9) As ByteSX(3) As Byte, SY(3) As Byte

10 'Начало расстановки

For i = 0 To 9

For j = 0 To 9(j, 1) = 0j i

'Четверные

L = 4 'длина

GoSub 100

'Тройныеm = 1 To 2= 3 'длина100m

'Двойныеm = 1 To 3 = 2 'длина

GoSub 100

Next m

'Одинарные

For m = 1 To 4= 1 'длина100 m

GoTo 99

Exit Sub

'Расстановка кораблей

Err = False= 100

= tries - 1tries < 0 Then Err = True: GoTo 10= Int(Rnd * 10)= Int(Rnd * 10)X = 10 Or Y = 10 Then GoTo 100= Int(Rnd * 2000)= Int(v / 1000)i = 1 To L(i - 1) = X(i - 1) = Yv = 0 Then X = X + 1 Else Y = Y + 1ii = 1 To L= SX(i - 1)= SY(i - 1)X > 9 Or Y > 9 Then GoTo 101j = -1 To 1k = -1 To 1= X + jX1 > 9 Or X1 < 0 Then GoTo 102= Y + kY1 > 9 Or Y1 < 0 Then GoTo 102S0(X1, Y1) <> 0 Then GoTo 101

Next kjii = 1 To L= SX(i - 1)= SY(i - 1)(X, Y) = 1i

For i = 0 To 9j = 0 To 9Num = 1 Then S1(j, i) = S0(j, i) Else S2(j, i) = S0(j, i)jiSub Fire(Num, XPos, YPos) '- производит "огонь" по ячейке с координатами X, Y на поле Num. На выходе выдаёт переменные ShotResult и ShipL

X = XPos

Y = YPos

'Тест поля 1Num = 1 ThenS1(X, Y) = 0 Then S1(X, Y) = 2: V1(X, Y) = 2: ShotResult = "Мимо": Exit SubS1(X, Y) = 1 Then S1(X, Y) = 3: V1(X, Y) = 3: GoSub 100: Exit SubS1(X, Y) = 2 Then ShotResult = "Повторная стрельба (мимо) - ход засчитан": Exit Sub S1(X, Y) = 3 Then ShotResult = "Повторная стрельба (было попадание) - ход засчитан": Exit Sub

End IfS2(X, Y) = 0 Then S2(X, Y) = 2: V2(X, Y) = 2: ShotResult = "Мимо": Exit SubS2(X, Y) = 1 Then S2(X, Y) = 3: V2(X, Y) = 3: GoSub 100: Exit SubS2(X, Y) = 2 Then ShotResult = "Повторная стрельба (мимо) - ход засчитан": Exit Sub S2(X, Y) = 3 Then ShotResult = "Повторная стрельба (было попадание) - ход засчитан": Exit Sub

Exit Sub

'Тест: ранен или убит

c = 0CX(16) As Byte, CY(16) As Byte

'Внизi = X To X + 3i > 9 Then GoTo 101Num = 1 ThenS1(i, Y) = 1 Then GoTo 110S1(i, Y) = 0 Or S1(i, Y) = 2 Then GoTo 101S1(i, Y) = 3 Then CX(c) = i: CY(c) = Y: c = c + 1IfNum = 2 ThenS2(i, Y) = 1 Then GoTo 110S2(i, Y) = 0 Or S2(i, Y) = 2 Then GoTo 101S2(i, Y) = 3 Then CX(c) = i: CY(c) = Y: c = c + 1Ifi

'Вверхi = X To X - 3 Step -1i < 0 Then GoTo 102Num = 1 ThenS1(i, Y) = 1 Then GoTo 110S1(i, Y) = 0 Or S1(i, Y) = 2 Then GoTo 102S1(i, Y) = 3 Then CX(c) = i: CY(c) = Y: c = c + 1IfNum = 2 ThenS2(i, Y) = 1 Then GoTo 110S2(i, Y) = 0 Or S2(i, Y) = 2 Then GoTo 102S2(i, Y) = 3 Then CX(c) = i: CY(c) = Y: c = c + 1Ifi

'Влевоi = Y To Y - 3 Step -1i < 0 Then GoTo 103Num = 1 ThenS1(X, i) = 1 Then GoTo 110S1(X, i) = 0 Or S1(X, i) = 2 Then GoTo 103S1(X, i) = 3 Then CX(c) = X: CY(c) = i: c = c + 1IfNum = 2 ThenS2(X, i) = 1 Then GoTo 110S2(X, i) = 0 Or S2(X, i) = 2 Then GoTo 103S2(X, i) = 3 Then CX(c) = X: CY(c) = i: c = c + 1Ifi

'Вправоi = Y To Y + 3i > 9 Then GoTo 104Num = 1 ThenS1(X, i) = 1 Then GoTo 110S1(X, i) = 0 Or S1(X, i) = 2 Then GoTo 104S1(X, i) = 3 Then CX(c) = X: CY(c) = i: c = c + 1IfNum = 2 ThenS2(X, i) = 1 Then GoTo 110S2(X, i) = 0 Or S2(X, i) = 2 Then GoTo 104S2(X, i) = 3 Then CX(c) = X: CY(c) = i: c = c + 1Ifi

' Убит= 0x0(10), y0(10)= "Убит" i = 0 To c - 1

'подсчитываем, какой был убит

X1 = CX(i)= CY(i)L = 0 To mx0(L) = X1 Then If y0(L) = Y1 Then GoTo 106L(m) = X1(m) = Y1= m + 1

For j = -1 To 1k = -1 To 1= CX(i) + kX1 < 0 Or X1 > 9 Then GoTo 105= CY(i) + jY1 < 0 Or Y1 > 9 Then GoTo 105Num = 1 Then If S1(X1, Y1) = 0 Then S1(X1, Y1) = 2: V1(X1, Y1) = 2Num = 2 Then If S2(X1, Y1) = 0 Then S2(X1, Y1) = 2: V2(X1, Y1) = 2

Next kjii = 0 To mx0(i) = XPos Then If y0(i) = YPos Then GoTo 107i= m + 1

ShipL = Str(m)

'Ранен= "Ранен"SubOpenVSea(Num As Byte)Num = 1 Theni = 0 To 9j = 0 To 9(j, i) = S1(j, i)jiSubIfi = 0 To 9j = 0 To 9(j, i) = S2(j, i)jiSubSub Strike(Num As Byte) '- Выбирает ячейку на поле Num для "огня" по ней.

'На выходе выдаёт переменные StrX и StrY, которые используются

'в качестве X и Y для "выстрела" (Fire (Num, StrX, StrY)), а

'также увеличивает переменную Moves на 1 за каждый раз.

500 If Num < 1 Or Num > 2 Then GoTo 99

'Делаем виртуальный оттиск текущего открытого поля, дальше работаем с ним

Dim S0(9, 9) As ByteNum = 1 Theni = 0 To 9:j = 0 To 9:

S0(i, j) = V1(i, j):j:

Next iIfNum = 2 Theni = 0 To 9:j = 0 To 9:

S0(i, j) = V2(i, j):j:

Next i

End If

'Проверяем, есть ли повреждённые

cnt = 0i = 0 To 9j = 0 To 9S0(j, i) < 2 Then cnt = cnt + 1jicnt = 0 Then Err = True: ErrName = "Ни одного простреленного поля": Exit Subi = 0 To 9j = 0 To 9S0(j, i) = 3 Then X = j: Y = i: GoSub 120ji

'Если нет:110

'Сложность (если уровень > 3) :)

If Slozhnost > 3 Then

If Slozhnost = 4 Then skv = 150: If Moves < 30 Then GoTo 100Slozhnost = 5 Then skv = 300: If Moves < 15 Then GoTo 100Slozhnost = 6 Then skv = 500: If Moves < 10 Then GoTo 100Slozhnost = 7 Then skv = 600: If Moves < 5 Then GoTo 100Slozhnost = 8 Then skv = 700Slozhnost = 9 Then skv = 850v = Int(Rnd * 1000)v = Int(v / skv)v <> 1 Then GoTo 100i = 1 To 50110Num = 1 Then If S1(X, Y) = 1 Then GoTo 100Num = 2 Then If S2(X, Y) = 1 Then GoTo 100 i

End If

'Пробуем стрелять рядом с уже простреленными местами (если уровень > 0)

If Slozhnost > 0 Theni = 0 To (Slozhnost * 2)110X > 0 Then If Y > 0 Then If S0(X - 1, Y - 1) = 1 Then GoTo 100X > 0 Then If Y > 0 Then If S0(X - 1, Y - 1) = 3 Then GoTo 100X < 9 Then If Y < 9 Then If S0(X + 1, Y + 1) = 1 Then GoTo 100X < 9 Then If Y < 9 Then If S0(X + 1, Y + 1) = 3 Then GoTo 100X > 0 Then If Y < 9 Then If S0(X - 1, Y + 1) = 1 Then GoTo 100X > 0 Then If Y < 9 Then If S0(X - 1, Y + 1) = 3 Then GoTo 100X < 9 Then If Y > 0 Then If S0(X + 1, Y - 1) = 1 Then GoTo 100X < 9 Then If Y > 0 Then If S0(X + 1, Y - 1) = 3 Then GoTo 100 i

End If

'Стреляем по координате

If S0(X, Y) > 1 Then GoTo 500= Moves + 1= X= Y Sub

'Случайным образом выбираем координаты для выстрела

Randomize= Int(Rnd * 10)= Int(Rnd * 10)

'Проверяем, стреляли ли мы уже туда

If S0(X, Y) = 2 Or S0(X, Y) = 4 Then GoTo 110

'Проверяем смежные с повреждённым сектором места

m = 0mx(4) As Byte, my(4) As Byte= 0

'ВверхX > 0 Then= X - 1= YS0(X1, Y1) = 3 Then conf = 1conf <> 2 Then If S0(X1, Y1) = 0 Or S0(X1, Y1) = 1 Then m = m + 1: mx(m) = X1: my(m) = Y1If

'ВнизX < 9 Then= X + 1= YS0(X1, Y1) = 3 Then conf = 1conf <> 2 Then If S0(X1, Y1) = 0 Or S0(X1, Y1) = 1 Then m = m + 1: mx(m) = X1: my(m) = Y1If

'ВлевоY > 0 Then= X= Y - 1S0(X1, Y1) = 3 Then conf = 2conf <> 1 Then If S0(X1, Y1) = 0 Or S0(X1, Y1) = 1 Then m = m + 1: mx(m) = X1: my(m) = Y1If

'ВправоY < 9 Then= X= Y + 1S0(X1, Y1) = 3 Then conf = 2conf <> 1 Then If S0(X1, Y1) = 0 Or S0(X1, Y1) = 1 Then m = m + 1: mx(m) = X1: my(m) = Y1If

'Определение точкиm < 1 Then GoTo 130conf <> 0 Then If m < 1 Then GoTo 130= Int(Rnd * 100)= 0k = 1 To m= n + 1n > m Then n = 1kconf = 2 Then If mx(n) <> X Then GoTo 130conf = 1 Then If my(n) <> Y Then GoTo 130

X = mx(n)= my(n)100

130 Return

'Ошибка

Err = True

ErrName = "Неправильный НОМЕР (должно быть 1 или 2)"

End Sub

Sub CalcShipsLeft() - Подсчитывает, сколько "неубитых" сегментов кораблей есть на поле 1 и поле 2, и выдаёт на выходе соответствующие переменные: P1Left и P2Left.

P1Left = 0Left = 0i = 0 To 9j = 0 To 9S1(j, i) = 1 Then P1Left = P1Left + 1S2(j, i) = 1 Then P2Left = P2Left + 1jiSub ClearSea(Num As Byte) '- Полностью стирает данные об "открытых" местах на поле Num.

For i = 0 To 9j = 0 To 9Num = 1 Then V1(j, i) = 0Num = 2 Then V2(j, i) = 0jiSubSub


Заключение


В данном курсовом проекте была рассмотрена теория и практика создания компьютерных игр в целом на примере игры «Морской бой».

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

Используя среду программирования Visual Basic 6.0. разработано Windows-приложение компьютерной игры «Морской бой», которое является законченной программой и может использоваться для игры.

В работе был дан теоретический обзор исследуемой задачи; разработана блок-схема алгоритма; описана программа; продемонстрирован внешний вид программы.


Содержание проекта Введение. Теоретическая часть Игры и искусственный интеллект. Разработка приложения Общая блок-схема программы Описание прогр

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2019 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ