Благодарности....19
Об авторе....20
Введение....21
Для кого эта книга....22
Как построена книга....23
Условные обозначения, используемые в книге....25
Исходный код к книге....26
Несколько слов о компиляторах....27
От издательства....28
Глава 1. Типы, переменные, стандартный ввод-вывод. Игра «Утраченный клад»....29
Введение в C++....29
Использование языка C++ при программировании игр....30
Создание исполняемого файла....30
Исправление ошибок....31
Понятие о стандарте ISO....32
Пишем первую программу на C++....33
Знакомство с программой Game Over....33
Комментирование кода....34
Использование пробелов....34
Включение других файлов....35
Определение функции main()....35
Отображение текста в стандартном выводе....36
Завершение инструкций....37
Возвращение значения от функции main()....37
Работа с пространством имен std....37
Знакомство с программой Game Over 2.0....38
Использование директивы using.....38
Знакомство с программой Game Over 3.0....38
Использование объявлений using....39
Когда следует использовать using....39
Работа с арифметическими операторами....39
Знакомство с программой Expensive Calculator....40
Сложение, вычитание, умножение....40
Понятие о делении без остатка и делении с плавающей запятой....41
Работа с оператором деления по модулю....41
Понятие о последовательности операций....41
Объявление и инициализация переменных....42
Знакомство с программой Game Stats....42
Понятие о примитивах....43
Понятие о модификаторах типов....43
Объявление переменных....44
Именование переменных....45
Присваивание значений переменным....46
Инициализация переменных....47
Отображение значений переменных....47
Получение пользовательского ввода....48
Определение новых имен для типов....48
Типы, которые следует использовать....48
Выполнение арифметических операций с применением переменных....49
Знакомство с программой Game Stats 2.0....49
Изменение значения переменной....50
Использование комбинированных операторов присваивания....50
Использование операторов инкремента и декремента....51
Что делать с целочисленным переполнением....52
Работа с константами....53
Знакомство с программой Game Stats 3.0....53
Использование констант....54
Работа с перечислениями....55
Игра «Утраченный клад»....55
Настройка параметров программы....56
Получение информации от игрока....57
Сюжет....57
Резюме....58
Вопросы и ответы....59
Вопросы для обсуждения....60
Упражнения....61
Глава 2. Истина, ветвление и игровой цикл. Игра «Угадай число»....62
Понятие об истине....62
Использование инструкции if....63
Знакомство с программой Score Rater....63
Проверка условий true и false....64
Интерпретация значения как истинного или ложного....65
Работа с реляционными операторами....66
Вложение инструкций if....66
Работа с условием else....67
Знакомство с программой Score Rater 2.0....67
Создание двух способов ветвления....69
Использование последовательности инструкций с помощью условий else....69
Знакомство с программой Score Rater 3.0....70
Создание последовательности инструкций if с применением условий else....71
Использование инструкции switch....71
Знакомство с программой Menu Chooser....72
Создание нескольких вариантов ветвления....74
Использование циклов while....74
Знакомство с программой Play Again....74
Работа с циклом while....75
Использование циклов do....75
Знакомство с программой Play Again 2.0....76
Работа с циклом do....77
Использование инструкций break и continue....77
Знакомство с программой Finicky Counter....78
Создание цикла while (true)....79
Использование инструкции break для выхода из цикла....79
Использование инструкции continue для перехода в начало цикла....79
Когда следует использовать инструкции break и continue....80
Использование логических операторов....80
Знакомство с программой Designers Network....80
Использование логического оператора «И»....82
Использование логического оператора «ИЛИ»....83
Использование логического оператора «НЕ»....84
Понятие о порядке операций....84
Генерирование случайных чисел....85
Знакомство с программой Die Roller....85
Вызов функции rand()....86
Посев генератора случайных чисел....87
Расчет числа в заданном диапазоне....88
Понятие об игровом цикле....88
Знакомство с игрой Guess My Number....90
Применение игрового цикла....90
Установка игровых параметров....91
Создание игрового цикла....92
Завершение игры....92
Резюме....93
Вопросы и ответы....94
Вопросы для обсуждения....95
Упражнения....96
Глава 3. Циклы for, строки и массивы. Игра «Словомеска»....97
Использование циклов for....97
Знакомство с программой Counter....98
Подсчеты с помощью циклов for....99
Использование пустых инструкций в циклах for....100
Вложение циклов for....101
Понятие об объектах....102
Работа со строковыми объектами....103
Знакомство с программой String Tester....104
Создание строковых объектов....105
Конкатенация строковых объектов....106
Использование функции-члена size()....106
Индексация объекта string....106
Перебор символов в объектах String....107
Использование функции-члена find()....108
Использование функции-члена erase()....108
Использование функции-члена empty()....109
Работа с массивами....109
Знакомство с программой Hero's Inventory....109
Создание массивов....111
Индексация массивов....112
Обращение к функциям-членам элемента массива....113
Следите за границами массива....113
Си-строки....114
Использование многомерных массивов....115
Знакомство с программой Tic-Tac-Toe Board....115
Создание многомерных массивов....116
Индексация многомерных массивов....117
Знакомство с игрой «Словомеска»....117
Приступаем к разработке программы....118
Выбор слова для перемешивания....118
Перемешивание слова....119
Приглашение игрока....120
Начало игрового цикла....120
Прощание....121
Резюме....121
Вопросы и ответы....122
Вопросы для обсуждения....123
Упражнения....124
Глава 4. Библиотека стандартных шаблонов. Игра «Виселица»....125
Знакомство с библиотекой стандартных шаблонов....125
Работа с векторами....126
Знакомство с программой Hero’s Inventory 2.0....127
Подготовка к работе с векторами....128
Объявление вектора....128
Работа с функцией-членом push_back()....129
Работа с функцией-членом size()....129
Индексация векторов....130
Вызов функций-членов элемента....130
Использование функции-члена pop_back()....130
Использование функции-члена clear()....131
Использование функции-члена empty()....131
Работа с итераторами....131
Знакомство с программой Hero’s Inventory 3.0....131
Объявление итераторов....133
Перебор содержимого вектора....134
Изменение значения элемента вектора....136
Доступ к функциям-членам элемента вектора....136
Использование векторной функции-члена insert()....137
Использование векторной функции-члена erase()....138
Использование алгоритмов....138
Знакомство с программой High Scores....138
Подготовка к использованию алгоритмов....140
Использование алгоритма find()....140
Использование алгоритма random_shuffle()....141
Использование алгоритма sort()....141
Понятие о производительности векторов....142
Подробнее о росте векторов....142
Подробнее о вставке и удалении элементов....144
Исследование других контейнеров библиотеки STL....144
Планирование программ....145
Использование псевдокода....146
Пошаговое усовершенствование программы....146
Знакомство с программой «Виселица»....147
Планирование игры....147
Подготовка программы....148
Инициализация переменных и констант....148
Начало основного цикла....149
Получение вариантов от пользователя....149
Конец игры....150
Резюме....150
Вопросы и ответы....151
Вопросы для обсуждения....153
Упражнения....153
Глава 5. Функции. Игра «Безумные библиотекари»....154
Создание функций....154
Знакомство с программой Instructions....154
Объявление функций....155
Определение функций....156
Вызов функций....157
Понятие об абстрагировании....157
Использование параметров и возвращаемых значений....157
Знакомство с программой Yes or No....158
Возврат значения....159
Запись значений в параметры....160
Понятие об инкапсуляции....161
Понятие о переиспользовании ПО....162
Работа с областями видимости....163
Знакомство с программой Scoping....163
Работа с отдельными областями видимости....164
Работа с вложенными областями видимости....165
Использование глобальных переменных....166
Знакомство с программой Global Reach....167
Объявление глобальных переменных....168
Доступ к глобальным переменным....168
Скрывание глобальных переменных....168
Изменение глобальных переменных....169
Минимизация использования глобальных переменных....169
Использование глобальных констант....170
Использование аргументов, задаваемых по умолчанию....170
Знакомство с программой Give Me a Number....171
Задание аргументов, применяемых по умолчанию....172
Присваивание параметрам аргументов, задаваемых по умолчанию....172
Переопределение аргументов, задаваемых по умолчанию....173
Перегрузка функций....173
Знакомство с программой Triple....174
Создание перегруженных функций....175
Вызов перегруженных функций....175
Подстановка вызова функций....176
Знакомство с программой Taking Damage....176
Задание функций для подстановки....177
Вызов подставленных функций....177
Знакомство с программой «Безумные библиотекари»....178
Подготовка программы....178
Функция main()....179
Функция askText()....179
Функция askNumber()....180
Функция tellStory()....180
Резюме....181
Вопросы и ответы....181
Вопросы для обсуждения....183
Упражнения....183
Глава 6. Ссылки. Игра «Крестики-нолики»....184
Использование ссылок....184
Знакомство с программой Referencing....184
Создание ссылок....185
Доступ к значениям по ссылкам....186
Изменение значений через указывающие на них ссылки....187
Передача ссылок для изменения аргументов....187
Знакомство с программой Swap....188
Передача по значению....189
Передача по ссылке....190
Передача ссылок для обеспечения эффективности....190
Знакомство с программой Inventory Displayer....190
Несколько слов о подводных камнях, связанных с передачей ссылок....192
Объявление параметров как константных ссылок....192
Передача константной ссылки....192
Решение о том, как передавать аргументы....193
Возврат ссылок....193
Знакомство с программой Inventory Referencer....194
Возврат ссылки....195
Отображение значения возвращенной ссылки....196
Присваивание возвращенной ссылки другой ссылке....196
Присваивание возвращенной ссылки переменной....196
Изменение объекта с помощью возвращенной ссылки....196
Знакомство с игрой «Крестики-нолики»....197
Планирование игры....197
Подготовка программы....200
Функция main()....201
Функция askYesNo()....202
Функция askNumber()....202
Функция humanPiece()....203
Функция opponent()....203
Функция displayBoard()....203
Функция winner()....204
Функция isLegal()....205
Функция humanMove()....206
Функция computerMove()....206
Функция announceWinner()....209
Резюме....209
Вопросы и ответы....210
Вопросы для обсуждения....212
Упражнения....212
Глава 7. Указатели. Игра «Крестики-нолики 2.0»....213
Основы работы с указателями....213
Знакомство с программой Pointing....214
Объявление указателей....215
Инициализация указателей....216
Присваивание адресов указателям....216
Разыменование указателей....217
Переприсваивание указателей....218
Использование указателей на объекты....219
Понятие об указателях и константах....219
Использование константного указателя....220
Использование указателя на константу....221
Использование константного указателя на константу....221
Константы и указатели: итог....222
Передача указателей....223
Знакомство с программой Swap Pointer Version....223
Передача по значению....224
Передача константного указателя....225
Возврат указателей....226
Знакомство с программой Inventory Pointer....226
Возврат указателя....227
Использование возвращенного указателя для отображения значения....228
Присваивание указателю возвращенного указателя....229
Присваивание переменной значения, на которое указывает возвращенный указатель....229
Изменение объекта посредством возвращенного указателя....230
Понятие о взаимоотношениях указателей и массивов....231
Знакомство с программой Array Passer....231
Использование имени массива в качестве константного указателя....232
Передача и возврат массивов....233
Знакомство с программой «Крестики-нолики 2.0»....234
Резюме....235
Вопросы и ответы....236
Вопросы для обсуждения....238
Упражнения....238
Глава 8. Классы. Игра «Тамагочи»....239
Определение новых типов....239
Знакомство с программой Simple Critter....239
Определение класса....241
Определение функций-членов....242
Инстанцирование объектов....242
Доступ к членам данных....243
Вызов функций-членов....243
Использование конструкторов....244
Знакомство с программой Constructor Critter....244
Объявление и определение конструктора....245
Автоматический вызов конструктора....246
Установка уровней доступа к членам....246
Знакомство с программой Private Critter....247
Задание открытых и закрытых уровней доступа....248
Определение функций доступа....249
Определение константных функций-членов....250
Использование статических членов данных и функций-членов....251
Объявление и инициализация статических членов данных....252
Обращение к статическим членам данных....253
Объявление и определение статических функций-членов....254
Вызов статических функций-членов....254
Знакомство с игрой «Тамагочи»....255
Планирование игры....255
Планирование псевдокода....257
Класс Critter....257
Функция main()....260
Резюме....261
Вопросы и ответы....262
Вопросы для обсуждения....264
Упражнения....264
Глава 9. Более сложные классы и работа с динамической памятью. Игровое лобби....265
Использование агрегирования....265
Знакомство с программой Critter Farm....266
Использование членов данных, являющихся объектами....268
Использование контейнерных членов данных....268
Использование дружественных функций и перегрузка операторов....269
Знакомство с программой Friend Critter....269
Создание дружественных функций....271
Перегрузка операторов....272
Динамическое выделение памяти....272
Знакомство с программой Heap....273
Использование оператора new....274
Использование оператора delete....275
Избегаем утечек памяти....276
Работа с членами данных и кучей....278
Знакомство с программой Heap Data Member....278
Объявление членов данных, которые указывают на значения в куче....281
Объявление и определение деструкторов....282
Объявление и определение конструкторов копирования....283
Перегрузка оператора присваивания....286
Знакомство с программой Game Lobby....288
Класс Player....289
Класс Lobby....291
Функция-член Lobby::AddPlayer()....292
Функция-член Lobby::RemovePlayer()....294
Функция-член Lobby::Clear()....295
Функция-член operator<<()....295
Функция main()....295
Резюме....296
Вопросы и ответы....297
Вопросы для обсуждения....298
Упражнения....299
Глава 10. Наследование и полиморфизм. Игра Blackjack....300
Знакомство с наследованием....300
Знакомство с программой Simple Boss....302
Наследование от базового класса....303
Создание объектов производного класса....304
Использование унаследованных членов....305
Управление доступом при работе с наследованием....305
Знакомство с программой Simple Boss 2.0....305
Использование модификаторов доступа для членов данных....307
Использование модификаторов доступа при создании производных классов....307
Вызов и переопределение функций-членов базового класса....308
Знакомство с программой Overriding Boss....308
Вызов конструкторов базового класса....310
Объявление виртуальных функций-членов базового класса....310
Переопределение виртуальных функций-членов базового класса....311
Вызов функций-членов базового класса....312
Использование перегруженных операторов присваивания и конструкторов копирования в производных классах....313
Знакомство с полиморфизмом....313
Знакомство с программой Polymorphic Bad Guy....314
Использование указателей базового класса для объектов производного класса....315
Определение виртуальных деструкторов....317
Использование абстрактных классов....317
Знакомство с программой Abstract Creature....318
Объявление чистых виртуальных функций....319
Наследование от абстрактного класса....319
Знакомство с игрой Blackjack....320
Разработка классов....321
Планирование логики игры....324
Класс Card....325
Класс Hand....326
Класс GenericPlayer....328
Класс Player....330
Класс House....331
Класс Deck....331
Класс Game....333
Функция main()....336
Перегрузка функции operator<<()....336
Резюме....338
Вопросы и ответы....338
Вопросы для обсуждения....340
Упражнения....340
Приложение 1. Создание первой программы на языке С++....341
Приложение 2. Приоритет операторов языка С++....347
Приложение 3. Ключевые слова языка С++....349
Приложение 4. Таблица символов ASCII....350
Приложение 5. Управляющие последовательности....352
Если вы хотите научиться программировать первоклассные игры, вам просто необходимо изучить язык С++. Эта книга поможет вам освоить разработку игр с самых азов, независимо от того, есть ли у вас опыт программирования. Гораздо интересней учиться, когда обучение превращается в игру.
Каждая глава книги описывает самостоятельный игровой проект. В заключительной главе вам предстоит написать сложную игру, которая объединяет все приемы программирования, рассмотренные в предыдущих главах.
Книга, которую вы держите в руках, идеально подойдет для начинающего программиста, планирующего не только как следует освоить непростой язык С++, но и поупражняться в программировании игр.