Форумы на Наша-Life
Home user CP  
Календарь событий Найти других пользователей Часто задаваемые Вопросы Поиск  
Автор
Тема
Создать Новую Тему    Ответить
Vasez
(Лесной санитар)

Зарегистрирован: Apr 2006
Проживает: Россия/Петербург
Написал: 479 сообщений

Оценка: 18 Votes 18 чел.

Основы программирования
Сообщение #751141
Вот решился, наконец-то заняться программированием на C++, и тут возникло несколько вопросов:
Не подскажете книгу желательно в электронном виде(на русском языке), где подробно разжёвывается программирование для новичков на C++ В среде вижуал студио 2005?


На какие аспекты языка стоит особенно обратить внимание, чтобы в дальнейшем программировать под хл2?
Old Post 29-07-2008 11:48
Vasez отсутствует Посмотреть данные 'Vasez' Отправить Приватное Сообщение для 'Vasez' Найти другие сообщения 'Vasez' Добавить Vasez в Список Друзей
Править/Удалить Сообщение Ответить с Цитированием
romanshuvalov
(Музыкант и разработчик игр)

Зарегистрирован: Jul 2007
Проживает: Россия/Тольятти
Написал: 819 сообщений

Оценка: 35 Votes 35 чел.

Developer Старожил 
Сообщение #751223
Шилдт Герберт - C++ руководство для начинающих

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

в электронном виде (отсканированная) должна где-то быть, поищи.

ALPINE добавил 29-07-2008 в 14:15:24:
P.S. обращать внимание надо на всё. в особенности, наверное, на классы и на всё, что их касается (наследование и т.п.).
Роман
Old Post 29-07-2008 14:02
romanshuvalov отсутствует Посмотреть данные 'romanshuvalov' Отправить Приватное Сообщение для 'romanshuvalov' Посетить домашнюю страничку romanshuvalov Найти другие сообщения 'romanshuvalov' Добавить romanshuvalov в Список Друзей
Править/Удалить Сообщение Ответить с Цитированием
KLIMaka
(Президент Мира - Броука!)

Зарегистрирован: Dec 2007
Проживает: Украина/Запорожье
Написал: 456 сообщений

Оценка: 28 Votes 28 чел.

Сообщение #751245
Думаю, тему можно прикрепить, ибо вопрос такой вставал здесь неоднократно, и заодно люди знающие смогут здесь отписать свое мнение единожды, давая тем самым отправную точку начинающим.

Сначала к вопросу об литераторе. Книг существует великое множество, и брать для начала нужно то, до чего дотянутся руки. Брать желательно книги в названии которых присутствуют такие слова как: «самоучитель», «начинающим», «руководство» и т.д. В качестве первого опыта подойдет практически любая такая книга. Это уже потом, набравшись опыта можно отличить хорошую книгу от плохой. Вот список признанных книг:
- Стивен Прата Лекции и упражнения по С++
- Герберт Шилдт. С++. Руководство для начинающих
- Стенли Б. Липпман и Жози Лажойе. С++ Вводный курс.
- Роберт Лафоре Объектно-ориентированное программирование в С++
Кстати, «С++ для чайников» - тоже весьма неплохой выбор. Насчет литературы конкретно об студии – это как-то мимо меня прошло.

Теперь к специфике СДК. Главное, конечно же, уметь читать и понимать код (плюс английский язык). Ибо самая полная и достоверная информация об программировании в ХЛ2 находится именно в коде. Все эти туторы – это конечно очень хорошо, но на копипасте далеко не уедешь. По порядку:
- Нужно понимать что обозначает та или иная запись. Что, обозначает «*», чем отличается «.» от «->» или передача параметра по ссылке или по значению. Что обозначает кейворд const и где он используется и т.д.
- Типы данных. Явные, неявные приведения , размеры данных, последовательность вычисления, битовые операции, желательно хотя бы примерное знание об представлениях данных (почему над float нельзя проводить битовые сдвиги).
- Типы памяти. Автоматическая, статическая, динамическая – чем отличаются, как объявляются. Время жизни, область видимости. Ссылки, константы указатели. Оператор new и утечки памяти. Вообще, от прямого менеджмента памятью стоит воздержатся.
- ООП. Объекты, полиморфизм, наследование, иерархии классов. Абстрактные классы.
- Препроцессор. Макроопределения и их использование.
- Компоновка. Заголовочные файлы, обьявления, определения, единица компиляции, экстерны, линковка.
- Шаблоны. Основные понятия, специализация, ограничения.

Ну это первое, что в голову пришло… Еще к этому дополнительно стоило бы знать что либо об векторах, матрицах, аффинных преобразованиях, полярных координатах, RBGA-цветовом поле.

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

Вот, собсно, пока все…
Old Post 29-07-2008 14:34
KLIMaka отсутствует Посмотреть данные 'KLIMaka' Отправить Приватное Сообщение для 'KLIMaka' Найти другие сообщения 'KLIMaka' Добавить KLIMaka в Список Друзей
Править/Удалить Сообщение Ответить с Цитированием
freeman85
(lolwut?!)

Зарегистрирован: Oct 2006
Проживает: /etc/fstab
Написал: 2174 сообщений

Оценка: 70 Votes 70 чел.

Сообщение #751931
Герберт Шилдт. С++. Руководство для начинающих
Стивен Прата. Язык программирования C++. Лекции и упражнения.
Роберт Лафоре Объектно-ориентированное программирование в С++
Стенли Б. Липпман и Жози Лажойе. С++ Вводный курс
Качаем...
P.S.: Может тему прикрепить что бы вопросов не возникало?

freeman85 добавил 31-07-2008 в 20:21:36:
Надо бы посмотреть завтра, как качество на этих сканах.

freeman85 добавил 31-07-2008 в 20:24:49:
P.S.: поправил ссылки.
freeman85 добавил 04-09-2008-15-48(МСК):
Перезалил Герберт Шилдт. С++. Руководство для начинающих.
http://freeman85.net - Мой блог
OpenLife
Twitter || Last.FM || Хабрахабр || Facebook || в Жопе
cat /dev/urandom > /dev/sda
Хочешь задать вопрос? Заюзай Google! http://google.com

Поправил freeman85 04-09-2008 в 12:51

Old Post 31-07-2008 19:03
freeman85 отсутствует Посмотреть данные 'freeman85' Отправить Приватное Сообщение для 'freeman85' Посетить домашнюю страничку freeman85 Найти другие сообщения 'freeman85' Добавить freeman85 в Список Друзей
Править/Удалить Сообщение Ответить с Цитированием
Arrowdodger
(Member)

Зарегистрирован: Mar 2008
Проживает: Russian Federation/
Написал: 46 сообщений

Оценка: 0 Votes

Сообщение #752369
а книги по программированию под сурс есть? где описывается структура движка и т.п.
неужели каждая команда кодеров, которая хотела сделать мод сама перерывала весь солюшен пока разбиралась в нем?
Old Post 02-08-2008 07:31
Arrowdodger отсутствует Посмотреть данные 'Arrowdodger' Отправить Приватное Сообщение для 'Arrowdodger' Посетить домашнюю страничку Arrowdodger Найти другие сообщения 'Arrowdodger' Добавить Arrowdodger в Список Друзей
Править/Удалить Сообщение Ответить с Цитированием
Segr
(Администратор)

Зарегистрирован: Aug 2001
Проживает: Россия/Одинцово
Написал: 7941 сообщений

Оценка: 262 Votes 262 чел.

Админ cs.nashalife.ru Очень приятно, Царь Старожил Команда NashaLife Большой респект! 
 
Сообщение от модератора
Сообщение #752377
Тему прикрепил...
Желательно в теме давать именно рекомендации о том что и где почитать
Old Post 02-08-2008 08:03
Segr отсутствует Посмотреть данные 'Segr' Отправить Приватное Сообщение для 'Segr' Посетить домашнюю страничку Segr Найти другие сообщения 'Segr' Добавить Segr в Список Друзей
Править/Удалить Сообщение Ответить с Цитированием
 
KLIMaka
(Президент Мира - Броука!)

Зарегистрирован: Dec 2007
Проживает: Украина/Запорожье
Написал: 456 сообщений

Оценка: 28 Votes 28 чел.

Сообщение #752441
2 Arrowdodger

Здесь все книги по сурсу
http://developer.valvesoftware.com/wiki/Books

Как можешь заметить, ни одной книги об программировании под сурс там нет, увы.


Разобраться во ВСЕМ движке - это дело непосильное. Модеры конкретно выделяют для себя те части, которые они решили модифицировать или внести что-то новое, и уже в этом направлении начинают копать.

Попробую обрисовать некую общую структуру:

1 «Где вы это видели в оригинале?» Начинать нужно именно с этого вопроса. Сумбурные фантазии на тему «телепатического воздействия через стены» стоит отложить на то время, когда будет побольше опыта и понимания логики движка. Сначала стоит сосредоточится именно на модификации уже существующих возможностей. Например, вам захотелось модифицировать AR2 так, чтобы вместо шаров он пускал гранаты. Где гранаты в игре пускаются? Правильно, в СМЖ.

2 «Вы нашли, где это было в игре? Теперь стоит найти, где это место в коде» Да, это очень важно. Если в конкретном случае с гранатами все просто (идем и смотрим в weapon_smg1.cpp), это еще не значит, что так будет всегда. Например, где искать код, отвечающий за конвульсивно дергающиеся от электричества рагдоллы? Здесь нужно идти на первый этап, заметить, что такие рагдоллы остаются от убиенных мегафизкананом, и идти в weapon_physcannon.cpp. Но конкретно там, вы ничего не найдете! Только тщательно отслеживая цепь вызовов можно отследить то место, где создается этот дергающийся рагдолл. Как вы уже заметили, ничего, кроме знания языка вам здесь не поможет. Нужно знать когда, что, в какой последовательности выполняется. От точки, в которую вас привел первый пункт нужно двигаться сразу в двух направлениях: вниз - в функции, которые вызываЕт данный метод, и вверх – в функции, которые вызываЮт данный метод. Это помогает лучше понять механику обработки конкретного события, и дает общее представление об обработке событий вообще.

3 «От частного к общему» Теперь, кода вы проследили всю цепь действий, сопутствующих тому или иному событию, необходимо найти точку общности. Поясню это на примере. Вы хотите изменить вспышку от выстрела из пистолета. Можно идти в код пистолета, и в событии, которое соответствует выстрелу добавить кода (там дымок, или спрайтики каки-небудь). Но это всего лишь частный случай. Общим решением есть модификация DoMuzzleFlash(), которая централизованно обрабатывает все вспышки из всех стволов. Модификация и создание централизованной обработки схожих событий – очень важная деталь грамотного программирования, ибо локализует код и заметно упрощает его отладку и модифицирование. Но это не значит, что всегда стоит стремится к построению обобщенного кода, иногда задачи настолько малы и незначительны, что их эффективнее решать частным подходом.

4 «Документируйте!!!» Абсолютно все изменения, которые вы внесли в движок просто необходимо каким-либо образом помечать, и комментировать. Во-первых, если что-то пойдет не так, как вам хочется, вы сможете всегда найти все места, в которых вы что-то меняли (желательно в тех местах оставлять оригинальный код, чтобы при необходимости его восстановить) . Во-вторых вы просто можете банально забыть, для чего это делали, и что эта модификация привносит в общую картину.

5 «Отладка» Это, на ряду с проектированием, центральнейшее понятие программирования. Ведь нужно не просто писать код, нужно чтобы он работал, а главное – работал правильно. Это слишком обширная тема, поэтому я здесь дам лишь один совет: старайтесь отслеживать поведение своих модификаций. Для этого очень удобно использовать системные сообщения, которые уже в игре будут вас оповещать об процессе выполнения кода.

И еще. Чтобы разобраться в сурсе, нужно под него писать. Никакая книга не заменит вам вашего личного опыта. И ежедневное чтение исходников дает такой же полезный эффект как чтение толкового словаря русского языка или какой-нибудь священной книги (Библия, Тора, Каран. Нужное подчеркнкть)
Old Post 02-08-2008 12:42
KLIMaka отсутствует Посмотреть данные 'KLIMaka' Отправить Приватное Сообщение для 'KLIMaka' Найти другие сообщения 'KLIMaka' Добавить KLIMaka в Список Друзей
Править/Удалить Сообщение Ответить с Цитированием
Megalan
(Мне нечего сказать :))

Зарегистрирован: Sep 2005
Проживает: Russian Federation/
Написал: 2234 сообщений

Оценка: 49 Votes 49 чел.

Сообщение #752526
самое лучшее это учится на чужом коде, проверенно))
Old Post 02-08-2008 18:26
Megalan отсутствует Посмотреть данные 'Megalan' Отправить Приватное Сообщение для 'Megalan' Найти другие сообщения 'Megalan' Добавить Megalan в Список Друзей
Править/Удалить Сообщение Ответить с Цитированием
redbox
(Senior Member)

Зарегистрирован: Jan 2008
Проживает: Ukraine/Dnepr
Написал: 766 сообщений

Оценка: 16 Votes 16 чел.

Сообщение #764150
KLIMaka
все понравилось, но если честно, пункт 4 порадовал

и тут рождается вопрос-может можно как то в вижуал студии помечать измененные файлы?
Old Post 04-09-2008 05:35
redbox отсутствует Посмотреть данные 'redbox' Отправить Приватное Сообщение для 'redbox' Посетить домашнюю страничку redbox Найти другие сообщения 'redbox' Добавить redbox в Список Друзей
Править/Удалить Сообщение Ответить с Цитированием
KLIMaka
(Президент Мира - Броука!)

Зарегистрирован: Dec 2007
Проживает: Украина/Запорожье
Написал: 456 сообщений

Оценка: 28 Votes 28 чел.

Сообщение #764169
Ну вот на собственном опыте этот 4й пункт мне сэкономил уйму времени и миллиарды нервных клеток при переносе кода с 2006 СДК на ОВ. Ибо произошло такое, что я всеже забыл откоментить одно изменение и потом с пеной у рта на протяжении двух часов пытался судорожно вспомнить где же я это менял.

Насчет вижуал студии... Я как-бы и не пытался именно средствами среды пользоватся, потому что для меня намного быстре и удобнее нажать Alt+F7 в Тоталкомандере и искать через него. Поэтому я оставлял лишь текстовые коменты и никаких закладок студийных не делал.

Вот могу свой способ коментирования привести.

//KLIMaka DBZ_WEAP_FIX 0006 31.08.08
Первое KLIMaka - имя редактора. Пока я один с кодом работаю, но вдруг случится такое что еще кто-то присоединится и чтобы различать чье это изменение.
Второе DBZ_WEAP_FIX - класс изменения. Т.е. к чему относится это изменение. Очень удобно для локализации отдельных независимых изменений. Это для того чтобы можно было найти весь код, измененный для определенной цели. Например хочется отключить фишку с отдачей - ищим все вхождения DBZ_KICK и просто убираем этот код.
Все легко и не нужно думать что ты отключишь чего-то лишнего или не все.
Третье 0006 - Уникальный номер в пределах класса. Это для того чтобы не захламлять код длинными коментами а выносить их в отдельный файл и при надобности этот комент находить по его классу и номеру.
Четвертое - 31.08.08. Дата создания/модификации. Для того чтобы знать когда этот код был в последний раз модифицирован. Если он модифицирован множество раз, то пищу несколько дат.

Данный подход доказал собственую жизнеспособность и отвечает всем моим требованиям. Документировать легко, искать легко, переносить легко, контролировать легко
Old Post 04-09-2008 09:10
KLIMaka отсутствует Посмотреть данные 'KLIMaka' Отправить Приватное Сообщение для 'KLIMaka' Найти другие сообщения 'KLIMaka' Добавить KLIMaka в Список Друзей
Править/Удалить Сообщение Ответить с Цитированием
SlimeR
(NPC)

Зарегистрирован: Nov 2007
Проживает: Steam Community/
Написал: 75 сообщений

Оценка: 2 Votes 2 чел.

Сообщение #824721
Ну допустим научился я програмировать на С++, и што дальше, как кодить то? Ведь структуры Сурса я не знаю
Old Post 23-02-2009 14:18
SlimeR отсутствует Посмотреть данные 'SlimeR' Отправить Приватное Сообщение для 'SlimeR' Найти другие сообщения 'SlimeR' Добавить SlimeR в Список Друзей
Править/Удалить Сообщение Ответить с Цитированием
freeman85
(lolwut?!)

Зарегистрирован: Oct 2006
Проживает: /etc/fstab
Написал: 2174 сообщений

Оценка: 70 Votes 70 чел.

Сообщение #824736
Цитата:
Оригинальное сообщение от SlimeR
Ну допустим научился я програмировать на С++, и што дальше, как кодить то? Ведь структуры Сурса я не знаю

Если умеешь программировать, ты поймёшь как устроен сорс...(не всё сразу =) ) Ещё можно поучиться на чужом коде, но на копипасте особо не научишься, надо понимать этот код...
http://freeman85.net - Мой блог
OpenLife
Twitter || Last.FM || Хабрахабр || Facebook || в Жопе
cat /dev/urandom > /dev/sda
Хочешь задать вопрос? Заюзай Google! http://google.com
Old Post 23-02-2009 14:59
freeman85 отсутствует Посмотреть данные 'freeman85' Отправить Приватное Сообщение для 'freeman85' Посетить домашнюю страничку freeman85 Найти другие сообщения 'freeman85' Добавить freeman85 в Список Друзей
Править/Удалить Сообщение Ответить с Цитированием
SlimeR
(NPC)

Зарегистрирован: Nov 2007
Проживает: Steam Community/
Написал: 75 сообщений

Оценка: 2 Votes 2 чел.

Сообщение #824761
freeman85, А есть где-нить учебник по кодингу на сурсе, где подробно рассмативается его структура ?
З.Ы. Желательно на русском.
Old Post 23-02-2009 15:45
SlimeR отсутствует Посмотреть данные 'SlimeR' Отправить Приватное Сообщение для 'SlimeR' Найти другие сообщения 'SlimeR' Добавить SlimeR в Список Друзей
Править/Удалить Сообщение Ответить с Цитированием
freeman85
(lolwut?!)

Зарегистрирован: Oct 2006
Проживает: /etc/fstab
Написал: 2174 сообщений

Оценка: 70 Votes 70 чел.

Сообщение #824776
Тему прочитай хотя бы =^_^=
Тыкаю конкретно пальцем
Цитата:
KLIMaka
Здесь все книги по сурсу
http://developer.valvesoftware.com/wiki/Books
Как можешь заметить, ни одной книги об программировании под сурс там нет, увы.
http://freeman85.net - Мой блог
OpenLife
Twitter || Last.FM || Хабрахабр || Facebook || в Жопе
cat /dev/urandom > /dev/sda
Хочешь задать вопрос? Заюзай Google! http://google.com
Old Post 23-02-2009 16:39
freeman85 отсутствует Посмотреть данные 'freeman85' Отправить Приватное Сообщение для 'freeman85' Посетить домашнюю страничку freeman85 Найти другие сообщения 'freeman85' Добавить freeman85 в Список Друзей
Править/Удалить Сообщение Ответить с Цитированием
PNX
(какая разница, кто я)

Зарегистрирован: Sep 2005
Проживает: Россия/Калуга
Написал: 314 сообщений

Оценка: 16 Votes 16 чел.

Сообщение #847048
Ален И. Голуб - Правила программирования на C и C++
здесь или здесь

Рекомендую почитать скорее не начинающим, а приступающим к серьезному проекту. Книга читается довольно легко, особенно начало.
Не во всем согласен с автором, но одно несомненно: очень полезная книга. В частности, для понимания некоторых вещей в коде Source.
Сборник полезной информации по модостроению (10-09-2011): http://beanet.ru/content/prog/devps.html
Online-версия: http://www.beanet.ru/modfaq

Игрокам Team Fortress 2 посвящается...
Понравилось? - добро пожаловать на страницу проекта Smile Fortress: точки
Old Post 23-04-2009 04:14
PNX отсутствует Посмотреть данные 'PNX' Отправить Приватное Сообщение для 'PNX' Найти другие сообщения 'PNX' Добавить PNX в Список Друзей
Править/Удалить Сообщение Ответить с Цитированием
Все время в GMT . Сейчас 16:47.
Создать Новую Тему    Ответить

Быстрый ответ
Ваше Имя:
Хотите Зарегистрироваться?
Ваш Пароль:
Забыли свой Пароль?
Вы можете оставлять свои комментарии анонимно, просто введя свои имя и оставив пустым поле пароля.
Ваш ответ:

[проверить размер]
[транслит в win] | [?]
[русская клавиатура]

Дополнительно: Подтверждение по E-Mail


Быстрый переход:
 
Оцените эту Тему:
 

Правила форума:
Создание Тем не разрешено
Создание Сообщений разрешено
Создавать Вложения не разрешено
Редактирование Сообщений не разрешено
Коды HTML запрещены
Коды форума разрешены
Смайлики разрешены
Коды [IMG] запрещены