Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.65/40: Рейтинг темы: голосов - 40, средняя оценка - 4.65
0 / 0 / 0
Регистрация: 10.12.2017
Сообщений: 3

Морской Бой на C++

10.12.2017, 13:32. Показов 8123. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста написать морской бой на C++ ,не сильно замороченный, простенький, можно даже с однопалубными кораблями, просто конец сессии, а я еле успеваю, мне просто нужен функционал игры, чтоб работала исправно и игралось комфортно, а я уж потом сам её доработаю по мелочам, добавлю меню и прочее, ПОЧЕМУ НЕ СТОИТ ЗАМОРАЧИВАТЬСЯ - потому что я всего лишь второй курс и увидев то, чего мы ещё не проходили и вообще нам до этого далеко - преподаватель меня сразу завалит и скажет, что делал не сам, это конечно правда, что делал не сам, но сам я просто не успеваю.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.12.2017, 13:32
Ответы с готовыми решениями:

Морской бой
Здравствуйте.Прошу помочь. Задался целью написать морской бой под консолью. Для начала решил рандомно заполнить поле игрока тремя...

Морской бой
Пытаюсь написать простейший морской бой на основе классов. В ходе работы программы игроки, стреляя по очереди, либо попадают -...

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

7
1 / 1 / 1
Регистрация: 19.09.2017
Сообщений: 20
10.12.2017, 14:38
https://google.gik-team.com/?q... 0%BE%D0%B9
0
9933 / 2936 / 494
Регистрация: 05.10.2013
Сообщений: 7,966
Записей в блоге: 227
10.12.2017, 21:58
Графику можно рисовать в консоли или создать окно на WinAPI. Есть масса разный вариантов.

Например, библиотека SFML, которую можно скачать здесь. Нужно создать консольный проект, к примеру, в среде Visual Studio, подключить в настройках SFML, с помощью которой: создать окно, разлиновать поле линиями, выводить квадраты, который будут обозначать корабли и выводить текст: обозначение координат и какую-нибудь текстовую информацию, а также обрабатывать события мыши. Можно создать папку "Libs" положить в неё SFML (нужны папки: "include" и "lib"). Подключается в настройках так:
$(SolutionDir)\Libs\SFML-2.4.2-windows-vc14\include
$(SolutionDir)\Libs\SFML-2.4.2-windows-vc14\lib\x86
Linker -> Input:
sfml-graphics-d.lib
sfml-main-d.lib
sfml-system-d.lib
sfml-window-d.lib

В документации есть пример, как создать окно: RenderWindow. И так же в документации есть пример, как создать прямоугольник RectangleShape

Проект для VS2015 с подключенной SFML, который рисует квадрат синего цвета, указанного размера, по указанным координатам: DrawingSquareWithSFML.zip

Название: SquareInSFML.png
Просмотров: 300

Размер: 2.0 Кб

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
#include <SFML/Graphics.hpp>
 
