Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 28.12.2015
Сообщений: 8
1

Найти и исправить ошибки (игра "Морской бой")

15.01.2016, 18:51. Просмотров 1313. Ответов 7
Метки нет (Все метки)

Ребят. На с++ пишу недавно. Решил сделать простенькую игру: "Морской бой". Игра будет происходит только на одном поле. Вы вводите расположение кораблей и количество попыток для вашего соперника. А ваш соперник пытается отгадать, где находятся корабли. Если он попадает и при этом ранит, пишется "HIT". Если он убивает корабль, пишется "DEAD". И если он мажет, тогда на экран выводится: "MISS". По истечению попыток игра заканчивает.
Массив изначально заполняется '.', а корабли отмечаются '#'. Но происходит ошибка ввода. Не могу ее исправить.
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
#include <conio.h>
#include <iostream>
#include <cstring>
#include <cstdlib>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Russian");
 
    cout << "\t\t\t***Морской бой***\n\n\n";
 
    const int N = 10, Z = 100;
    char pole[N][N], kor[Z], kor1[Z];
    int n = 0, stroka = 0, stolbec = 0, s = 0, s1 = 0;
    bool inWord = false;
 
    for (int i = 0; i < N; i++)
        for (int j = 0; j < N; j++)
            pole[i][j] = '.';
 
    cout << "Введите колличество попыток:" << endl;
    cin >> n;
 
    cout << "1.Каждый корабль пишется через ";";\n2.Если корабль занимает более одной клетки,\nто его расположение пишется через пробел в одной строке;" << endl;
    cout << "3.Расположение каждого отсека корабля записывается в такой форме:\nstroka-stolbec, где stroka - строка и stolbec - столбец, соответственно.\n";
    cout << "Введите расположение ваших кораблей: " << endl;
 
    cin.getline(kor,Z);
 
    for (int i = 0; kor[i] != '\0'; i++)
    {
        stroka = strtoul(kor, NULL, 0);
        if (kor[i - 1] = '-') 
        { 
            for (int j = 1; j < i; j++)
            kor[j] = ' ';
            stolbec = strtoul(kor, NULL, 0);
        }
        if (isdigit(kor[i])) { kor[i] = ' '; kor[i+1] = ' ';}
        pole[stroka][stolbec] = '#';
        stroka = 0;
        stolbec = 0;
    }
 
 
    cout << stroka << " " << stolbec;
 
    for (int i = 0; i < N; i++)
    {
        cout << "\t\t\t\t"<< endl;
        for (int j = 0; j < N; j++)
            cout << pole[i][j] << " ";
    }
 
 
    _getch();
    return 0;
 
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.01.2016, 18:51
Ответы с готовыми решениями:

Проблемы с реализацией игры "Морской бой": найти и исправить ошибки в коде
Доброго времени суток. У меня вопрос по игре &quot;Морской бой&quot;. Я вывел поле с написанными координатами...

Игра "Морской бой" Рассстановка кораблей
Пишу игру &quot;Морской бой&quot;. Нужно пока что только расставить корабли. На данный момент логика...

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

Игра "Морской бой"
задание такое Запрограммировать игру двух игроков в “Морской бой”. Сначала, по-сле запуска...

7
74 / 73 / 51
Регистрация: 30.03.2013
Сообщений: 194
15.01.2016, 19:05 2
Попробуй написать так.
C++
1
2
cin.sync();
cin.getline(kor,Z);
0
0 / 0 / 0
Регистрация: 28.12.2015
Сообщений: 8
15.01.2016, 19:10  [ТС] 3
Не-а. Не получилось.
0
93 / 77 / 73
Регистрация: 11.05.2015
Сообщений: 187
15.01.2016, 19:14 4
Можешь написать пример входной строки для расстановки кораблей на поле?
0
0 / 0 / 0
Регистрация: 28.12.2015
Сообщений: 8
15.01.2016, 19:22  [ТС] 5
Извини, я тебя немного не понял. Ты хочешь вывод увидеть?
0
Миниатюры
Найти и исправить ошибки (игра "Морской бой")  
59 / 59 / 24
Регистрация: 17.11.2012
Сообщений: 1,602
15.01.2016, 19:23 6
Лучший ответ Сообщение было отмечено JustOak как решение

Решение

JustOak, а если так?
C++
1
2
cin.ignore();
cin.getline(kor, Z);
1
0 / 0 / 0
Регистрация: 28.12.2015
Сообщений: 8
15.01.2016, 19:27  [ТС] 7
Это, однозначно, помогло. Но теперь вылезла вот такая ошибочка:
0
Миниатюры
Найти и исправить ошибки (игра "Морской бой")  
0 / 0 / 0
Регистрация: 28.12.2015
Сообщений: 8
15.01.2016, 19:36  [ТС] 8
Я понял в чем ошибка. Вот правильный кусок алгоритма:
C++
1
2
3
4
5
if (isdigit(kor[i]) && kor[i+1] == isdigit(kor[i]))
        { 
            kor[i] = ' ';
            kor[i+1] = ' ';
        }
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.01.2016, 19:36

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Игра "Морской Бой"
СРОЧНО!!! Требуется помощь с данной игрой: нечто просто заменяет все клетки кораблей на клетку воды...

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

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

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

проблема с исправлением ошибок в консольной игре "Морской бой" на C++
Помогите в исправлением ошибок в игре морской бой на С++ Ошибка заключается в том, что игра...

Случайное распределение кораблей по полю в игре "морской бой"
Привет всем кто читал мой предыдущий пост про векторы в морском боем, в той же фунции появилась...


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

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

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