|
4 / 4 / 0
Регистрация: 13.12.2016
Сообщений: 246
|
|
Направьте новичка в нужное русло :)18.02.2017, 23:42. Показов 3322. Ответов 31
Собственно сразу к вопросу. Имеется очень большое желание начать писать игры на C++. Вот... Пока что всё.
Проблема в том, что пока что прочитал только 100-150 страниц учебника Р.Лафоре 4-е издание. Дошел примерно до классов. Знаю, что сначала следует выучить язык, а потом только, спустя много времени практики, пробовать что-то делать. Но есть ли возможно учить С++ и делать одновременно, как позволяют на данный момент мои знания, игру? Может кто посоветовать что в этом русле? В идеале хочется сделать игру жанра RPG. Для игры ведь нужен движок? Хочу взять какой-нибудь за основу, пока приглянулся UE4 - из-за блупринта (blueprint) и возможности писать на языке С++. Но вот проблема - скачал я все: Visual Studio + UE4 - а дальше что делать не знаю, могу копипастить видеуроки - но разве это считается разработкой? Я понимаю, что изначально должен быть, в игре жанра RPG, редактор персонажей допустим - то есть одна из сцен, вторая сцена - сам мир, в котором происходят действия? Ну вот как это с помощью текста вывести на экран? Какие команды использовать? Я только и знаю, что cout или cin В общем , я понимаю, что до разработки игры мне далеко еще ой как! Но может для начала мне кто-нибудь посоветовать что-нибудь дельное? За 2D не хочу браться. Не знаю почему... Может потому,что много спрайтов нужно будет рисовать - а я этого не умею. Если я что-то не так написал, то просто не разбираюсь в этом еще - поправьте как надо , если что. Заранее спасибо, жду вашего мнения и советов.
0
|
|
| 18.02.2017, 23:42 | |
|
Ответы с готовыми решениями:
31
направьте в нужное русло Направьте меня в нужное русло :) Пожалуйста, направьте в нужное русло! |
|
|
||
| 19.02.2017, 22:53 | ||
|
Это только первый раздел такой - краткий обзор того, что и как в языке. Его можно читать до тех пор, пока понятно, а как только становится непонятно - бросать это дело, и переходить ко второму разделу (где описание начинается с типов, которые есть в языке). Первый раздел - чисто ознакомительный, штудировать его до конца сразу вовсе не обязательно. Не забудьте только время от времени к нему возвращаться, по мере продвижения по материалу основной книги. В общем, просто переходите ко второму разделу, и до поры не беспокойтесь о том, что оставили в первом.
0
|
||
|
4 / 4 / 0
Регистрация: 13.12.2016
Сообщений: 246
|
|
| 19.02.2017, 23:18 [ТС] | |
|
Спасибо, буду пробовать еще раз тогда его читать) Пошел разбираться) Спасибо всем, буду по мере продвижения своего писать сюда или так нельзя на форуме?
0
|
|
|
|
|
| 19.02.2017, 23:41 | |
|
Можно в принципе, если будут какие-то общие вопросы в развитие общей темы.
Если будут конкретные вопросы "не понял вот это место, как ни пытался, подскажите", то лучше создавать отдельную тему в соответствующем разделе.
0
|
|
|
4 / 4 / 0
Регистрация: 13.12.2016
Сообщений: 246
|
|||||||||||||||||||||||||||||||
| 20.02.2017, 23:38 [ТС] | |||||||||||||||||||||||||||||||
|
Можно вопросы по классам?
Тут придумал такой код:
2) private - только инициализация переменных и никакого доступа к ним никто не имеет, кроме разве что все, кто внутри класса? То есть в классе можно менять значения, которые в private? А вне класса работает только set? 3) По поводу конструкторов и деструктуров - какой смысл их работы? Как они записываются ? Я как вроде его записывать - но для чего он? Мой же код с конструктором и деструктур., так ?
Ошибка в 13 строке: должно быть
Добавлено через 1 час 13 минут Написал новый код:
Чем отличается вот эти два метода объявления?
0
|
|||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||
| 21.02.2017, 00:05 | |||||||||||||||||||||||||||
Сообщение было отмечено Abomination_25 как решение
Решение
0. Такие довольно конкретные вопросы по языку стоит задавать в разделе C++.
1. Есть такое понятие в ООП, как инвариант. Инвариант - это некоторая "аксиома", которая должна выполняться для объекта класса в любой момент времени (если инвариант не выполняется, то это значит, что в программе произошла ошибка и данные некорректны). Инварианты того или иного класса будут свои для каждой конкретной программы - это вопрос бизнес-логики программы. Примеры инвариантов: "строка имени персоны должна быть непустой", "сумма характеристик сила-ловкость-выносливость персонажа должна быть не меньше 10", "вершины треугольника не должны лежать на одной прямой", "название города может быть одним из вариантов - Нью Москва или Старые Васюки". Существует множество других примеров инвариантов, в т.ч. более сложных и вообще с трудом выражаемых в виде фразы на русском языке. У некоторых классов в программе есть такие инварианты, у некоторых их нет. Первые - это типичные классы из ООП, которым присуща т.н. инкапсуляция. Вторые - это просто способ сгруппировать данные (например, класс анкеты, содержащей три текстовых поля для ответа на три вопроса в свободной форме; причем можно отвечать как угодно, а можно вообще не отвечать - здесь нет инвариантов). Так вот, классы без инвариантов могут спокойно предоставить public доступ ко всем своим данным - для них не существует некорректного набора значения полей. Классы же с инвариантами должны защищать эти самые инварианты - поля, для которых есть эти инварианты заносятся в private секцию. Код, который находится вне класса, либо вовсе не знает о наличии этих переменных (и не может с ними работать), либо ему предоставляются public-функции, которые он может вызывать. И вот уже эти функции работают с приватными переменными таким образом, чтобы инварианты соблюдались. Например, при создании персонажа вы распределяете характеристики и вызываете функции изменения характеристики:
Что касается геттеров и сеттеров, не работающих с такими инвариантами, то часто вам нужно дать возможность внешнему коду читать значение переменной класса - для этого вы предоставляете геттер к переменной. При этом возможности устанавливать ее значения снаружи класса может либо не быть вовсе - вы не пишете сеттер; либо они ограничены только использованием функций, обеспечивающих не просто установку значения, но и соблюдение инвариантов. А вот если у нас есть приватная переменная и тривиальные геттер и сеттер, которые просто задают и возвращают значение переменной без всякой доп. работы, то это значит, что с точки зрения ООП здесь допущена ошибка. Такая пара дает возможность внешнему коду произвольно менять значение переменной, никак не отличающуюся от помещения переменной в public-секцию, зато гордо называет себя "инкапсуляцией" (врет и не краснеет!) (Нужно, впрочем, отметить, что для создания такой пары тривиальных геттера и сеттера могут быть специальные причины - например для реализации property - но это относится не к ООП, и вам пока не стоит об этом думать) 2. Вроде про это тоже ответил. 3. Конструктор и деструктор - это специальные функции, которые вызываются при создании и уничтожении объектов класса. Создать объект можно двумя способами - на стеке (просто объявив переменную в теле функции) и динамически (с помощью оператора new). Объект, созданный на стеке, уничтожается в тот момент, когда программа вышла из того блока из фигурных скобок, где была объявлена переменная. Объект, созданный с помощью new, уничтожается только когда его удаляют с помощью delete. В момент создания объекта вызывается его конструктор, который задает все стартовые значения переменных, при необходимости выделяет память, открывает сокеты и производит разную другую инициализацию. В момент уничтожения объекта вызывается деструктор, который должен освободить память и другие ресурсы, которые были захвачены за время жизни объекта (в конструкторе или позже) - иначе программа будет работать неправильно.
Это, конечно, далеко не все, что можно сказать про конструкторы и деструкторы. Добавлено через 8 минут Вот объявление (и одновременно реализация) конструктора:
1
|
|||||||||||||||||||||||||||
|
4 / 4 / 0
Регистрация: 13.12.2016
Сообщений: 246
|
||||||
| 21.02.2017, 00:23 [ТС] | ||||||
|
Спасибо за быстрый и полный ответ) Правда еще не совсем разбираюсь в такие моментах как Hero::increaseStrength() - про эти "::" не знаю еще. А еще про статический способ создания объектов почитаю.
И не очень понял код ваш, можете рассказать,что имелось в виду?
0
|
||||||
|
|
|
| 21.02.2017, 23:08 | |
|
Hero::increaseStrength() {/* ... */} - это реализация функции-члена класса Hero вне тела этого класса. Объявление класса вместе со всей его начинкой (списком переменных и функций) обычно сидит в заголовочном файле (*.h), а реализация функций-членов - в файле исходного кода (*.cpp). Про работу в нескольких файлах почитаете в соответствующей главе Страуструпа.
Что касается первого if - то если условие выполняется, то выходим из функции. Опять же, прочитаете про это в главе про функции. Сначала вам нужно более-менее освоиться с базовыми вещами вроде if, циклов, функций и переменных. Слишком сильно в это не стоит погружаться - а то привыкнете писать только в процедурном стиле (как в Си), а потом придется переучиваться на ООП. Но нужно с листа читать чужой код, написанный такими средствами (не слишком замороченный, а обычный). После этого можно изучать классы, ООП и сопутствующие вещи.
0
|
|
|
7 / 7 / 9
Регистрация: 20.11.2016
Сообщений: 120
|
|
| 03.03.2017, 00:33 | |
|
Даёшь С++ мозговым Штурмом!
Abomination_25, Лафоре - это Отличная книга. В ней много вопросов и упражнений. Автор никогда не забегает вперёд, и не бежит впереди поезда. Все ответы - и решения к упражнениям присутствуют. Двигаться в изучении С++ нужно последовательно. ВЫПОЛНИТЕ ВСЕ УПРАЖНЕНИЯ. Второй пункт - это Стандартная библиотека С++. С ней нужно знакомиться отдельно, как минимум - прочесть книгу. Нельзя забывать про QT В том что касается сферы игр - Можно начинать программировать на Action Script3, и "переезжать" на более актуальный HTML5/ лучшая книга по теме - это Колин Мук. Запомните 3 Золотых правила обучения программированию: "1. Набирать в день не меньше 100 страниц кода" "2. Лучше набирать 250 страниц" "3. 1000 страниц в день"
0
|
|
|
|
||||
| 03.03.2017, 19:17 | ||||
|
0
|
||||
| 04.03.2017, 07:13 | ||
|
0
|
||
|
7 / 7 / 9
Регистрация: 20.11.2016
Сообщений: 120
|
|
| 04.03.2017, 14:19 | |
|
Тоже проходил курс эргосоло!
Сколько у вас ушло времени освоения метода слепой печати полностью? - у меня это заняло три недели. Через три недели - владел методикой на стандартной скорости. Слепой метод - помогает, например, Изучению Иностранных Языков. Слова и построение предложений - становятся частью механического набора. Помимо иностранных языков - есть также ТРАНСЛИТ. Помешает ли слепой метод в освоении программирования? РЕЧЬ ИМЕННО О СВОЁМ КОДЕ. На сайте спидкодер - можете потренироваться в наборе Кода. http://www.speedcoder.net/ Опеределённо и точно могу сказать ОДНО: Многим это поможет Разные типы мышления. Соображать легко и быстро так же важно - как и глубоко и усидчиво размышлять
0
|
|
| 04.03.2017, 18:37 | |||
|
Не по теме:
0
|
|||
| 04.03.2017, 18:37 | |
|
Направьте в русло Направте в нужное русло Направте в нужное русло...
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|