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

Игра "Морской Бой"

01.08.2018, 20:52. Просмотров 1705. Ответов 8

СРОЧНО!!! Требуется помощь с данной игрой: нечто просто заменяет все клетки кораблей на клетку воды перед выводом массивов на экран и в результате игра не работает. Пожалуйста, скажите мне, в чём тут ошибка? И ещё кое-что: как мне сделать так, что-бы клетки кораблей ставились вместе и никак не смогли поставиться отдельно друг от друга. Мне сегодня эту игру нужно сдать, как курсовую работу: если не сдам - будет дело плохо. МБ.rar
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.08.2018, 20:52
Ответы с готовыми решениями:

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

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

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

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

8
8 / 8 / 6
Регистрация: 21.04.2018
Сообщений: 142
01.08.2018, 22:41  [ТС] 2
Сам код:
Кликните здесь для просмотра всего текста
0
103 / 73 / 46
Регистрация: 23.06.2018
Сообщений: 178
01.08.2018, 23:13 3
Опустим все ужасные моменты, кроме... Вы серьёзно выбрали тёмно-синий цвет текста на чёрном фоне? Проще было сразу чёрным по чёрному.
Итак, причина вашего кривого поля в том, что... Я даже не знаю что вы задумывали.
Вы передаёте внутрь функции Set_Ships массив, созданный внутри main, а потом присваиваете массив, объявленный среди глобальных переменных.
Хотите - удаляйте объявление массива внутри main. Хотите - убирайте прекращайте переприсваивать массив внутри функции. Выбор за вами.
А так же вынужден огорчить вас, но где-то ещё ошибка. С самого начала игры остаётся уничтожить 0 кораблей и после первого же выстрела игра заканчивается.
0
8 / 8 / 6
Регистрация: 21.04.2018
Сообщений: 142
01.08.2018, 23:32  [ТС] 4
Я на 0 кораблях и остановился: сам не понимаю почему. И я не в курсе: про какие Вы объявления, присваивания массиву.. не понял. Напишите синтаксис того, что Вы имеете в виду. Задумывал я функцию расстановки кораблей. Вот резалт.

Добавлено через 2 минуты
Выбирать я цвета не старался: стилистику продумаю как-нибудь потом. Синтаксис ошибки важнее пока-что.
0
103 / 73 / 46
Регистрация: 23.06.2018
Сообщений: 178
02.08.2018, 00:44 5
Вот это:
C++
1
2
3
4
5
//...
const int FIELD_SIZE = 10;
char PlayerArr[FIELD_SIZE][FIELD_SIZE];
char BotArr[FIELD_SIZE][FIELD_SIZE];
//...
И вот это
C++
1
2
3
4
5
6
7
8
int main()
{
    srand((unsigned)time(0));
    setlocale(LC_ALL, "Russian");
 
    char PlayerArr[FIELD_SIZE][FIELD_SIZE];
    char BotArr[FIELD_SIZE][FIELD_SIZE];
//...
Абсолютно разные массивы.
Воду вы пишите (Create_table) в те массивы, которые внутри main. А корабли расставляете (Set_ships) в те, которые снаружи. Либо вы убираете строки типа arr = BotArr; из Set_ships, либо убираете массивы из main.
На самом деле, я на 99% уверен, что вы использовали такие глобальные массивы не только здесь, поэтому...
Быстрый фикс: убрать массивы из main.

Запускаем, осознаём что отображение карты не решает проблемы с нулём кораблей. Наконец-то инициализируем их количество хоть чем-то.
Быстрый фикс: присвоить максимальное количество кораблей.

C++
1
2
int amount_of_ship_cells_left_to_drown_P1 = 16;
int amount_of_ship_cells_left_to_drown_P2 = 16;
Наслаждаемся игрой, в которой бот стреляет несколько раз за ход. Либо я чего-то не понял.

Добавлено через 1 час 0 минут
Извините, я начал понемногу вчитываться в ваш код. Проблема с количество кораблей заключается в том, что после создания своего флота, вы не обнулили количество кораблей каждого типа, поэтому у противника просто нет флота. Так же я понял откуда брались несколько ходов, это была моя ошибка.
0
8 / 8 / 6
Регистрация: 21.04.2018
Сообщений: 142
02.08.2018, 06:55  [ТС] 6
Сразу даже не заметил объявление и там и тут... Вот я глупый. Спасибо за помощь, благодарен. Кстати, о ходе бота: на рандом ставятся клетки координат и туда он стреляет. Если попал - вызывается функция добивания корабля Finisher, в ней же - Marker (что-бы отметить область вокруг повреждённого корабля). Насчёт счётчика: поместил я его так, что он должен инкрементироваться тогда, когда клетка валидна. Так и задумывалось. Условия кривые немножко, знаю, и поле тоже, но доделаю тогда, когда сделаю механизм самой игры. Кстати, причём тут счётчики каждого типа корабля, если у Игрока они спокойно работают?
0
8 / 8 / 6
Регистрация: 21.04.2018
Сообщений: 142
02.08.2018, 09:41  [ТС] 7
Почему-то бот стреляет несколько раз при промахе. Как мне пометить клетки, в которые стреляли? Где приписывать SetConsoleTextAttribute, если я так хочу сделать? Может быть, отказаться от всяких PlayerCell/BotCell? Видоизменённый код, отличается некоторыми исправлениями:
Кликните здесь для просмотра всего текста
0
8 / 8 / 6
Регистрация: 21.04.2018
Сообщений: 142
02.08.2018, 11:16  [ТС] 8
Кстати, после одного выстрела игрока игрок почему-то больше выстрелить не может.
Как сделать так, что-бы в случае, если клетка корабля поставится один раз, следующая клетка не смогла поставиться отдельно от той клетки до тех пор, пока не построится корабль полностью?
0
103 / 73 / 46
Регистрация: 23.06.2018
Сообщений: 178
02.08.2018, 16:25 9
Цитата Сообщение от N0VY Посмотреть сообщение
Где приписывать SetConsoleTextAttribute
Вы уверены, что понимаете что эта функция делает? Она просто меняет цвет текста и фона, но на само содержимое она никак не влияет.
Цитата Сообщение от N0VY Посмотреть сообщение
Может быть, отказаться от всяких PlayerCell/BotCell?
Честно не понимаю зачем вы вообще это делали, если разницы между ними у вас нет.
Цитата Сообщение от N0VY Посмотреть сообщение
Кстати, причём тут счётчики каждого типа корабля, если у Игрока они спокойно работают?
Попробуйте как-нибудь пошагово пройтись по созданию флота бота. Тогда вы увидите, что ваш bs_checked и ему подобные являются глобальными переменными и не обнуляются после создания флота игрока. Таким образом, когда создаётся флот бота, bs_checked = 4 с самого начала и ничего не происходит. К тому же, учитывая что и для бота и для игрока вы вызываете одну и ту же функцию отрисовки, вам не кажется странным то, что у бота пустое поле?

Добавлено через 10 минут
А зацикливается потому, что вы не реализовали в итоге расстановку этих кораблей у бота.

Добавлено через 1 час 4 минуты
Я всё не мог понять, почему же при выстреле вы считываете только одно число... Всё-таки вы ошиблись.
C++
1
cin >> BotArr[plant_choise_x][plant_choise_x];
Просто вместо считывания координат вы считываете содержимое одной и той же клетки. Ещё и используете везде x.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.08.2018, 16:25

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

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

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

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

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


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

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

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