Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.54/67: Рейтинг темы: голосов - 67, средняя оценка - 4.54
3 / 3 / 0
Регистрация: 10.02.2009
Сообщений: 38

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

03.05.2009, 20:18. Показов 14053. Ответов 56
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Решил написать игру чтоб опыта набраться. Вот возникла проблема: в верху формы расположены 4 кнопки(4вида кораблей) и ниже расположено поле. каким способом можно размещать на таблице корабли?в смысле какой код,чтобы нажав на кнопку можно было переместить стрелочкой корабль на поле?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.05.2009, 20:18
Ответы с готовыми решениями:

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

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

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

56
3 / 3 / 0
Регистрация: 10.02.2009
Сообщений: 38
18.06.2009, 19:23  [ТС]
Студворк — интернет-сервис помощи студентам
в с++ не разбираюсь, в C# бы подсказал
0
3 / 3 / 0
Регистрация: 10.02.2009
Сообщений: 38
18.06.2009, 19:47  [ТС]
Вот тебе моя функция)) попробуй только разобраться.
ЗЫ я там использовал глобальные функции, их в текст не вложил
Вложения
Тип файла: rar EnemyShot.rar (2.1 Кб, 74 просмотров)
1
70 / 69 / 10
Регистрация: 14.06.2009
Сообщений: 310
Записей в блоге: 1
19.06.2009, 16:28
И все-таки может кто помочь заставить свою функцию рисовать прямоугольник? или через такие функции можно только числовые значения передавать?
Visual C++

подробнее в предыдущем моем посте

alexeev, если время будет, можешь на C# написать функцию, которая принимает 2 координаты, и рисует по ним rectangle
именно свою функцию а не pictureBox2_Paint. Возможно такое вообще?)
0
3 / 3 / 0
Регистрация: 10.02.2009
Сообщений: 38
19.06.2009, 16:51  [ТС]
Цитата Сообщение от EatingPeopleIsFun Посмотреть сообщение
alexeev, если время будет, можешь на C# написать функцию, которая принимает 2 координаты, и рисует по ним rectangle
именно свою функцию а не pictureBox2_Paint. Возможно такое вообще?)
у меня несколько функций, рисующих корабли:
при расстановке дружественных кораблей,
при авторасстановке вражеских кораблей(тут они рисуются только в случае проигрыша машины, но в массив Rectangle[] заносятся)
при стрельбе машиной.
какую именно функцию ты не можешь написать?
0
70 / 69 / 10
Регистрация: 14.06.2009
Сообщений: 310
Записей в блоге: 1
20.06.2009, 17:51
создал кнопку "Новая игра" при нажатии на нее:
-создается матрица 10х10,
-вызывается функция, расставляет в матрице корабли, получается что-то вроде
2 -1 1 -1 0 0 0 0 0 0
2 -1 -1 -1 0 -1 -1 -1 -1 0
-1 -1 -1 -1 -1 -1 2 2 -1 0
1 -1 2 2 -1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 0 -1 3 -1
0 -1 3 3 3 -1 -1 -1 3 -1
0 -1 -1 -1 -1 -1 1 -1 3 -1
0 -1 -1 -1 0 -1 -1 -1 -1 -1
0 -1 1 -1 -1 -1 -1 -1 -1 -1
0 -1 -1 -1 -1 4 4 4 4 -1

дальше хочу сделать функцию которая бы мне нарисовала rectangl'ы на pictureBox'е, соответств. этой матрице . Но не могу на ней оформить правильно DrawRectangle();
вот вроде всё)

Добавлено через 13 часов 44 минуты 40 секунд
alexeev, напиши пжл функцию, которая будет просто тупо рисовать 1 прямоугольник размером 20 на 20, в координатах 0,0 черным цветом.
чето я вообще запутался)

Добавлено через 4 часа 11 минут 0 секунд
и не при загрузке формы,а допустим при нажатии на кнопку "button1".
0
3 / 3 / 0
Регистрация: 10.02.2009
Сообщений: 38
20.06.2009, 22:07  [ТС]
Цитата Сообщение от EatingPeopleIsFun Посмотреть сообщение
создал кнопку "Новая игра" при нажатии на нее:
-создается матрица 10х10,
-вызывается функция, расставляет в матрице корабли, получается что-то вроде
2 -1 1 -1 0 0 0 0 0 0
2 -1 -1 -1 0 -1 -1 -1 -1 0
-1 -1 -1 -1 -1 -1 2 2 -1 0
1 -1 2 2 -1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 0 -1 3 -1
0 -1 3 3 3 -1 -1 -1 3 -1
0 -1 -1 -1 -1 -1 1 -1 3 -1
0 -1 -1 -1 0 -1 -1 -1 -1 -1
0 -1 1 -1 -1 -1 -1 -1 -1 -1
0 -1 -1 -1 -1 4 4 4 4 -1
Тут все верно - у меня тоже такая функция, рендумом расставляющая корабли(если ты конечно проверяешь, не соприкасаются ли корабли).

Цитата Сообщение от EatingPeopleIsFun Посмотреть сообщение
alexeev, напиши пжл функцию, которая будет просто тупо рисовать 1 прямоугольник размером 20 на 20, в координатах 0,0 черным цветом.
чето я вообще запутался)
Вот ты заносишь к примеру свой однопалубный корабль в Rectangle[].
C#
1
2
3
ExtForm[count] = new Rectangle(x * 20, y * 20, 20, 20);
//x,y - Random, вот и заносишь в массив такой прямоугольник 20х20.
count++;//инкремент счетчика
массив готов. Можешь вызвать после этого PictureBox1.Invalidate();
соответственно ты должен в обработчике событий PictureBox1_Handler вызвать
C#
1
grfx.FillRectangle(Brushes.Black, ExtForm);
0
70 / 69 / 10
Регистрация: 14.06.2009
Сообщений: 310
Записей в блоге: 1
20.06.2009, 23:13
у меня это получится примерно так?

C++
1
2
3
4
void Paint_Ship(){   
  int x=1;int y=1;
      System::Drawing::Rectangle^ ExtForm = gcnew Rectangle(x*20,y*20,20,20);
      pictureBox1->Invalidate(); }
а в событии pictureBox1_Paint
указать
C++
1
 e->Graphics->FillRectangle(Brushes::White,ExtForm);
так? если да, то пишет что ExtForm необъявленная переменная.
или я чего то не понял? pictureBox1_Handler что -то другое?

Добавлено через 29 минут 59 секунд
кроме тебя тут похоже никого не осталось больше)
0
3 / 3 / 0
Регистрация: 10.02.2009
Сообщений: 38
21.06.2009, 15:43  [ТС]
Сделай ExtForm глобальной
0
3 / 3 / 0
Регистрация: 10.02.2009
Сообщений: 38
23.06.2009, 16:13  [ТС]
Подскажите, как использовать задержку? к примеру функция delay(int seconds), которую можно было бы вставлять в любую функцию
0
1923 / 428 / 41
Регистрация: 12.07.2007
Сообщений: 2,062
24.06.2009, 02:42
System.Threading.Thread.Sleep(Int32)
1
70 / 69 / 10
Регистрация: 14.06.2009
Сообщений: 310
Записей в блоге: 1
24.06.2009, 15:55
но она немножко странно работает
задерживает не в том месте где поставил
0
70 / 69 / 10
Регистрация: 14.06.2009
Сообщений: 310
Записей в блоге: 1
24.06.2009, 16:09
иногда)

Действительно на C# писать в десятки раз быстрее чем на C++, по крайней мере в данном случае, вот приложил, то что получилось.

-Компьютер без интеллекта, стреляет рандомно).
-Корабли расставляются рандомно (так по заданию)

-Столкнулся с проблемой, думаю над тем как обрисовывать точками подбитые корабли противника, однопалубники, понятно, а как остальные? примерно понял, но получается очень уж объемно, подскажите алгоритм?)
Вложения
Тип файла: rar Морской_бой.rar (67.2 Кб, 121 просмотров)
0
3 / 3 / 0
Регистрация: 10.02.2009
Сообщений: 38
24.06.2009, 22:59  [ТС]
Цитата Сообщение от EatingPeopleIsFun Посмотреть сообщение
-Столкнулся с проблемой, думаю над тем как обрисовывать точками подбитые корабли противника, однопалубники, понятно, а как остальные? примерно понял, но получается очень уж объемно, подскажите алгоритм?)
у тебя должна быть проверка, убил/подбил корабль. далее если убил, то в цикле вокруг него обрисовываешь поля
0
70 / 69 / 10
Регистрация: 14.06.2009
Сообщений: 310
Записей в блоге: 1
25.06.2009, 03:10
немножко не так сделал, сделал проверку матрицы на наличие "5" - подбитых кораблей, если "5". обрисовать вокруг. и там корректировочки небольшие) всё работает) попозже сделаю главное меню и т.п., выложу готовое.
0
3 / 3 / 0
Регистрация: 10.02.2009
Сообщений: 38
28.06.2009, 21:35  [ТС]
вот какая проблем: попадает комп в мой корабль, рисую на поле попадание(к примеру), далее PictureBox1.Invalidate(), далее Thread.Stop(1000). И вот что получается - сначала выполняется задержка, а уж потом обновляется форма! как выйти из положения?
0
1923 / 428 / 41
Регистрация: 12.07.2007
Сообщений: 2,062
29.06.2009, 02:27
Вставте между ними Application.DoEvents()
1
3 / 3 / 0
Регистрация: 10.02.2009
Сообщений: 38
02.07.2009, 09:39  [ТС]
Выложил новую версию игры в "бета тестировании". Жду ваших отзывов
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.07.2009, 09:39

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

Морской Бой
Вопрос в том как сделать меню какоенибудь чтоб выбор в игре был пример 1-палубные и двух палобные там две три чтоб ставить можно было +...

Морской бой
Здраствуйте. Простите пожалуйста, немогли бы вы мне помочь в поиске компонента C# для реализации поля в морском бое. Никак не могу найти...

Морской бой
Ребят, а как написать код, чтоб корабли в притык нельзя было ставить?! Зарание спасибо! вот мой код(недоделаный): using System; using...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
57
Ответ Создать тему
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru