Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Алексаша
0 / 0 / 1
Регистрация: 30.03.2016
Сообщений: 29
1

Проблемы с реализацией игры "Морской бой": найти и исправить ошибки в коде

08.01.2017, 19:54. Просмотров 376. Ответов 4
Метки нет (Все метки)

Доброго времени суток. У меня вопрос по игре "Морской бой". Я вывел поле с написанными координатами сверху и слева. Затем предлагаю пользователю ввести координаты, на этих коорд. должен вывестись крестик. Но он не выводится!!! Пожалуйста, если не трудно, помогите). Вот код:

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
#include <iostream>
 
using namespace std;
 
 
// Глобальные переменные
const int SIZE1 = 9;
const int SIZE2 = 7;
 
char field[SIZE1][SIZE2];
 
bool GAME = true;
 
int num1;   //Номер колонки
int num2;  //номер строки
 
int mas1[SIZE2] = { 1, 2, 3, 4, 5, 6, 7 };
 
 
 
void DrawField()
{
    for (int i = 0; i < SIZE2; ++i)
    {
        cout << ' ' << mas1[i];
    }
 
    cout << endl;
 
    for (int i = 0; i < SIZE1; ++i)
    {   
        cout << (int)(i + 1);
        for (int j = 0; j < SIZE2; ++j)
        {
            
            field[i][j] = '.';
            cout << field[i][j] << ' ';
        }
        cout << endl;
 
    }
 
    
 
}
 
 
int main()
{
    setlocale(0, "");
 
    
    DrawField();
 
    while (GAME)
    {
        cout << "Введите номер колонки: ";
        cin >> num1;
 
        cout << "Введите номер строки: ";
        cin >> num2;
 
        field[num1][num2] = 'x';
 
        cout << endl;
 
        DrawField();
    }
 
    system("pause");
    return 0;
}
Не ругайте за глупые ошибки, если они будут. Я только учусь.

Это не весь код, чтоб игра была полностью сделана, но я потом допишу. Пока с этим помогите)).
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.01.2017, 19:54
Ответы с готовыми решениями:

Найти и исправить ошибки (игра "Морской бой")
Ребят. На с++ пишу недавно. Решил сделать простенькую игру: &quot;Морской бой&quot;. Игра будет происходит...

"Морской Бой": найти причины возникновения ошибок в коде
Доброго добра Всем тем, кто сейчас зашёл на эту страницу. Помогите понять, почему arr1 и arr2 в...

Есть у кого-нибудь исходник игры "Морской Бой"?
Ребят, может у кого завалялся исходник &quot;Морского Боя&quot;?

Написать алгоритмы реализации игры "Морской бой"
Здравствуйте. На форуме в первый раз, если что то куда то не туда написал, прошу не пинайте. Вот...

Информация о разработке игры "Морской бой"
Нужно создать морской бой, для игры с человеком через локалку, дайте совет пожалуйста на чем лучше...

4
_Ivana
4041 / 1881 / 235
Регистрация: 01.03.2013
Сообщений: 5,117
Записей в блоге: 16
08.01.2017, 19:57 2
C++
1
2
            field[i][j] = '.';
            cout << field[i][j] << ' ';
и зачем вам филд?
0
dailydose
661 / 207 / 88
Регистрация: 21.07.2016
Сообщений: 1,036
Записей в блоге: 2
Завершенные тесты: 1
08.01.2017, 20:05 3
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
#include <iostream>
#include <vector>
 
using namespace std;
 
 
// Глобальные переменные
const int SIZE1 = 9;
const int SIZE2 = 7;
 
//char field[SIZE1][SIZE2] = { '.' };
std::vector< std::vector<char> > field(SIZE1, std::vector<char>(SIZE2, '.'));
 
bool GAME = true;
 
int num;   //Номер колонки
int symb;  //номер строки
 
int mas1[SIZE2] = { 1, 2, 3, 4, 5, 6, 7 };
 
 
 
void DrawField()
{
    std::system("cls||clear");
 
    for (int i = 0; i < SIZE1; ++i)
    {
        cout << (int)(i + 1);
        for (int j = 0; j < SIZE2; ++j)
        {
       //   field[i][j] = '.';
            cout << field[i][j] << ' ';
        }
        cout << endl;
 
    }
 
 
 
}
 
 
int main()
{
    setlocale(0, "");
 
 
    DrawField();
 
    while (GAME)
    {
        cout << "Введите номер колонки: ";
        cin >> num;
 
        cout << "Введите номер строки: ";
        cin >> symb;
 
        field[num][symb] = 'x';
 
        cout << endl;
 
        DrawField();
    }
 
    system("pause");
    return 0;
}
Добавлено через 2 минуты
Цитата Сообщение от Алексаша Посмотреть сообщение
Это не весь код, чтоб игра была полностью сделана, но я потом допишу. Пока с этим помогите)).
Это правильный подход. Сам всегда так же делаю. Вроде это называется TDD, не люблю терминами кидаться)

P.S. Рекомендую освоить отладку.
0
Алексаша
0 / 0 / 1
Регистрация: 30.03.2016
Сообщений: 29
09.01.2017, 20:01  [ТС] 4
dailydose, Спасибо огромное)))

Добавлено через 3 часа 5 минут
Можно ещё просьбу? Как сделать тоже самое, но без векторов. Мне как то с массивами удобнее, а до этого делал, не получалось(((

Добавлено через 20 часов 45 минут
У меня опять проблема((((. Почему, когда ввожу 7 и 8, или 7 и 9, то происходит ошибка? Вот код:

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
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
#include <iostream>
#include <windows.h>
#include <vector>
 
using namespace std;
 
 
// Глобальные переменные
const int SIZE1 = 9;
const int SIZE2 = 7;
 
int MaxShot = 10;  //Максимальное кол-во выстрелов
int Shots;              //Сделанные выстрелы
 
//char field[SIZE1][SIZE2] = { '.' };
std::vector< std::vector<char> > field(SIZE1, std::vector<char>(SIZE2, '.'));
 
bool GAME = true;
 
int num;   //Номер колонки
int symb;  //номер строки
 
int mas1[SIZE2] = { 1, 2, 3, 4, 5, 6, 7 };
 
 
 
void Welcome()
{
    int a;
 
    for (int i = 0;; ++i)
    {
        cout << endl;
 
        cout << "Всем привет, это игра Морской Бой. Правила такие: " << endl;
        cout << "Где то на море спрятан вражеский корабль! Ваша задача за определённое кол-во \nвыстрелов и уничтожить его. Удачи!" << endl;
        cout << endl;
 
        cout << "Введите 1, чтобы начать игру: ";
        cin >> a;
 
        if (a == 1)
        {
            break;
        }
 
        else{
            continue;
        }
 
    }
}
 
void DrawField()
{
    
    std::system("cls||clear");
 
    for (int i = 0; i < SIZE2; ++i)
    {
        cout << ' ' << mas1[i];
    }
 
    cout << endl;
 
    for (int i = 0; i < SIZE1; ++i)
    {
        cout << (int)(i + 1);
        for (int j = 0; j < SIZE2; ++j)
        {
            //   field[i][j] = '.';
            cout << field[i][j] << ' ';
        }
        cout << endl;
 
    }
 
 
 
}
 
 
int main()
{
    setlocale(0, "");
 
    Welcome();
 
    DrawField();
 
    while (GAME)
    {
        cout << "                                              Вы использовали: " << Shots << " выстрелов" << endl;
 
        cout << "Введите номер колонки: ";
        cin >> num;
 
        cout << "Введите номер строки: ";
        cin >> symb;
 
        field[num - 1][symb - 1] = 'x';
 
        Shots++;
 
        if (Shots >= MaxShot)
        {
            cout << "Вы использовали все выстрелы. Пока" << endl;
            break;
        }
 
        if (num == 3 && symb == 3)
        {
            field[num - 1][symb - 1] = '#';
        }
 
        cout << endl;
 
        DrawField();
    }
 
    system("pause");
    return 0;
}
0
dailydose
661 / 207 / 88
Регистрация: 21.07.2016
Сообщений: 1,036
Записей в блоге: 2
Завершенные тесты: 1
10.01.2017, 08:18 5
Цитата Сообщение от Алексаша Посмотреть сообщение
Можно ещё просьбу? Как сделать тоже самое, но без векторов. Мне как то с массивами удобнее, а до этого делал, не получалось(((
да, можно.
всё тоже самое будет
я просто закомментировал char field[][] и сделал на векторах, чтобы сразу же проинициализировать его точками.
можете вернуть свой вариант с char и отдельно его заполнить точками в цикле, только не в функции вывода
0
10.01.2017, 08:18
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.01.2017, 08:18

Отладка игры "Морской бой"
Добрый день, форумчане. Я новичок, и с программированием только на &quot;ВЫ&quot; и шепотом. Нужна помощь в...

Тестирование игры "Морской бой"
Выкладываю ссылку на скачивание игры &quot;Морской бой&quot;. Игра в 2D. Есть несколько уровней, которые...

Реализовать класс "Счётчик" (Найти и исправить ошибки в коде)
Вот условие: &quot;Цифровой счетчик, это переменная с ограниченным диапазоном. Значение которой...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru