Морской бой windows forms

Игра морской бой — как расставлять корабли

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

Игра морской бой: никак не придумаю как лучше реализовать корабли в игре
Пишу игру "Морской бой" на c# и никак не решу как лучше реализовать в программе корабли.

Морской Бой — как организовать поле и расстановку кораблей?
Добрый времени суток, необходимо создать игру "Морской Бой", извините за то, что вопрос возможно.

Морской бой — Как сделать единый обработчик нажатий на кнопки
Сам что-то не придумал.

Морской бой
Вот решил написать морской бой. Как всё это сделать примерно понимаю, но вот хочу посоветоваться с.

Хочу на форме нарисовать таблицу (DrawLine или что лучше подскажите?), сделать на таблице поля привязки(как их сделать тоже не знаю). Просто знаний у меня маловато,хочу набраться опыта.

Эксперт CАвтор FAQ

Для начала можно не заморачиваться и делать минимально просто
В момент расстановки нужно просто нажимать мышкой на клетки поля. Если нажал левой мышкой, то считаем, что корабль ставится вертикально, а точка, куда нажали — это верхняя часть корабля. Если нажимаем правой мышкой — то горизонтально. Корабли ставятся в принудительном порядке — сначала 4-хпалубные, потом 3-х и т.п. При сбоку этом надо отображать картинку, какой тип корабля сейчас ставится.

Этот вариант для человека неудобен, но он тем не менее прост в реализации. А потом спокойно себе пиши логику игры. КОгда всё будет готово — можешь снова вернуться к технике расстановки кораблей. Когда ты миллион раз будешь расставлять их неудобным способом, у тебя у самогО в голове появится куча идей, как это делать более удобно

Эксперт CАвтор FAQ

такой вопрос: как в этой игре создать проверку на правильное размещение кораблей ( они не должны касаться даже углами)?
Можно ли написать простую функцию, вычитающую расстояние между Rectanglами?

Читайте также:  Чем чука отличается от морской капусты салат

Эксперт CАвтор FAQ

М. не надо ничего делать через rectangl’ы

У тебя должно быть две вещи (хз каким словом это правильно назвать):
1. Внутреннее представление игры (допустим, это массив 10 на 10, в элемент которого записан 0, если поле пустое, 1, если эту клетку занимает однопалубный корабль, 2 — если двухпалубный и т.п.). Представление может быть и другиим — ты волен выбирать так, как тебе удобнее делать
2. Пользовательское представление игры. Это то, что видит человек на экране. Всё пользовательское представление рисуется с внутреннего.

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

Теперь, отвечу на твой вопрос. К примеру, ты решил выбрать по внутреннее представление, которое я тебе описал. Допустим уже поставлен один корабль. Значит в твоём массиве уже заполнены элементы, отвечающие за те клетки, на которых находится твой корабль. Теперь человек ставит другой корабль. Перед тем, как «установить» корабль, ты должен во внутреннем представлении пройтись по всем клеткам, на которых будет «стоять» твой новый корабль и убедиться, что клетки не заняты (а так же не заняты соседние клетки). Если проверка обломалась — выдаёшь сообщение об ошибке и просишь поставить корабль по новой. Если проверка прошла — устанавливаешь корабль на доску — отмечаешь поля в своём массиве

Источник

Морской бой с визуальными компонентами

Доброго всем времени суток, уважаемые гуру программирования.
Я начал переделать игру Морской бой с визуальными компонентами из консольного приложения, т.е. сам алгоритм уже есть.
Проблема возникает на этапе создания поля. На данном этапе я создал 2 поле, каждое из которых состоит из 100 объектов PictureBox, т.е. в сумме 200 объектов, что, разумеется, ведет к огромному расширению кода. Само по себе это не было бы большой проблемой, но мне сложно представить, как можно мой алгоритм «привинтить» к данному полю относительно экономно.
Буду очень благодарен всем, кто попытается помочь!
С уважением, Letsifer.

Морской бой
Здравствуйте господа. Мне нужно сделать игру морской бой. Игровое поле- 10×10 Корабли на игровом.

Морской бой
Добрый день, форумчане! Такая проблема, на учебной практике резко с консольного c# перескочили на.

Морской бой
Добрый вечер, можете покидать ссылки на проекты игры Морской Бой любой сложности. Спасибо

Читайте также:  Базы отдыха сахалин у моря

Морской бой
Вопрос решен, можно удалить

А что вас смущает? Ну двести так двести. Для отображения используйте tableLayoutPanel1 — задайте нужное количество строк и столбцов, добавьте в него ваши контролы. Для удобства дальнейшего доступа к контролам сохраните их в отдельном массиве:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
private PictureBox[,] pictureBoxes = new PictureBox[10, 10]; public Form1() { InitializeComponent(); tableLayoutPanel1.ColumnCount = 10; tableLayoutPanel1.RowCount = 10; for (int y = 0; y  10; y++) { for (int x = 0; x  10; x++) { var pictureBox = new PictureBox(); pictureBoxes[y, x] = pictureBox; tableLayoutPanel1.Controls.Add(pictureBox); } } } // Где-то далее в программе pictureBoxes[3, 5].Image = Properties.Resources.image1;

оу-оу-оу, 200 PictureBox’ов. а не слишком ли много? Может проще заранее сделать графические тайлы всех кораблей, а потом просто один раз их нарисовать на единственном PictureBoxе и потом отмечать попадания?

@canopen, в какой место программы надо писать Ваш кусок? И нужно что-то ли еще? Объясните пошагово, пожалуйста. Просто я только начинаю работать в Windows Forms, и еще не имею опыта работы с ней, а практику учебную задали в ней делать. Вставил вот так — выдает 39 ошибок аж.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
#pragma region Windows Form Designer generated code /// /// Обязательный метод для поддержки конструктора - не изменяйте /// содержимое данного метода при помощи редактора кода. ///  void InitializeComponent(void) { this->label_player = (gcnew System::Windows::Forms::Label()); this->label_computer = (gcnew System::Windows::Forms::Label()); this->pole_player = (gcnew System::Windows::Forms::TableLayoutPanel()); this->pole_computer = (gcnew System::Windows::Forms::TableLayoutPanel()); private: PictureBox[,] pictureBoxes = new PictureBox[10, 10]; this->SuspendLayout(); pole_player.ColumnCount = 10; pole_player.RowCount = 10; for (int y = 0; y  10; y++) { for (int x = 0; x  10; x++) { var pictureBox = new PictureBox(); pictureBoxes[y, x] = pictureBox; pole_player.Controls.Add(pictureBox); } }

Источник

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.

Classic «Sea Battle» game on Windows Forms with Enemy bot

malandrii/sea-battle-game-winforms

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

«Sea Battle» on Windows Forms

Classic «Sea Battle» game on Windows Forms with Enemy bot

Go to Releases, choose the latest release and click the «sea-battle.exe» or just click here.

Place ships panel => choose ship size => mouse cursor on the field

image

image

Ships horizontality can be changed

image
image

Ships can be arranged randomly

image

After you’ve placed all the ships choose the enemy settings and press «Start Game»

image

Press on the enemy field button. You and enemy go one by one.
If the text of the button is dot — this cell is clear
If cross — you hit the enemy ship

image

Also status helps with that

image

As you hit an enemy ship — you continue your moves until you miss.

As the enemy ship is dead — all the cells around gets covered

image

image

Meanwhile, enemy-bot is attacking our field

image

Game stops as someone destroys all the enemy ships and you can see where they were located

image

EnemyAttackTransparentDarkShadow

Works the same with any ship (also understands if the cell was already shot and goes the opposite way)
This algorithm is the most effective way to play «Sea Battle» (usually people play the same way)

About

Classic «Sea Battle» game on Windows Forms with Enemy bot

Источник

Оцените статью