前 言

写作目的和背景

随着人工智能时代的来临,计算机软件在日常生活中起着越来越重要的作用,编写计算机程序极有可能成为未来社会的一项重要生存技能。在众多的文本式编程语言中,C和C++历史悠久、功能强大、应用广泛,在目前大学编程教学中占比最高,也是各级信息学奥赛的指定编程语言。

由于C和C++语法规则较多、用法灵活,很多初学者觉得有难度,并普遍有畏惧心理。目前大部分C和C++图书会系统讲解语法知识,知识量大,读者学习困难;所举实例一般偏数学算法,过于抽象、趣味性不强,让读者觉得入门困难。

针对以上问题,本书把趣味游戏开发应用于C和C++编程教学,通过13个由易到难的有趣案例,带领读者从零基础开始学习。书中不安排专门章节讲解语法知识,而将其穿插在游戏开发的过程中,通过游戏案例逐步讲解新的语法知识,便于读者理解其含义,并在实际应用中体会其用法。书中案例均经过精心的设计,并包括详细的实现过程,适合上手,让学生学习编程的同时培养逻辑思维能力,增强认识问题、解决问题的能力。

对于学习编程,如果读者可以编出很好玩的程序,就会感到有趣、有成就感,愿意自己钻研,并与他人积极互动,从而显著提升学习效果。

本书内容结构

本书通过趣味案例逐步引入C和C++语法知识,从无到有地开发游戏,提高读者对编程的兴趣和编程的能力。全书共14章和3个附录。

第1章介绍了计算机程序及C和C++编程语言的基本概念、集成开发环境的使用方法,并展示了第一个程序(8行代码)。

第2章介绍了整数、浮点数、if语句、while循环等语法知识,解析了“自由落体的小球”仿真程序的实现方式(25行代码)。

第3章介绍了字符、逻辑运算符、整数运算、类型转换等语法知识,解析了“别碰方块”游戏的实现方式(78行代码)。

第4章介绍了for循环语句、循环嵌套等语法知识,解析了“旋转蛇”错觉图案的绘制方式(53行代码)。

第5章介绍了一维数组、流程跳转等语法知识,解析了“见缝插针”游戏的实现方式(78行代码)。

第6章介绍了函数的概念,帮助读者进一步了解while语句的使用方法,解析了“见缝插圆”游戏中随机图案的绘制方式(154行代码)。

第7章介绍了二维数组、if-else、变量的作用域与生存期等语法知识,解析了如何利用游戏开发框架实现“贪吃蛇”游戏(153行代码)。

第8章介绍了结构体、复合运算符、函数参数传递方式等语法知识,解析了“十步万度”游戏的实现方式(141行代码)。

第9章介绍了字符串、文件读写、枚举类型等语法知识,解析了“推箱子”游戏的实现方式(244行代码)。

第10章介绍了指针的相关知识,解析了“十字消除”游戏的实现方式(255行代码)。

第11章介绍了递归的语法知识,解析了漂亮的分形樱花树的绘制方式(141行代码)。

第12章介绍了面向对象编程的相关知识,包括类和对象、成员变量、成员函数、继承等概念,解析了“坚持一百秒”游戏的实现方式(248行代码)。

第13章介绍了链表、C++标准模板库、构造函数与析构函数等语法知识,解析了“祖玛”游戏的实现方式(465行代码)。

第14章基于所学知识,分析了“火柴人的无尽冒险”游戏的实现过程(490行代码)。

附录A给出了书中所有练习题的参考答案。

附录B列出了语法知识在书中出现的对应位置。

附录C介绍了常用的调试方法和辅助开发工具。

本书特色

和市面上同类图书相比,本书有以下3个鲜明的特色。

1.为初学者量身打造。

一般编程图书会系统讲解语法知识,让初学者感到记忆负担大、学习难度高。本书先讲解较少的语法知识,然后利用这些语法知识编写趣味游戏,通过游戏案例逐步引入新的语法知识,便于读者学习理解。书中案例从易到难,且提供了实现过程的分步骤代码,适合学习。

2.趣味性强。

大部分C和C++图书的编程案例比较抽象、枯燥乏味,让读者提不起兴趣。本书精选了13个案例,涵盖了多种游戏类型,读者在开发这些趣味程序的过程中,会有很强的成就感。书中分解了案例的实现过程,每个步骤的学习成本较低,读者很容易就能体会到编程的乐趣。

3.可拓展性强。

本书所有章节均提供了练习题,以加深读者对语法知识、开发游戏方法的理解,培养读者逻辑思维能力,认识问题、解决问题的能力。附录中提供了所有练习题的参考答案。每章小结列出了可以进一步改进与实践的方向,读者可以参考本书开发思路,尝试设计并分步骤实现任何自己喜欢的小游戏。

本书的读者对象

本书适合对计算机编程感兴趣特别是首次接触编程的人阅读,不论是成人还是青少年。

本书适合学习过其他编程语言,想快速学习C和C++的人阅读。

本书也适合对计算机游戏感兴趣的人阅读。与其玩别人做的游戏,不如自己设计、开发游戏让别人玩。

本书可以作为大学生、中学生学习程序设计的教材或实践教程,培训机构的参考资料,也可以作为编程爱好者的自学用书。

本书的使用方法

本书相关章的开头会介绍实现该章游戏案例的主要思路。读者可以先观看对应的游戏视频、运行最终的游戏代码,直观了解该章的学习目标。

书中的游戏案例会分成多个步骤,从头开始一步一步实现。书中列出了每个步骤的实现目标、实现思路及相应的参考代码。读者可以先在前一个步骤代码的基础上,尝试写出下一个步骤的代码,碰到困难可以参考配套电子资源中的案例代码。

本书在语法知识、案例的讲解后会列出一些练习题。读者可以先自己实践,再参考附录A中给出的答案。读者也可以根据自己的兴趣尝试每章小结给出的进一步实践方向。

读者可以利用附录B查阅相应的语法知识。对于本书没有涉及的内容,读者也可以在线搜索,或者咨询老师、同学。

附录C介绍了常用的调试方法、提高开发效率的插件、代码版本的管理工具,读者可以在实际开发中学习和体会。

本书提供了所有案例的分步骤代码,练习题参考答案,图片、音效素材,演示视频,读者可以从出版社网站进行下载。

作者简介

童晶,浙江大学计算机专业博士,河海大学计算机系副教授、硕士生导师,中科院兼职副研究员。主要从事计算机图形学、虚拟现实、三维打印、数字化艺术等方向的研究,发表学术论文30余篇,曾获中国发明创业成果奖一等奖、浙江省自然科学二等奖、常州市自然科学优秀科技论文一等奖。积极投身教学与学生创新,指导学生获得英特尔嵌入式比赛全国一等奖、挑战杯全国三等奖、中国软件杯全国一等奖、中国大学生服务外包大赛全国一等奖等多项奖项。具有15年的一线编程教学经验,开设课程在校内广受好评,获得河海大学优秀主讲教师。在知乎、网易云课堂、中国大学MOOC等平台的教学课程已有上百万次的阅读与学习记录。

致谢

首先感谢我的学生们,当老师最有成就感的就是看到学生成长、得到学生的认可。他们的支持和鼓励让我在漫长的写作过程中坚持下来。

感谢人民邮电出版社的陈冀康编辑,本书是在他的一再推动下完成的。

最后感谢我的家人,在这个不平凡的春天支持我埋头写作。

作者

2020年4月