Студенческий сайт КФУ - ex ТНУ » Учебный раздел » Учебные файлы »ПРОГРАММИРОВАНИЕ

Разработка игры "Морской бой"

Тип: курсовая работа
Категория: ПРОГРАММИРОВАНИЕ
Скачать
Купить
Описание алгоритма хода ЭВМ в режиме "пользователь-компьютер" в игре "Морской бой". Описание совокупности классов, их полей и методов. Разработка интерфейса и руководства пользователя по проведению игры. Листинг программы, написанной на языке Java.
Краткое сожержание материала:

Размещено на

ВВЕДЕНИЕ

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

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

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

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

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

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

Среди бесчисленного множества компьютерных игр существует, всем нам хорошо известный с детства, “Морской бой”. Эта игра была “придумана” в 1931 году Милтоном Брэдли. Идея пришла во время первой мировой войны, в которой было много морских сражений. Хотя есть данные, что игра существовала в “бумажном” варианте существенно раньше, еще до Первой мировой войны, и истинный автор неизвестен. Ну а теперь существует много компьютерных версий, различающихся в основном лишь по оформлению.

Цель: разработать программу, реализующую игру «Морской бой» в режиме пользователь - компьютер.

Задачей данной курсовой считаю: достичь реализации данной цели наиболее оптимальными методами с использованием основных свойств объектно-ориентированного программирования.

1. Описание алгоритма хода ЭВМ

При создании данного алгоритма я опиралась исключительно на собственный опыт в игре “Морской бой”.

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

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

Для каждого “живого” корабля вычисляется диапазон его повреждений, то есть начальная и конечная клетки из подбитых. Если диапазон не найден, значит, корабль не подбит, следовательно, его не видно на поле и ЭВМ “делает вид”, что не знает, где этот корабль и переходит к следующему. Если же диапазон найден, то возможны два случая.

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

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

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

Если ни одного выстрела не было сделано, следовательно, на поле нет подбитых кораблей. Осуществляется выстрел по случайной клетке, по которой еще не было выстрела.

Во всех случаях метод возвращает результат выстрела, возвращаемый методом shot(int x, int y), который осуществляет выстрел по указанной клетке.

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

2. Описание классов

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

Public class GameFrame extends JFrame - класс, реализующий окно игры, в том числе меню. Это главный класс программы в нем содержится метод main - так называемая точка входа в программу. Именно с этого метода начинается выполнение программы. Класс, реализующий окно игры, в том числе меню.

Данный класс содержит поле private Seabattle game - одно из наиболее важных полей этого класса, является экземпляром класса Seabattle, то есть это и есть сама игра. Остальные поля данного класса отвечают в основном за интерфейс программы.

Public static void main(String[] args) - как говорилось выше, это главный метод класса.

Класс public class Seabattle extends JComponent реализует саму игру "Морской бой".

Поля данного класса:

- private boolean settingShips - поле логического типа, определяющее режим игры. Значение true означает режим расстановки кораблей, значение false - режим боя.

- private boolean gameOver - поле логического типа, определяющее, закончена ли игра (true) или нет (false).

- private Field ownField - экземпляр класса Field (игровое поле), являющийся в данном классе полем игрока.

- private Field enemyField - экземпляр класса Field (игровое поле), являющийся в данном классе вражеским полем.

- private MouseAdapter mouseAdapter - слушатель событий мыши, отлавливающий щелчки мышью по полю и выполняющий нужные действия.

Public Seabattle(int fieldSize) - конструктор, создающий игровое поле определенного размера.

В данном классе описаны следующие методы:

- public boolean allShipsArePlaced()- метод, определяющий, все ли корабли на поле игрока расставлены.

- public void startGame()- метод, который инициирует начало боя.

- public boolean randomizeOwnField()- метод, расставляющий корабли на поле игрока на случайные позиции.

- public boolean randomizeEnemyField() - метод, расставляющий корабли на вражеском поле на случайные позиции.

- public void reset() - метод сброса игры. Очищает поля и устанавливает режим расстановки кораблей.

- public boolean gameIsOver() - метод, возвращающий значение поля gameOver, то есть определяющий, закончена ли игра.

- public void paint(Graphics g) - метод, отвечающий за то, как будет отрисовываться игра.

Класс, реализующий игровое поле - public class Field.

Данный класс имеет следующие поля:

- private int size - размер поля в клетках.

- private boolean[][] shots - массив выстрелов. Если значение shots[i][j] равно true, значит по клетке с координатами (i; j) в данной игре был сделан выстрел.

- private int lastShotX, lastShotY - координаты последнего выстрела по полю.

- private boolean isEnemyField - поле логического типа, определяющее, является ли поле вражеским.

- private final int maxShipSize - константа, определяющая максимально возможную длину корабля.

Public Field(int size, boolean isEnemyField) - конструктор, создающий поле указанного размера. В зависимости от второго параметра поле будет либо вражеским, либо полем игрока.

В данном классе описаны следующие методы:

- public boolean randomize() - метод, расставляющий корабли на поле случайным образом.

- public int addShip(Ship ship) - метод, добавляющий на поле корабль. Возвращает значение типа int: -2, если была попытка разместить корабль слишком близко к другому, -1, если была попытка разместить корабль за пределы поля, 0, если кораблей данного размера слишком много, 1, если размещение успешно.

- public void removeShip(Ship s) - метод, удаляющий указанный корабль с поля.

- public void clearField() - метод, очищающий поле от кораблей и выстрелов.

- public boolean hasShipAt(int x, int y) - метод, определяющий, есть ли корабль на поле по указанным координатам.

Другие файлы:

Разработка программного продукта, реализующего классическую версию настольной игры "Морской бой"
Проектирование игры "Морской бой" путем составления диаграмм UML, IDEF0, DFD, моделирующих требования к программе. Разработка программы с использовани...

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

Разработка компьютерной игры "Морской бой"
Описание правил игры "Морской бой". Особенности современных компьютеров и искусственного интеллекта. Создание общей блок-схемы программы, ее внешний в...

Правила тактической военно-морской игры Джена
Правила проведения военно-морской игры Джена со схемами и рисунками...

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