|
4 / 4 / 0
Регистрация: 13.12.2016
Сообщений: 246
|
|
Направьте новичка в нужное русло :)18.02.2017, 23:42. Показов 3232. Ответов 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 | |
|
Направьте в русло Направте в нужное русло Направте в нужное русло...
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Нейтральные знания ..., ... чистая наука. Пока что-то проходит модерацию на Хабре, стоит развить мысль ...
Hrethgir 20.07.2026
К таким радикальным взглядам я конечно в той публикации не приходил, но чтобы скоротать вечер, решил углубиться немного.
1. Почему показания термометра заряжены целью?
Цель заложена в самом. . .
|
Установка нескольких штампов электронной подписи в строго определенных местах файла docx
ВладимирСамохин 19.07.2026
(В!) Работа с Электронной подписью - это неотъемлемая часть современного документооборота. Но что делать, если нужно поставить несколько штампов электронной подписи в строго определенных местах. . .
|
сукцессия 35. Научная статья о проделанной работе
anaschu 19.07.2026
Написал в формате латекс и пдф
|
Вангую, что это не пройдёт модерацию, и на неделе я запущу свой сервер.
Hrethgir 19.07.2026
Эта публикация сейчас в песочнице и ждёт приглашения.
https:/ / habr. com/ ru/ sandbox/ 295048/
По ссылке 403. Не очень информативно такую ссылку постить.
Запись от Usaga размещена Сегодня в 06:46 . . .
|
|
сукцессия 33. открытые вопросы от клауде
anaschu 19.07.2026
"Что накопилось за эту часть А — тринадцать правок, из которых шесть пришли из ваших вопросов и каждая оказалась реальной ошибкой, а не калибровкой: односторонний симбиоз, отсутствующий листопад,. . .
|
32 сукцессия
anaschu 19.07.2026
сукцессия 28‑мерное ядро стабилизировано
Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не «подкручивает» сходимость —. . .
|
сукцессия 31: модель микоризы - это модель ещё нескольких явлений, социальных и экономических
anaschu 18.07.2026
Теория «Всего»: апдейт v1. 1. 2 — 28‑мерное ядро стабилизировано
Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не. . .
|
сукцессия 30. Массив проверяющих друг друга моделей
anaschu 18.07.2026
Архитектура сети взаимопроверяющих моделей микоризной сукцессии (v2. 0)
Развитие тензорного ОДУ-ядра и создание кросс-платформенного калибровочного полигона
Уважаемые коллеги!
В продолжение. . .
|