Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Показать сообщение отдельно
MrGrig
177 / 160 / 38
Регистрация: 08.10.2012
Сообщений: 423
02.11.2012, 12:44

Консольный морской бой. Расстановка кораблей

02.11.2012, 12:44. Просмотров 2474. Ответов 7
Метки (Все метки)

Ответ

Цитата Сообщение от we2seek Посмотреть сообщение
Программа зависает, когда пытается разместить корабль в ограниченном пространстве, как, например на рисунке:
Нужно понять почему зависает, видимо получается бесконечный цикл
Цитата Сообщение от we2seek Посмотреть сообщение
Если клетка {x;y} занята символом по умолчанию, т.е. в ней нет корабля и она не соприкасается с другим кораблем, тогда проверяем рядомстоящие клетки по 4 направлениям: вверх, вниз, влево и вправо.
Цитата Сообщение от MrGrig Посмотреть сообщение
перед расстановкой корабля проверить нет ли рядом занятого поля, а после расстановки обставить кораблик занятым полем
Если после установки корабля сразу обвести его точками, то нет необходимости при построении проверять это условие
Цитата Сообщение от we2seek Посмотреть сообщение
не соприкасается с другим кораблем
Добавлено через 3 минуты
Цитата Сообщение от we2seek Посмотреть сообщение
C++
1
bool IsEmpty (char **field, int pointX, int pointY)
Цитата Сообщение от we2seek Посмотреть сообщение
C++
1
bool IsEmpty (char **field, int x, int y, int DECKS)
за что отвечает переменная DECKS?
Цитата Сообщение от we2seek Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
switch (DECKS)
* * * * {
* * * * * * case 1:
* * * * * * * * return true;
* * * * * * * * break;
* * * * * * case 2:
* * * * * * * * if ( counter >= 1 )
* * * * * * * * * * return true;
* * * * * * * * else
* * * * * * * * * * return false;
* * * * * * case 3:
* * * * * * * * if ( counter >= 2 )
* * * * * * * * * * return true;
* * * * * * * * else
* * * * * * * * * * return false;
* * * * }
возможно она получает цифру >3
от этого и зависоны

Добавлено через 2 минуты
Цитата Сообщение от we2seek Посмотреть сообщение
по 4 направлениям: вверх, вниз, влево и вправо
я бы реализовал немного по другому, смысл вашей функции впихнуть корабль в координату. Хотя бы хоть как нибудь. Я тоже так делал и это вышло у меня довольно объемно. Проще при создании корабля создавать рандомно еще его направление, тогда проверка будет довольно простая.

Добавлено через 11 минут
кстати, я бы вам советовал использовать поле не 10х10, а 12х12 и контур сразу забить точками (выводить поле с 1 по 11). тогда например при описаном выше варианте создания кораблей не выйдет лажи типо вот такого
C++
1
2
3
4
0 1 2 3 4 5 6
1 - - - - - -
2 о - - - - -
3 - - - - - -
например вы хотите кораблик поставить в точку о, с направлением в лево.
вы спокойно проверяете поле [3][0], так как контур у нас обведен точками, то функция дает отказ и вы генерируете следующие возможные координаты и направление корабля

Вернуться к обсуждению:
Консольный морской бой. Расстановка кораблей
1
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.11.2012, 12:44
Готовые ответы и решения:

Расстановка кораблей (морской бой)
Доброго времени суток, при расстановке 2х палубных кораблей возникает...

Морской бой. Ф-ция автоматической рассатновки кораблей.
Добрый день, ув. форумчане! Есть задание написать консольный морской бой. Есть...

Морской бой - программа зацикливается на расстановке кораблей
Нужно написать курсовую(игру). Решила написать морской бой(пока что консольно)....

Проверить правильность расстановки кораблей. Морской бой
Есть матрица NxM, где расставлены корабли. Корабли не стоят на краю матрицы,...

Морской бой: расставляется кораблей больше, чем положено
Здравствуйте! Пишу игру "Морской бой" в консоли, и попалась одна неприятная...

7
Другие темы раздела
C++ Даны массивы целых чисел A[25] и B[25] http://www.cyberforum.ru/cpp-beginners/thread680722.html
Даны массивы целых чисел A и B.Сформировать третий массив, в который включить все положительные элементы обоих массивов, меньших 10. Нужно решить в C++.
C++ Конечный автомат Здравствуйте! Возникли проблемы с задачей: дан набор правил q0 -> aq1, q1 -> bq2, q1 -> q2, q1 -> cq2, q2 -> aq3 и др. Нужно написать программу, которая считывает количество символов в слове и... http://www.cyberforum.ru/cpp-beginners/thread680716.html
C++ не отображается робота программы
Начал изучать С++, и сталкиваюсь каждый раз с новыми проблемами в изучении.. Вот уже книгу нашел подходящую(Брюс Эккель - Филосовия С++ 1 том) но опять же столкнулся с проблемой вывода роботы...
C++ warning: ISO C++ says that these are ambiguous
Вечер добрый. Помогите раскрыть причину неоднозначности: Действие: Matrix1 &Matrix1::mult(const Matrix1 &other) { Matrix1 m; m.setRow1(mult(other.column1())); ...
C++ Создание динамического массива http://www.cyberforum.ru/cpp-beginners/thread680703.html
Как объявить вот так вот : int blocks = { {0,0,0,0,0,0}, {0,0,0,0,0,0}, {0,0,0,0,0,0}}; Мне пишет ошибку : массив не может содержать элементы этого типа
C++ Палиндром нужно чтобы в текстовом файле ab.txt находило палиндромы и выводило их на экран.#include<iostream> #include<stdio.h> #define N 2; using namespace std; void main() { FILE *File; ... подробнее
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru