0 / 0 / 0
Регистрация: 25.12.2020
Сообщений: 6

Морской бой

10.03.2022, 16:51. Показов 1775. Ответов 24

Студворк — интернет-сервис помощи студентам
Пишу расстановку кораблей для морского боя в рандомном порядке. И если с однопалубными кораблями все понятно, то вот с двупалобным и далее не совсем. Подскажите как добавить палубу к кораблю(число к числу в массиве). Код ниже

C++
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#include <vector>
#include <iostream>
#include<string>
#include <algorithm>
using namespace std;
class ships
{
public:
    int trpd_boat = 1;
    int destroyers = 2;
    int cruisers = 3;
    int battleship = 4;
   
};
class water : public ships
{
public:
    
    void filling()
    {
        int s = 0;
        int Pole[10][10] = {{ 0,0,0,0,0,0,0,0,0,0 }, { 0,0,0,0,0,0,0,0,0,0 }};
        int random[2] = { 1,-1 };
        int r = random[rand() % 2];
        srand(time(NULL));
        for (int i = 0; i < 2; i++)
        {
            for (int j = 0; j < 2; j++) 
            {
                Pole[rand() % 10][rand() % 10] = trpd_boat;                                        
            }
            cout << endl;
        }
        for (int i = 0; i < 2; i++) 
        {
            for (int j = 0; j < 3; j++)
            {
                Pole[rand() % 10][rand() % 10] = destroyers;                  
        } 
        
        for (int i = 0; i < 9; i++) 
        {
            for (int j = 0; j < 9; j++) 
            {
                if (Pole[i][j] == 2 && s<3)
                {
                    Pole[i][j+1] = destroyers;
                    s++;
                }
                else
                { 
                    s = 0;
                }
 
            }
            }
        }
        for (int i = 0; i < 1; i++)
        {
            for (int j = 0; j < 2; j++)
            {
                Pole[rand() % 10][rand() % 10] = cruisers;
            }
        }
        for (int i = 0; i < 1; i++)
        {
            for (int j = 0; j < 1; j++)
            {
                Pole[rand() % 10][rand() % 10] = battleship;
            }
        }
        for (int i = 0; i < 10; i++) {
            for (int j = 0; j < 10; j++) {
                cout << Pole[i][j] << " ";
            }
            cout << endl;
        }
    }
 
};
int main()
{
    
    water water;
    water.filling();
   
    
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.03.2022, 16:51
Ответы с готовыми решениями:

Морской Бой
прошу в помощи написания этой игры ,спасибо

Морской бой
Вопрос.Делаю морской бой на с++.Какие должны быть классы ,для реализации? Можете практически без пояснений(чуть-чуть о функциях).Главное...

Морской бой
Входные данные двумерный массив 10х10, заполненный нолями и единицами, где 0-пустая клетка, а 1-занятая, найти наиболее длинную линию из...

24
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,042
Записей в блоге: 1
11.03.2022, 22:37
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от SmallEvil Посмотреть сообщение
сделать массив из пустых клеток, перемешать их, и оттуда брать их для попытки расстановок кораблей
В этом коде это почти есть, после 50-ти попыток.
Только без отсеивания занятых.
Там изначальные требования были немного необычные, поэтому так.
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
11.03.2022, 22:39
alexu_007, по твоим скринам, ощущение, что не рандомно расставляются корабли, а просто по очереди, начиная с верхнего левого угла. (или просто скрин такой )
0
737 / 704 / 110
Регистрация: 29.05.2015
Сообщений: 4,341
11.03.2022, 22:48
Цитата Сообщение от SmallEvil Посмотреть сообщение
поделись своим алгоритмом расстановки, ТСу точно будет интересно, да и мне уже тоже
Пжалста, но у меня корабли "кривые". Вот код и неск. результатов работы этого кода:

C++ (Qt)
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
// установка кораблей компьютером
// ------------------------------
void Widget::set_pole_comp()
{
    int x, y, x1, y1, k;
    int cx, cx_try;
 
 
met_10:
 
    for (int i = 0; i < VHSIZE; i++)
        for (int j = 0; j < VHSIZE; j++)
             pole_comp_2[i][j] = 0;
 
    // установка:
    // 1х5, 2х4, 3х3, 4х2, 5х1
    for(int i = 6; i > 0; i--)
    {
        k = 6 - i;
 
        // установка одного корабля
        for(int j = 0; j < k; j++)
        {
            // случайные координаты 1-й палубы
            x = rand() % VHSIZE;
            y = rand() % VHSIZE;
 
            cx = i; cx_try = 0;
 
            while(cx)
            {
                if(++cx_try > 300) goto met_10;
 
                // случайные координаты продолжения установки
                x1 = 1 - rand() % 3;
                y1 = 1 - rand() % 3;
 
                // угловые клетки игнорируются
                if(x1 && y1) continue;
 
                x1 += x; y1 += y;
 
                // выход за пределы поля
                if(x1 < 0 || x1 == VHSIZE) continue;
                if(y1 < 0 || y1 == VHSIZE) continue;
 
                // здесь защитное поле
                if(pole_comp_2[x1][y1] == 5) continue;
 
                // возврат на уже установленную палубу
                if(pole_comp_2[x1][y1] == 1) cx++;
 
                // установка новой палубы
                pole_comp_2[x1][y1] = 1;
 
                x = x1; y = y1; cx--;
            }
 
        // защитное поле вокруг установленного корабля
        z_pole_comp(pole_comp_2);
        }
    }
 
 
    // удаление защитного поля
    for (int i = 0; i < VHSIZE; i++)
        for (int j = 0; j < VHSIZE; j++)
        {
             if(pole_comp_2[i][j] == 5) pole_comp_2[i][j] = 0;
        }
 
}
Сразу поясню насчёт goto: если его убрать совсем, возможны зависания (см. выше). Если увеличить значение cx_try (сделать вызывания goto совсем редкими), то корабли начинают расставляться по полю более равномерно, что не есть гуд - желательна непредсказуемость.
Миниатюры
Морской бой   Морской бой   Морской бой  

Морской бой   Морской бой  
0
737 / 704 / 110
Регистрация: 29.05.2015
Сообщений: 4,341
11.03.2022, 22:50
Цитата Сообщение от SmallEvil Посмотреть сообщение
alexu_007, по твоим скринам, ощущение, что не рандомно расставляются корабли, а просто по очереди, начиная с верхнего левого угла. (или просто скрин такой )
Скрин, который вы имеете ввиду - это поле человека, и я расставил корабли руками. Это рэндом моей головы...
0
737 / 704 / 110
Регистрация: 29.05.2015
Сообщений: 4,341
11.03.2022, 23:21
Сам морской бой, если кто захочет протестировать.

Кнопка "установка" - установка кораблей человеком.
Поле человека - левое.
Корабли: один 5-ти палубный, 2 - 4х, 3 - 3х, 4 - 2х, 5 - 1х. Корабли не должны касаться друг друга.
После корректной установки становится активной кнопка "игра".
Первым ходит всегда человек.
При попадании ход остаётся у игрока. При промахе ход переходит сопернику.
Вокруг убитых кораблей автоматически создаётся защитное поле. Выстрел туда невозможен.
Ошибочные ходы (туда, куда уже был выстрел ранее) не производятся.
При выигрыше одного из соперников игра останавливается, и становится активной кнопка "установка".
При выигрыше компьютера, он показывает свой корабль (корабли), которые не были убиты.
Ехе-шник в папке bin.
Вложения
Тип файла: zip mboy.zip (14.41 Мб, 4 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.03.2022, 23:21

Морской бой
Решил сделать консольный морской бой, но при расстановке кораблей компьютером, поля где должны располагатся корабли компьтера, уплывают....

Морской бой в С
Прошу,что-бы он был максимально упрощенным .А то я ток начинающий программист)

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

Морской бой C++
имеется следующий класс Text,в котором два метода drawText(...) который отвечает за прорисовку текста на экране i renderingText() - за...

Морской бой
Есть поле 10 на 10, есть определенной расположение кораблей. Необходимо отобразить/напечатать имеющееся поле с кораблями


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

Или воспользуйтесь поиском по форуму:
25
Ответ Создать тему
Опции темы

Новые блоги и статьи
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru