第一单元 趣味游戏
本单元包含 4 个游戏类的应用案例,分 4 章来讲解,它们是:
《水果配对》
《打地鼠》
《九格拼图》
《贪吃蛇》
凭心而论,计算机最吸引我们的莫过于游戏,而编写程序不过是一种更为高级的游戏,正因为如此,本书将游戏单元放在最前面。那么,究竟什么是游戏呢?
应用软件的分类有许多种方法,例如按功能划分,有办公软件、教学软件、游戏软件、即时通信软件,等等。这里想说的是另一种划分方法——问答分类法。按照这种分类方法,软件大致可以分为两类:一类是计算机出题,用户答题,如本书趣味游戏和辅助教学两个单元中的例子;另一类是用户出题,计算机答题,如本书实用工具单元中的计算器及节气钟的例子。因此,游戏软件可以定义为由计算机随机出题,由用户答题并获得奖赏的一类应用软件,通常具有以下特征:随机性、时限性及奖赏性。
游戏最显著的特点是题目的随机性。所谓随机性,你可以理解为现实世界里扑克牌游戏中的洗牌操作——为了确保游戏公平,牌的顺序必须是无规律的。计算机最擅长制造这种随机性,在 App Inventor 的数学代码块中,有两个生成随机数的块,分别是随机整数块及随机小数块,本单元的案例对这两种块都有所应用。
游戏类应用也可以细分为更多类型,如卡片类、动作类、解谜类、养成类,等等。无论是哪种类型的游戏,在随机性这一点上都是一致的,不同的是游戏中“角色”的呈现方式。例如,本书第 1 章的卡片类游戏《水果配对》及第 3 章的拼图类游戏《九格拼图》,游戏的主角是卡片,卡片按行列排列整齐,但卡片的正面图案是随机排列的。又如,第 4 章的动作类游戏《贪吃蛇》,游戏的主角是蛇,蛇吃果后会长大,而果会随机出现在屏幕的不同位置。由于游戏中角色的呈现方式不同,因此开发游戏使用的用户界面组件也有所不同,如《水果配对》游戏中使用了 16 个按钮,《九格拼图》中使用了画布和精灵,而《贪吃蛇》游戏中仅使用了一张画布。
游戏中的用户界面组件决定了游戏的空间特性,而游戏的另一个重要特性是时间特性。时间特性体现在两个方面:一是游戏中的角色会随时间的推移而改变状态,二是游戏的时间长度是有限的,即所谓的时限性。例如,在《水果配对》游戏中,翻开的两张牌如果正面图案不相同,会在短时间内重新合上(显示背面图案);而当游戏耗时达到 1 分钟时,游戏会自动结束。又如,在《贪吃蛇》游戏中,蛇头每秒钟前进一步;不过,贪吃蛇不具有时限性。游戏的时间特性由计时器组件来实现,可以通过改变计时器的计时间隔来控制游戏的节奏。
在设计游戏的奖赏机制时,通常会考虑两个因素:一是加分因素(如命中次数、翻牌对数等),二是减分因素(如操作次数、游戏耗时等)。最终的成绩可能是二者之一,也可能是二者的综合。例如,《打地鼠》游戏只考虑加分因素,命中地鼠一次得 10 分,在有限时间内,命中次数越多,则最终得分越高。又如,在《水果配对》游戏中,每翻开一对卡片得 10 分,如果玩家在 1 分钟内翻开了全部卡片,则可得 80 分;除此之外,玩家还可获得奖励得分(剩余秒数×10),最终得分为这两项之和。上述两款游戏采用的是加分方式,即分数从零开始递增,而《九格拼图》游戏采用的是减分方式,即游戏开始时分数为 10 000,随着操作次数和游戏耗时的增加,分数会逐渐减少。
游戏的随机性、奖赏性及时空特性,都是游戏的外在特性,会直接影响玩家对游戏的体验,因此,对于游戏开发者而言,要格外关注这些特性。除此之外,开发者还应该关注应用的内在特性——应用的数据结构。稍微复杂一点的游戏,都涉及复杂的数据结构——列表。本单元的 4 个游戏案例无一例外地使用了列表。对列表的操作能力是开发者编程水平的重要标志,也是提高思维能力的重要途径。
通常,随机数、计时器、列表被称作游戏开发的“三板斧”。希望读者通过本单元的学习,能够掌握游戏开发的一般规律。