int main()
{
    // Declare and create a new render-window
    sf::RenderWindow window(sf::VideoMode(400, 400), "SFML window", sf::Style::Titlebar | sf::Style::Close);
    // Limit the framerate to 60 frames per second (this step is optional)
    window.setFramerateLimit(60);
 
    sf::RectangleShape square;
    square.setSize(sf::Vector2f(50, 50));
    square.setFillColor(sf::Color::Blue);
    square.setPosition(10, 20);
 
    // The main loop - ends as soon as the window is closed
    while (window.isOpen())
    {
        // Event processing
        sf::Event event;
        while (window.pollEvent(event))
        {
            // Request for closing the window
            if (event.type == sf::Event::Closed)
                window.close();
        }
        // Clear the whole window before rendering a new frame
        window.clear();
        // Draw some graphical entities
        window.draw(square);
        // End the current frame and display its contents on screen
        window.display();
    }
 
    return 0;
}
0
0 / 0 / 0
Регистрация: 10.12.2017
Сообщений: 3
12.12.2017, 20:58  [ТС]
У меня сделана работа с бермудой, она очень похожа на на игру Морской Бой, мне нужно просто переделать её именно в морской бой, а то я не успеваю, мне нужно сдать ещё 10 работ, в заранее спасибо
сам код полностью не помещается, по этому залью на файлообменник текстовик с кодом.
КОД:
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
#include <iostream>
#include <ctime>
using namespace std;
#include <stdlib.h>
const int X=9;    const int Y=9; // Ширина и высота игрового поля
short int k=0;
const int max_ship=4; // Количество кораблей
struct tShip { short int x; short int y; bool detected; };
tShip Ship[max_ship]; // Наш флот
char game_space[X][Y];
char cx, cy; //координаты пользователя
void init_game_field(void)
{
    short int i, j;
    for (i = 0; i<X; i++)
        for (j = 0; j<Y; j++)
            game_space[i][j] = '~';
    bool new_number; // Позиция занята?
    srand(0);
    for (i=0; i<max_ship; i++)
    { Ship[i].detected = false;
    do {        // Выбрать случайную позицию
        Ship[i].x = rand() % X;
        Ship[i].y = rand() % Y;
        new_number = true; // Проверить, не занимает ли данную позицию       // один из предыдущих кораблей
for (j=0; j<i; j++)
            if (Ship[j].x== Ship[i].x && Ship[j].y== Ship[i].y)
new_number = false; // Уже один расположен!
    }     while (!new_number); }     // для контроля выведем все корабли
    for (i=0; i<max_ship; i++)
        cout << Ship[i].x+1 << "," << Ship[i].y+1 << " ";
    cout << endl;
}
 
void output_game_field(void)
{ int i, j;
    cout << "   1 2 3 4 5 6 7 8 9" << endl;
    for (j = 0; j<Y; j++)
    { cout << (char)('A' + j) << " ";
    for (i = 0; i<X; i++)
    cout << " " << game_space[i][j];
cout << endl; };
}
short int search_left(short int x, short int y)
{
    short int a;
    x--;
    while (x<X && y >= 0)
    {
        for (a = 0; a<4; a++)
            if (Ship[a].x == x && Ship[a].y == y)
                return 1;
        x--;
    };
    return 0;
}
 
short int search_left_up(short int x, short int y)
{
    short int a;
    x--; y--;
    while (x<X && y >= 0)
    {
        for (a = 0; a<4; a++)
            if (Ship[a].x == x && Ship[a].y == y)
                return 1;
        x--; y--;
    };
    return 0;
}
 
short int search_up(short int x, short int y)
{
    short int a;
    y--;
    while (x<X && y >= 0)
    {
        for (a = 0; a<4; a++)
            if (Ship[a].x == x && Ship[a].y == y)
                return 1;
        y--;
    };
    return 0;
}
short int search_right_up(short int x, short int y)
{
    short int a;
    x++; y--;
    while (x<X && y >= 0)
    {
        for (a = 0; a<4; a++)
            if (Ship[a].x == x && Ship[a].y == y)
                return 1;
        x++; y--;
    };
    return 0;
}
short int search_right(short int x, short int y)
{
    short int a;
    x++;
    while (x<X && y >= 0)
    {
        for (a = 0; a<4; a++)
            if (Ship[a].x == x && Ship[a].y == y)
                return 1;
        x++;
    };
    return 0;
}
 
short int search_right_down(short int x, short int y)
{
    short int a;
    x++; y++;
    while (x<X && y >= 0)
    {
        for (a = 0; a<4; a++)
            if (Ship[a].x == x && Ship[a].y == y)
                return 1;
        x++; y++;
    };
    return 0;
}
 
short int search_down(short int x, short int y)
{
    short int a;
    y++;
    while (x<X && y >= 0)
    {
        for (a = 0; a<4; a++)
            if (Ship[a].x == x && Ship[a].y == y)
                return 1;
        y++;
    };
    return 0;
}
 
short int search_left_down(short int x, short int y)
{
    short int a;
    x--; y++;
    while (x<X && y >= 0)
    {
        for (a = 0; a<4; a++)
            if (Ship[a].x == x && Ship[a].y == y)
                return 1;
        x--; y++;
    };
    return 0;
}
short int search_ships(short int x, short int y)
{
    short int num = 0;
    num += search_left(x, y);
    num += search_left_up(x,  y);
    num += search_up(x,  y);
    num += search_right_up(x,y);
    num += search_right(x,  y);
    num += search_right_down(x,  y);
    num += search_down(x,  y);
    num += search_left_down(x,  y);
return num;
    }
void input_data(void) {
    short int xin, yin;
    short int yes, a;
    cin >> cx >> cy;
    xin = cx - '1';
    yin = cy - 'A';
    if (xin >= 0 && xin<9 && yin >= 0 && yin<7)
    {
        game_space[xin][yin] = 'x';
        yes = false;// корабль пока не найден
        for (a=0;a<4;a++)
            if (Ship[a].x==xin && Ship[a].y==yin)// корабль найден
            {Ship[a].detected=true;
        game_space[xin][yin] = '0'; k++;
        yes=true;}     //поиск видимых кораблей
        if (!yes)  cout<<"found "<<search_ships(xin,yin)<< " ships"<<endl;
    }
    else   cout<<"error"<<endl; }
 
bool end_game(void)
{char s; if(k==4) return 1;
    cout << "continue (Y) or finish(N) ";
    cin >> s;
    if (s == 'y' || s == 'Y')
        return 0;
    else return 1;
};
    int main()
{
 
    rand();
short int x=0;
short int y=0;
short int number=0;
     init_game_field(); //подготовка игрового поля и кораблей
    do  {output_game_field(); // вывод игрового поля на экран
    input_data();  //ввод новых координат пользователем
    number=search_ships(x, y);  //поиск видимых кораблей
    short int write();}   //внести результат на игровом поле
    while (!end_game());
    system("pause");
    return 0;
}
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,532
Записей в блоге: 1
12.12.2017, 21:28
.второй курс
обычно основы языка учатся на первом семестре первого курса. А далее язык во всю применяется на практике. Ума не приложу, что взрослый здоровый лоб может полтора года рассусоливать на бюджетных харчах, чтобы при этом не уметь морской бой написать, (ну ладно сам бой, но он же при этом ещё и замороченного синтаксиса боится! Т.е. За полтора года не освоил чего-то сложнее основ процедурного программирования!)
0
9933 / 2936 / 494
Регистрация: 05.10.2013
Сообщений: 7,966
Записей в блоге: 227
12.12.2017, 22:01
Цитата Сообщение от ApermS Посмотреть сообщение
сам код полностью не помещается, по этому залью на файлообменник текстовик с кодом.
Если проект многофайловый, то нужно сделать архив и прикрепить к сообщению. В редакторе сообщений слева-внизу есть кнопка "Управление вложениями"
0
0 / 0 / 0
Регистрация: 10.12.2017
Сообщений: 3
12.12.2017, 22:08  [ТС]
У меня сделана работа с бермудой, она очень похожа на на игру Морской Бой, мне нужно просто переделать её именно в морской бой, а то я не успеваю, мне нужно сдать ещё 10 работ, в заранее спасибо
сам код полностью не помещается, по этому залью на файлообменник текстовик с кодом.
КОД: <вырезано>

 Комментарий модератора 
Код загружайте на форум
0
с++
1282 / 523 / 225
Регистрация: 15.07.2015
Сообщений: 2,562
12.12.2017, 22:14
можно в архиве скинуть
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.12.2017, 22:14
Помогаю со студенческими работами здесь

Морской Бой
как лучше организовать алгоритм хода компа в морском бое?

морской бой
в моем классе не вызываются поля через точку.в чем проблема? #include&lt;iostream&gt; using namespace std; class Game { public: ...

Морской бой С++
Помогите пожалуйста.Нужно сделать так,чтобы обрисовало выстрелами все(вокруг убитого корабля) #include &lt;iostream&gt; #include...

C++ Морской бой
Недавно начал изучать c++ и вот решил написать консольный морской бой, но вот в чём возникли проблемы: 1.Как сделать стрельбу для игрока...

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


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru