- Saved searches
- Use saved searches to filter your results more quickly
- KrasovskihIA/SeaBattleGame
- Name already in use
- Sign In Required
- Launching GitHub Desktop
- Launching GitHub Desktop
- Launching Xcode
- Launching Visual Studio Code
- Latest commit
- Git stats
- Files
- README.md
- Saved searches
- Use saved searches to filter your results more quickly
- maxim-shvandt/Sea_battle_python
- Name already in use
- Sign In Required
- Launching GitHub Desktop
- Launching GitHub Desktop
- Launching Xcode
- Launching Visual Studio Code
- Latest commit
- Git stats
- Files
- README.md
- About
Saved searches
Use saved searches to filter your results more quickly
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.
The game Sea Battle in Python
KrasovskihIA/SeaBattleGame
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Sign In Required
Please sign in to use Codespaces.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching Xcode
If nothing happens, download Xcode and try again.
Launching Visual Studio Code
Your codespace will open once ready.
There was a problem preparing your codespace, please try again.
Latest commit
Git stats
Files
Failed to load latest commit information.
README.md
Игра «Морской бой» на Python
Каждый игрок у себя на бумаге рисует игровое поле 10 х 10 клеток и расставляет на нем десять кораблей: однопалубных — 4; двухпалубных — 3; трехпалубных — 2; четырехпалубный — 1. Корабли расставляются случайным образом, но так, чтобы не выходили за пределы игрового поля и не соприкасались друг с другом (в том числе и по диагонали).
Затем, игроки по очереди называют клетки, куда производят выстрелы. И отмечают эти выстрелы на другом таком же поле в 10 х 10 клеток, которое представляет поле соперника. Соперник при этом должен честно отвечать: «промах», если ни один корабль не был задет и «попал», если произошло попадание. Выигрывает тот игрок, который первым поразит все корабли соперника.
Но это была игра из глубокого прошлого. Теперь же, в компьютерную эру, корабли на игровом поле могут перемещаться в направлении своей ориентации на одну клетку после каждого хода соперника, если в них не было ни одного попадания.
Итак, лично вам поручается сделать важный фрагмент этой игры — расстановку и управление кораблями в этой игре. А само задание звучит так.
В программе необходимо объявить два класса:
Ship — для представления кораблей; GamePole — для описания игрового поля.
Класс Ship Класс Ship должен описывать корабли набором следующих параметров:
x, y — координаты начала расположения корабля (целые числа); length — длина корабля (число палуб: целое значение: 1, 2, 3 или 4); tp — ориентация корабля (1 — горизонтальная; 2 — вертикальная).
По умолчанию (если не указывается) параметр tp = 1, а координаты x, y равны None.
В каждом объекте класса Ship должны формироваться следующие локальные атрибуты:
_x, _y — координаты корабля (целые значения в диапазоне [0; size), где size — размер игрового поля);
_length — длина корабля (число палуб);
_is_move — возможно ли перемещение корабля (изначально равно True);
_cells — изначально список длиной length, состоящий из единиц (например, при length=3, _cells = [1, 1, 1]).
Список _cells будет сигнализировать о попадании соперником в какую-либо палубу корабля. Если стоит 1, то попадания не было, а если стоит значение 2, то произошло попадание в соответствующую палубу.
При попадании в корабль (хотя бы одну его палубу), флаг _is_move устанавливается в False и перемещение корабля по игровому полю прекращается.
В самом классе Ship должны быть реализованы следующие методы (конечно, возможны и другие, дополнительные):
set_start_coords(x, y) — установка начальных координат (запись значений в локальные атрибуты _x, _y);
get_start_coords() — получение начальных координат корабля в виде кортежа x, y;
move(go) — перемещение корабля в направлении его ориентации на go клеток (go = 1 — движение в одну сторону на клетку; go = -1 — движение в другую сторону на одну клетку); движение возможно только если флаг _is_move = True;
is_collide(ship) — проверка на столкновение с другим кораблем ship (столкновением считается, если другой корабль или пересекается с текущим или просто соприкасается, в том числе и по диагонали); метод возвращает True, если столкновение есть и False — в противном случае;
is_out_pole(size) — проверка на выход корабля за пределы игрового поля (size — размер игрового поля, обычно, size = 10); возвращается булево значение True, если корабль вышел из игрового поля и False — в противном случае;
Следующий класс GamePole должен обеспечивать работу с игровым полем. Объекты этого класса создаются командой:
pole = GamePole(size) где size — размеры игрового поля (обычно, size = 10).
В каждом объекте этого класса должны формироваться локальные атрибуты:
_size — размер игрового поля (целое положительное число);
_ships — список из кораблей (объектов класса Ship); изначально пустой список.
В самом классе GamePole должны быть реализованы следующие методы (возможны и другие, дополнительные методы):
init() — начальная инициализация игрового поля; здесь создается список из кораблей (объектов класса Ship): однопалубных — 4; двухпалубных — 3; трехпалубных — 2; четырехпалубный — 1 (ориентация этих кораблей должна быть случайной).
Корабли формируются в коллекции _ships следующим образом: однопалубных — 4; двухпалубных — 3; трехпалубных — 2; четырехпалубный — 1. Ориентация этих кораблей должна быть случайной. Для этого можно воспользоваться функцией randint
Начальные координаты x, y не расставленных кораблей равны None.
После этого, выполняется их расстановка на игровом поле со случайными координатами так, чтобы корабли не пересекались между собой.
get_ships() — возвращает коллекцию _ships;
move_ships() — перемещает каждый корабль из коллекции _ships на одну клетку (случайным образом вперед или назад) в направлении ориентации корабля; если перемещение в выбранную сторону невозможно (другой корабль или пределы игрового поля), то попытаться переместиться в противоположную сторону, иначе (если перемещения невозможны), оставаться на месте;
show() — отображение игрового поля в консоли (корабли должны отображаться значениями из коллекции _cells каждого корабля, вода — значением 0);
get_pole() — получение текущего игрового поля в виде двумерного (вложенного) кортежа размерами size x size элементов.
В программе требуется только объявить классы Ship и GamePole с соответствующим функционалом. На экран выводить ничего не нужно.
Источник
Saved searches
Use saved searches to filter your results more quickly
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.
Python project of the «Sea battle» game, using sockets. Uni practice 2017.
maxim-shvandt/Sea_battle_python
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Sign In Required
Please sign in to use Codespaces.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching Xcode
If nothing happens, download Xcode and try again.
Launching Visual Studio Code
Your codespace will open once ready.
There was a problem preparing your codespace, please try again.
Latest commit
Git stats
Files
Failed to load latest commit information.
README.md
Python project of the «Sea battle» game, using sockets. Uni practice 2017.
Проект программы «Морской бой»
Общее описание работы игры
- Игрок запускает у себя программу, компьютер автоматически рандомно располагает корабли на своем поле.
- Игрок начинает расставлять свои корабли на своем поле. Расстановка происходит путем выбора корабля из радиогруппы ( 1-, 2-, 3-, 4- и 5-трубный корабль ). Горизонтальное или вертикальное расположение также контролируется радиоргруппой, корабль вращается вокруг своего левого конца. Происходит контроль, чтобы корабль не вышел за пределы поля.
- После расстановки игрок жмет на кнопку «BATTLE!» — это сигнал программе, что все готово к игре.
- Игрок выбирает клетку на поле противника ( компьютера ) и жмет нопку «огонь». При нажатии происходит проверка программой, «принадлежит» ли данная клетка какому то кораблю. Если да, то отмечается попадание и клетка окрашивается в красный цвет. Иначе цвет синий ( промах ).
- Когда один из игроков совершил попадания по всем клеткам на которых были корабли, он — победил и игра завершена.
Основные элементы программы и этапы разработки
- Реализация механизма игры человекас компёютером — противником игрока является компёютер, который рандомно расставляет корабли на своем поле. Реализация механизма расстановки игроком кораблей на своем поле.
- Создания GUI — форма, содержащая два поля — игрока и противника, радиогруппу для выбора кораблей и их расположения, основные кнопки управления.
- Создания классов, соотв. кораблям, класс «поле» — для себя и поля противника, «соединение» GUI с программой, тестирование.
- class CShip — тип определяется размером( кол-вом труб ): Patrol = CShip( 1 ), Kruiser = CShip( 3 ). Каждый объект содержит в себе координаты клеток, на которых находиться. Содержит счетчик попаданий попаданий по себе. Имеет метод, при последнем попадание который шлет сигнал программе, что кораблю потоплен. При каждом выстреле происходит сверение координат каждого корабля с координатами выстрела.
- class CField. Количество объектов — 2. «Свое» плоле и поле противника. Содержат матрицу, на которой выполняэться «бой». Также содержат список кораблей, историю попаданий,
About
Python project of the «Sea battle» game, using sockets. Uni practice 2017.
Источник