39

Пишем свой Морской Бой , на пути к успешной курсовой......(часть1)

Здравствуйте уважаемые читатели !


Сегодня хотелось бы посвятить свой пост разработке классической ,уже ставшей символом школьной поры ,игры.
Речь у нас пойдет об игре "Морской бой". Разработку мы будем вести на языке C++ в среде Visual Studio. Сам я люблю писать на C# ,но в ТЗ к моей курсовой были указаны языки C/C++.
Графику прикрутим ближе к концу , так же постараемся реализовать ИИ.
Пост не следует рассматривать как руководство для совсем новичков, я буду стараться разжевывать все что делаю достаточно тщательно ,приводить блок схемы алгоритмов и основные формулы(если будет не лень),но эта серия постов выйдет скорее как дневник разработчика ,который чуть было не завалил сессию :)

В постах часто будет рерайт некоторых статей с хабра и других тематических форумов
потому что они написаны достаточно грамотно и смысла их исправлять и коверкать я не вижу

Чтож ,приступим.....


1.Для начала разберемся с основными правилами игры и вообще построим у себя в голове образ будущего творения.
О самой игре говорить много наверно не стоит ,каждый кто учился в школе так или иначе знает правила,но если кратко то : У нас есть 1 корабль который занимает четыре клетки
2 корабля которые занимают три клетки , 3 корабля на две клетки , и 4 лодки размером с одну клетку. корабли должны быть расставлены так чтобы  между ними обязательно была одна пустая клетка.
вообще для прототипа игры я сделаю консольную версию приложения ,протестирую на ней механику а потом если успею прикручу графику (это я уже указывал строк на 20 выше)

Чтобы не сильно засыпать вас текстом , прилагаю картинку игрового поля

Пишем свой Морской Бой , на пути к успешной курсовой......(часть1) Игры, Морской бой, C++, Длиннопост

2. Создаем проект приложения win32 на C++ в Visual Studio

Пишем свой Морской Бой , на пути к успешной курсовой......(часть1) Игры, Морской бой, C++, Длиннопост

С названием не заморачиваемся, да простят меня обладатели авторских прав, данный проект сугубо для личного использования.

В следующем окне поставим галочку напротив MFC ,на тот случай если все таки дойдем до графического интерфейса :)

Пишем свой Морской Бой , на пути к успешной курсовой......(часть1) Игры, Морской бой, C++, Длиннопост

3. Проект создан ,выглядит он вот так(можно кликнуть на картинку и разглядеть получше,сравнить со своим результатом).

Пишем свой Морской Бой , на пути к успешной курсовой......(часть1) Игры, Морской бой, C++, Длиннопост

Компилируем и молимся чтоб все работало ,по итогу после запуска приложения в таком виде
появится консоль и сразу же исчезнет , это нам скажет о том что все успешно собралось и вам не нужно переустанавливать это детище мелко-мягких(мне пришлось поставить студию дважды и только тогда все нормально скомпилировалось).


Теперь давайте создадим класс игрока , не будем сильно оригинальничать и назовем его Player, он будет описывать и игрока и компьютер и в нем будут методы расстановки кораблей и стрельбы ,но до стрельбы нужно дожить)

Пишем свой Морской Бой , на пути к успешной курсовой......(часть1) Игры, Морской бой, C++, Длиннопост

После этого у нас появились 2 новых файла в проекте ,они обведены красным

Пишем свой Морской Бой , на пути к успешной курсовой......(часть1) Игры, Морской бой, C++, Длиннопост

идем в главный класс и подключаем нужные нам библиотеки ,это будут clocale, conio.h, stdlib.h, iostream, ctime

пока не паримся для чего они нужны ,позже я обязательно это расскажу

Вообще это надо было сделать в начале ,но ваш покорный слуга не очень то и соображает без ударной дозы кофеина ,в следующем посте обязательно это исправим.

Пишем свой Морской Бой , на пути к успешной курсовой......(часть1) Игры, Морской бой, C++, Длиннопост

Далее идем в наш Заголовочный файл и вставляем туды строчку с определением

направления нашего корабля,чтобы мы могли дальше использовать эти данные при обозначении методов класса Player

Пишем свой Морской Бой , на пути к успешной курсовой......(часть1) Игры, Морской бой, C++, Длиннопост

теперь идем в наш Player и создаем там основные методы которые нам пригодятся

Пишем свой Морской Бой , на пути к успешной курсовой......(часть1) Игры, Морской бой, C++, Длиннопост

метод "set" -устанавливает корабль ,от значения переданной ему переменной ,можно догадаться о количестве палуб

метод "ships_init" - собственно инициализирует массив с кораблями  

методы "turn" - в зависимости от ссылки отвечают за ход компьютера или игрока

метод "place _ship" - вызывается из метода set и описывает направление и координаты нашего кораблика
далее мы размещаем нужные нам для фунциклирования переменные :

Пишем свой Морской Бой , на пути к успешной курсовой......(часть1) Игры, Морской бой, C++, Длиннопост

ну вот и конец первой части ,можно компилировать наш обрубок и смотреть на наличие ошибок
Повторюсь ,пост не ставит целью вас научить ,я просто веду маленьких дневничок своей костыльной разработки
и почти использую материалы с открытых ресурсов
если получу хоть небольшой положительный отклик выложу следующую часть завтра

Принимаю тапочки на кривизну моего кода ,я знаю что могу ошибаться во многих местах и буду крайне благодарен если вы исправите мои недочеты )

_by gogibeet.

Найдены дубликаты

+4

смысл кода в кострукторе Player()? может это в поля класса нужно написать?

раскрыть ветку 1
0

да ,спасибо что помогаете замечать мои ошибки , когда писал пост и код одновременно

вставил переменные не туда ,исправил , скрин выше

+1

Ходил на курсы по c# лет 5 назад. Написал тогда софтину автовыключение пк, если кому нужна - забирайте. Она может запоминать последнее время и сразу запускать его, при запуске программы. Установки не требует. https://yadi.sk/d/z5NbK814uYu36

Иллюстрация к комментарию
раскрыть ветку 4
+3

тоже уважаю C# ,он более ориентирован на разработчика и что немаловажно ,код можно писать в любом состоянии)
из крупных штук писал на нем анализатор трехфазных сигналов ,и связывал его с ардуино и прикрученным к нему ЦАП'ом

Иллюстрация к комментарию
раскрыть ветку 3
0

Сложно было перейти C# на C++?

раскрыть ветку 2
0

Скинь пожалуйста полностью код, прошу

Или кто нибудь у кого есть морской бой на с++ или с#

Прошу, очень надо

раскрыть ветку 1
0

привет, я попробую поискать
напиши вк
vk.com/gogibeet

0

а где продолжение????

раскрыть ветку 1
0

меня отчислили XD

0

Я вчера увидел твой код и чет самому захотелось очередную песочницу заделать.
Только вот классический морской бой двумерный. А я для того, чтобы интереснее писать было, решил написать на шаблонах n-мерный.
Это немного наркомания, я знаю, просто люблю обобщать задачи :)

Вот тут можешь посмотреть примерно как это выглядит.
https://github.com/Sunday111/Multidimensional-Sea-Wars

Там тоже явно не законченный проект, на принцип должен быть понятен

раскрыть ветку 3
0

я кстати ,практически дописал его на SMFL
про посты забыл ,каюсь.....

Иллюстрация к комментарию
раскрыть ветку 2
0

Мне кажется что там и мфц хватило бы)

раскрыть ветку 1
0

Тоже писал курсовую на тему "Морской бой"на С++ :)

Использовал SFML и TGUI. Можно играть как с компьютером, так и с другим игроком по сети, так же звания добавил, для интереса)

0

MFC? Ненавижу MFC.

раскрыть ветку 2
+1

успокойтесь) скорее всего буду делать графику на SDL или SMFL
добрые комментаторы наставили меня на путь истинный)

-1

Обосновать сможете свой гнев?

0
Для такого объема кода сложно придумать к чему придраться, так что пиши есчо 😊 а вообще лойс за смелость и не банальность темы для курсовой. Будут вопросы или проблемы, пиши, разберём ☝🏻
раскрыть ветку 5
+1

не надо ничего придумывать, ты в конструктор Player() загляни.

раскрыть ветку 3
+1

Эту ошибку он заметит, когда попытается обратиться к переменным вне конструктора. И исправит, конечно же. Всякое бывает.

0

Благодарю , таки исправился, синхронно писал пост и код

сбился по своей невнимательности

Иллюстрация к комментарию
раскрыть ветку 1
0

Благодарю за положительный комментарий ,буду стараться радовать новыми постами

0

Таки столкнулся с некоторыми проблемами в объявлении классов на Visual studio
все таки не так много писал на C++  , с огромной радостью принимаю ссылки на
книжки и статьи по плюсам в Visual studio 15

раскрыть ветку 5
0

Лучше перейди на rad studio (Бывший билдер-дебилдер). Уж для морского боя брать эту махину Visual это как то... Мне довелось всего несколько раз работать с вижуалом, и каждый раз я убеждался, что чем проще среда разработки--тем лучше. Ну его, это порождение микрософта. А вообще, советую вот этого страуса:
https://docs.google.com/file/d/0BwOFp56IBbu9dGRveWVoUG8wbEE/...
Сам неоднократно к ней обращался, пока учил С++ в колледже.

P.S. Людей надо не морские бои учить делать, их надо учить правильно организовывать информацию. Дело тут не в языке, это сам способ мышления. Без этого человек не особо допрет, что куда и зачем и так и будет привязан к одному и тому же языку и заранее виденным кодам, даже не к алгоритмам.

раскрыть ветку 3
0

CodeBlocks использую ,Она мне роднее
у курсовой было четкое ТЗ которое мне выдал преподаватель , там было написано что строго нужно использовать Visual Studio

раскрыть ветку 1
-1

Вот не надо. Студента надо прививать решать разносторонние задачи. Если весь семестр вдалбливать в голову то, как организовывать информацию, лучше не будет. Спасибо. Проходили.

Если человеку не дано понять, как организовать код, то ему и не надо писать программы. Способ мышления в таком возрасте уже не изменить.

Разработка игры - отличный способ закрепить знания (а иногда и получить их) после нудного семестра. И если и были какие-то недопонимания того, что где и откуда, то после 10 отладки игры в 10к строк кода, если уж понимание и не появится, то появится хотя бы желание понять, а это главное.

0
А какого рода проблемы? Вроде, для 15 студии не нужны отдельные руководства по этой теме.
-1

А где графика?

раскрыть ветку 7
0

ну , я же специально уточнил
нет смысла в реализации графики пока не запилю основную логику
язык для меня относительно новый, по крайней мере в  Visual Studio на нем не писал
а реализация графики процесс далеко не быстрый и отнимет у меня времени наверно даже больше чем потребуется на реализацию основных алгоритмов .

так что графику ждите ближе к концу

раскрыть ветку 6
0

Есть SDL, очень легкая в освоении библиотека. Писал на ней змейку, еще не зная толком ничего про классы.

раскрыть ветку 5
Похожие посты
Похожие посты не найдены. Возможно, вас заинтересуют другие посты по тегам: