Пишем свой Морской Бой , на пути к успешной курсовой......(часть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.

Правила сообщества

ОБЩИЕ ПРАВИЛА:

- Уважайте чужой труд и используйте конструктивную критику

- Не занимайтесь саморекламой, пишите качественные и интересные посты

- Никакой политики


СТОИТ ПУБЛИКОВАТЬ:

- Посты о Вашей игре с историей её разработки и описанием полученного опыта

- Обучающие материалы, туториалы

- Интервью с опытными разработчиками

- Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
- Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе

НЕ СТОИТ ПУБЛИКОВАТЬ:

- Посты, содержащие только вопрос или просьбу помочь
- Посты, содержащие только идею игры

- Посты, единственная цель которых - набор команды для разработки игры

- Посты, не относящиеся к тематике сообщества

Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.

ЗАПРЕЩЕНО:

- Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции

- Выдавать чужой труд за свой

Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.


О РАЗМЕЩЕНИИ ССЫЛОК:

Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:

- Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества

- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз

- Cсылка размещается в формате: "Страница игры в Steam: URL"