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

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

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

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

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

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

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

56
 Аватар для Veyron
107 / 107 / 9
Регистрация: 02.06.2009
Сообщений: 578
09.06.2009, 13:20
Студворк — интернет-сервис помощи студентам
Значок для формы : правой кнопкой щелчок по форме, потом properties, затем icon и выбирайте.
Версия - откройте Solution Explorer, там надо по проекту (не по решению!) щелкнуть правой кнопкой мыши, выбрать тож как выше пропертис, и нажать кнопку Assembly Info, и менять инфу о программе как душе угодно. Тут же можно иконку программы сменить.
0
0 / 0 / 0
Регистрация: 10.06.2009
Сообщений: 5
10.06.2009, 00:32
alexeev, не мог бы ты подсказать логику обстрела кораблей компьютером? А то тоже пишу морской бой но на J2ME.
0
3 / 3 / 0
Регистрация: 10.02.2009
Сообщений: 38
10.06.2009, 00:51  [ТС]
Цитата Сообщение от OrionS Посмотреть сообщение
alexeev, не мог бы ты подсказать логику обстрела кораблей компьютером? А то тоже пишу морской бой но на J2ME.
Комп стреляет Random, если попадает и корабль не обводится (т.е. не убил), то продолжает стрелять рендумом, только вокруг уже этого попадания. Если же попадает и опять не обводится, то если попал правее(левее, выше,ниже) этой клетки, то стреляет по соответствующей прямой(горизонталь/вертикаль). Далее аналогично(с 4х палубным) . Везде выполняется проверка выхода за границу поля. Это получилась самая тяжелая часть проги, больше 500 строк.
0
3 / 3 / 0
Регистрация: 10.02.2009
Сообщений: 38
10.06.2009, 01:15  [ТС]
icon когда в properties добавляешь, иконка меняется на самом екзешнике, а прогу открываю, слева от названия стандартная остается.
Такой вопрос, хочу сделать задержку между вражескими выстрелам, как лучше ее сделать? Использовать потоки или может просто сделать "бессмысленные" циклы, повторяющиеся по 10 тыщ раз? думаю что этот вариант не приемлем на маломощьных ПК. Вот обновленная версия проги
Вложения
Тип файла: rar sea-fight.rar (35.9 Кб, 96 просмотров)
0
0 / 0 / 0
Регистрация: 10.06.2009
Сообщений: 5
10.06.2009, 01:54
alexeev, я использовал поток, и приостанавливал его на 600мс.
0
 Аватар для Manifik
8 / 8 / 1
Регистрация: 13.05.2009
Сообщений: 31
10.06.2009, 02:07
SHIPS.rar
0
0 / 0 / 0
Регистрация: 10.06.2009
Сообщений: 5
10.06.2009, 02:27
Как расставить пустые клетки вокруг убитого корабля?
0
3 / 3 / 0
Регистрация: 10.02.2009
Сообщений: 38
10.06.2009, 14:21  [ТС]
если корабль убит(и комп определяет какой именно корабль и как он расположен - горизонтально/вертикально) то помечаешь все поля вокруг корабля, как "промахи" (чтобы туда нельзя было еще раз выстрелить), и рисуешь в этих клетках точки(смотря как ты помечаешь промахи).

Добавлено через 3 минуты 2 секунды
вот с потоками у меня тяжело, не можешь привести пример, как их использовать?
к примеру комп "ранил", вызывается функция Delay(<num_of_msec>)/
хотябы как вызвать эту ф-ю?
0
0 / 0 / 0
Регистрация: 10.06.2009
Сообщений: 5
10.06.2009, 17:46
Я все прорисовывал в канвасе, там же создаю поток:
Thread t = new Thread(this);
t.start();
А дальше когда необходимо просто приостанавливаю:
try{Thread.sleep(msec);}
catch(java.lang.InterruptedException zxz){};

А как ты распознаешь какой корабль убит? Считаешь количество попаданий?

Добавлено через 29 минут 25 секунд
alexeev, а почему ты просто не используешь таймер? Я юзаю поток потому что у меня в мидлете нету таймера.
0
3 / 3 / 0
Регистрация: 10.02.2009
Сообщений: 38
10.06.2009, 18:30  [ТС]
А как ты распознаешь какой корабль убит? Считаешь количество попаданий?
у меня есть внутреннее представление, матрица 10х10. На нем имеются цифры 4(четырехпалубный),3,2,1;0 и (-1) - пустое поле. к примеру если попал в 3х палубный, (поле с цифрой 3) то стреляю рядом еще раз, и так пока не попаду 3 раза. дальше корабль считается убитым и обводится.
0
 Аватар для Veyron
107 / 107 / 9
Регистрация: 02.06.2009
Сообщений: 578
10.06.2009, 18:38
Цитата Сообщение от alexeev Посмотреть сообщение
icon когда в properties добавляешь, иконка меняется на самом екзешнике, а прогу открываю, слева от названия стандартная остается.
Значок у экзешника меняется, если сменить его в пропертях проекта. Чтобы сменить значок только форму - идите в проперти формы (правой кнопкой по форме -> Properties).
0
3 / 3 / 0
Регистрация: 10.02.2009
Сообщений: 38
11.06.2009, 23:19  [ТС]
Дело в том что я создавал форму программно, то есть Form myform=new Form(); и тд. Как программно изменить иконку? Есть процедура Icon, только как ее использовать?
0
 Аватар для Veyron
107 / 107 / 9
Регистрация: 02.06.2009
Сообщений: 578
11.06.2009, 23:36
ааааааа........ сорри, не учел. ну тогда так:

C#
1
2
3
Form myform = new Form();
            System.Drawing.Icon Ic = new Icon("тут_путь_к_вашей_значка");
            myform.Icon = Ic;
1
3 / 3 / 0
Регистрация: 10.02.2009
Сообщений: 38
13.06.2009, 20:49  [ТС]
Я создавал на форме 2 picture boxa ,чертил на них прямоугольники.
Подписи делал в OnPaint, создал 2 массива строк, и выводил их в цикле с помощью DrawString();
1
70 / 69 / 10
Регистрация: 14.06.2009
Сообщений: 310
Записей в блоге: 1
14.06.2009, 02:34
Только начинаю писать морской бой, присоединюсь со своими вопросами, дабы не плодить новых тем. Подскажите какой элемент использовать для создания самих полей 10х10. Подписывать координаты я как понимаю с помощью label?
0
3 / 3 / 0
Регистрация: 10.02.2009
Сообщений: 38
14.06.2009, 10:47  [ТС]
Я создавал на форме 2 picture boxa ,чертил на них прямоугольники.
Подписи делал в OnPaint, создал 2 массива строк, и выводил их в цикле с помощью DrawString();
0
70 / 69 / 10
Регистрация: 14.06.2009
Сообщений: 310
Записей в блоге: 1
17.06.2009, 20:09
Цель: получить координаты курсора мыши при клике на pictureBox1.
visual c++
Создаю событие MouseDown для pictureBox1.
нашел несколько методов для получения координат, но запутался и не могу разобраться с синтаксисом
GetPosition() ?
GetCursorPos() ?
MouseEventArgs::X ? (это свойство)

подскажите как использовать, и вообще в том ли направлении копаю?
0
3 / 3 / 0
Регистрация: 10.02.2009
Сообщений: 38
17.06.2009, 20:59  [ТС]
все правильно. создаешь событие для pBox. как это выглядет на с++ не знаю, вот так на C#
C#
1
2
3
4
5
6
7
pBox2.MouseClick += new MouseEventHandler(MouseClickEnemyBox);
...
static void MouseClickEnemyBox(object objSender, MouseEventArgs mea)    
    {
        if (yourShot == 1 & fight == true & win == -1)
             Shot(mea.X, mea.Y);
    }
а функция shot уже сама высчитывает, куда ты попал.
0
70 / 69 / 10
Регистрация: 14.06.2009
Сообщений: 310
Записей в блоге: 1
18.06.2009, 14:22
здесь ты в функцию Shot передаешь координаты? которые достаешь функцией MouseClickEnemyBox?
а без функций, можно как нибудь достать?)

Добавлено через 37 минут 2 секунды
Цитата Сообщение от EatingPeopleIsFun Посмотреть сообщение
а без функций, можно как нибудь достать?)
Всё, разобрался, бредовый вопрос был)

Добавлено через 16 часов 35 минут 31 секунду
День добрый)
не могу заставить функцию рисовать корабли.
Visual c++

C++
1
2
3
4
5
6
7
8
9
10
11
12
void create_ship(int x,int y) {
// рисует белый rectangle 
    PaintEventArgs^  e;
        Pen^ whitePen = gcnew Pen(Color::White);
        x*=20;y*=20;
    e->Graphics->DrawRectangle( whitePen, x,y,20,20 ); 
    
// выводит сообщ что корабль нарисован в координатах х*20, y*20.
richTextBox1->Text="Create Ship in ["+x.ToString()+"]["+y.ToString()+"]";}
 
private: System::Void Form1_Load(System::Object^  sender, System::EventArgs^  e) {
create_ship(5,5);}
Выдает ошибку:
Object reference not set to an instance of an object.

Может кто помочь в исправлении? Что пропустил?
Если убрать строки 2-6 то функция create_ship работает, выводит текст просто.
0
0 / 0 / 0
Регистрация: 10.06.2009
Сообщений: 5
18.06.2009, 18:03
alexeev, можешь показать код выстрела компьютера? А то я запутался и он не правильно стреляет. 350 строк кода, а где ошибка уже устал искать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.06.2009, 18:03

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Установка нескольких штампов электронной подписи в строго определенных местах файла docx
ВладимирСамохин 19.07.2026
(В!) Работа с Электронной подписью - это неотъемлемая часть современного документооборота. Но что делать, если нужно поставить несколько штампов электронной подписи в строго определенных местах. . .
сукцессия 35. Научная статья о проделанной работе
anaschu 19.07.2026
Написал в формате латекс и пдф
Вангую, что это не пройдёт модерацию, и на неделе я запущу свой сервер.
Hrethgir 19.07.2026
Эта публикация сейчас в песочнице и ждёт приглашения. https:/ / habr. com/ ru/ sandbox/ 295048/ начало и оглавление - Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование. . .
сукцессия 33. открытые вопросы от клауде
anaschu 19.07.2026
"Что накопилось за эту часть А — тринадцать правок, из которых шесть пришли из ваших вопросов и каждая оказалась реальной ошибкой, а не калибровкой: односторонний симбиоз, отсутствующий листопад,. . .
32 сукцессия
anaschu 19.07.2026
сукцессия 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не «подкручивает» сходимость —. . .
сукцессия 31: модель микоризы - это модель ещё нескольких явлений, социальных и экономических
anaschu 18.07.2026
Теория «Всего»: апдейт v1. 1. 2 — 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не. . .
сукцессия 30. Массив проверяющих друг друга моделей
anaschu 18.07.2026
Архитектура сети взаимопроверяющих моделей микоризной сукцессии (v2. 0) Развитие тензорного ОДУ-ядра и создание кросс-платформенного калибровочного полигона Уважаемые коллеги! В продолжение. . .
Грибы - это женщины, деревья - это мужчины. Анти инь янь для союза мужчины и женщины.
anaschu 18.07.2026
ГЛАВНЫЙ НАУЧНО-ФИЛОСОФСКИЙ ВЫВОД: Сексуально-Репродуктивный Капитализм против Государства Моногамии Коллеги, мы вышли на финишную прямую 20-мерного ОДУ-моделирования вековой сукцессии (ветка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru