Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Игорь с++
432 / 455 / 16
Регистрация: 26.01.2011
Сообщений: 2,032
#1

делаю игру,но... - C++

09.02.2011, 18:24. Просмотров 506. Ответов 8
Метки нет (Все метки)

Здравствуйте господа програмисты!делаю всем нам знакомым игру морской бой.и вот какая проблема-как сделать,что бы когда компьютер "расстовлял" свои корабли не ставил его с ближ стоящим кораблём по вертикале,горизонтале и ещё 4 точками вверх влево,вниз влево,вверх вправо,вниз вправо.Пробывал через ветвление,но такая грамозкая и не красивая программа получается!Что подскажите?У кого какие мысли как это сделать?Заранее всем огромное спасибо!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Beleaf
9 / 9 / 3
Регистрация: 14.04.2010
Сообщений: 99
09.02.2011, 18:37     делаю игру,но... #2
все зависит от реализации в целом. Я бы сделал матрицу, в которой клетку с кораблем обозначил 1, раненую клетку -1, пустую, но использованную (был выстрел) -2. Следовательно окружите клетки вокруг поставленного корабля -2, а при установке проверяйте, чтобы клетка не была равна -2. Надеюсь доступно объяснил, а то мысли есть, а сформулировать сложно)
Игорь с++
432 / 455 / 16
Регистрация: 26.01.2011
Сообщений: 2,032
09.02.2011, 18:42  [ТС]     делаю игру,но... #3
я говорю не про выстрелы это я знпю как сделать,а допустим стоит четырёх палубный корабль,а при растановки кораблей компютер рядом ставит 3-х палубный,как этого избежать?
Nameless One
Эксперт С++
5765 / 3414 / 255
Регистрация: 08.02.2010
Сообщений: 7,430
09.02.2011, 18:57     делаю игру,но... #4
В прошлом году делал курсач на ассемблере - игру "Морской бой". Размещение кораблей делал примерно так: два массива из 100 элементов представляли игровое поле игрока и компьютера, в которых хранилась информация, свободна ли очередная ячейка, или нет. Отдельным образом помечались свободные ячейки, ячейки, хранящие сегменты корабля, и ячейки, соседствующие с сегментами корабля. Для размещения очередного корабля с помощью генератора случайных чисел выбирался способ размещения (горизонтально или вертикально), потом опять-таки случайным образом выбиралась ячейка для размещения одного сегмента корабля. Потом производилась проверка, есть ли свободное место для размещения целого корабля, начиная с этой ячейки и далее (вправо, для горизонтального размещения, и вниз, для вертикального). Если нет, то тогда просто выбиралась следующая ячейка, и проверка повторялась до тех пор, пока не найдется подходящая ячейка. Могу выложить код, но сомневаюсь, что ты в нем разберешься (мне самому уже трудно в нем разобраться).

Не по теме:

Кстати, программа только что запустилась под wine, что не может не радовать

Игорь с++
432 / 455 / 16
Регистрация: 26.01.2011
Сообщений: 2,032
09.02.2011, 19:03  [ТС]     делаю игру,но... #5
"Потом производилась проверка, есть ли свободное место для размещения целого корабля"
как вы это делали?всё остальное я уже сделал
Beleaf
9 / 9 / 3
Регистрация: 14.04.2010
Сообщений: 99
09.02.2011, 19:22     делаю игру,но... #6
Цитата Сообщение от Игорь с++ Посмотреть сообщение
я говорю не про выстрелы это я знпю как сделать,а допустим стоит четырёх палубный корабль,а при растановки кораблей компютер рядом ставит 3-х палубный,как этого избежать?
скажем у вас есть координаты x, y и вам нужно по ним поставить однопалубный корабль.

C++
1
2
if (field[x, y] != -2 && field[x-1, y-1] != -2 && field[x-1, y] != -2 && field[x, y-1] != -2) 
   field[x, y] = 1;
я себе это так представляю, плюс нужно сделать проверку на угловые занятые ячейки.
Nameless One
Эксперт С++
5765 / 3414 / 255
Регистрация: 08.02.2010
Сообщений: 7,430
09.02.2011, 19:23     делаю игру,но... #7
Цитата Сообщение от Игорь с++ Посмотреть сообщение
как вы это делали?всё остальное я уже сделал
Есть поле, в котором разные типы ячеек (свободные, занятые) помечены разными значениями. Есть случайная ячейка, которая выбрана генератором случайных чисел. Эта ячейка берется за начальную для размещения отдельного корабля. Есть направление размещения, зависящее от того, горизонтально или вертикально будет размещаться корабль. Есть число n - размер корабля в сегментах. Осталось сделать проверку, что все n ячеек в заданном направлении, начиная с начальной, - свободны, т.е. не являются занятыми и не соседствуют с занятыми.
Игорь с++
432 / 455 / 16
Регистрация: 26.01.2011
Сообщений: 2,032
09.02.2011, 19:50  [ТС]     делаю игру,но... #8
спасибо всем,но я сдался и сделал сам 15 фиксированных расположений кораблей которые в зависимости от произвольной переменной будут учавствовать в игре!может как нибудь позже сделаю как хотел.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.02.2011, 20:16     делаю игру,но...
Еще ссылки по теме:

Что я делаю не так? C++
Что я делаю не так? C++
C++ Что я делаю не так?
C++ Делаю игру на русском, но возникла непонятка с кодировками
Что я делаю не правильно? C++

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

Или воспользуйтесь поиском по форуму:
Nameless One
09.02.2011, 20:16     делаю игру,но...
  #9

Не по теме:

Цитата Сообщение от Игорь с++ Посмотреть сообщение
спасибо всем,но я сдался и сделал сам 15 фиксированных расположений кораблей которые в зависимости от произвольной переменной будут учавствовать в игре!может как нибудь позже сделаю как хотел.
У нас бы такое решение не прокатило...

Yandex
Объявления
09.02.2011, 20:16     делаю игру,но...
Ответ Создать тему
Опции темы

Текущее время: 02:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru