
对于我在Flatiron学校的沉浸式软件工程训练营的第1单元的最终项目,我和我的搭档Steven和我根据从Marvel API中提取的角色创建了一个CLI hangman游戏。 我们在四个不同阶段进行开发:
1. API请求
2.游戏逻辑
3.游戏介面
4. CRUD功能
刚开始时,Marvel API存在很多问题。 我们之前已经学习了如何与API交互; 但是,我们处理的所有API都是开放的API,不需要任何类型的安全密钥。 Marvel API不仅需要密钥,还需要两个密钥,即公共密钥和私有密钥。 最重要的是,您不能只是将密钥发送到Marvel API以获得访问权限,还必须将散列值与请求一起传递。 该哈希是通过将您的两个密钥都通过MD5哈希函数传递而生成的。 在弄清所有问题之后,我们认为我们不可能成为第一个遇到此问题的红宝石程序员。 我们最终找到了红宝石,使发送请求到API变得更加容易。 一旦能够调用API,我们就不需要花费很多时间来确定请求的参数,如何解析接收到的数据以及如何为游戏设置格式。
为游戏逻辑编写代码可能是项目中最直接的部分。 我们之前都玩过子手,而且规则很简单。 我们花了一些时间来创建一个辅助方法,以确保用户一次只能猜测一个字母。 我们还必须确保将从API接收到的字符名称字符串解析为单个字符数组。 然后,我们使用了我在上一篇文章中写过的一些数组比较操作(链接到上一篇文章)。 之所以使这部分开发变得容易,是因为我们确切地知道我们必须完成什么。 我们知道规则; 我们只需要将它们放入代码中即可。
确定游戏界面有点棘手。 因为它是一个CLI应用程序,所以我们不必太担心布局设计,但是我们必须考虑用户从登录到退出游戏所经历的所有不同途径。 一些路径涉及玩游戏,而某些路径仅涉及在不同菜单之间跳转。 我们都曾经玩过电子游戏,但是新的游戏状态有所不同,但是我们在如何在代码中实现这一点感到很挣扎。 我们最终得出结论,使用case语句,该语句在条件循环中代表不同的“游戏状态”时会具有不同的条件,而条件循环则将用户保持在“游戏中”状态。 对于每个“游戏状态”,我们可以通过在when块末尾重新分配case语句变量来接受用户输入并更改“游戏状态”。 下面是我们如何构造此结构的简化示例:

我们的代码最终比上面的代码复杂得多。 案例陈述成为我们最好的朋友,上面列出的每个when条件中都嵌套了另一个案例陈述。 我们几乎没有时间在讲座或实验室中讨论案例陈述,因此我决定进一步探讨它们。 虽然我知道用case语句代替大量的if语句是一种很好的选择,但我没有意识到case语句的一个关键特性。 使用“ ===”而不是“ ==”运算符将大小写与when进行比较。

对不同的类使用“ ===”运算符可以实现某些特殊行为。 这是两个示例:
配套范围
对于范围,“ ===”运算符的作用类似于.include?。 方法。

匹配的正则表达式(正则表达式)
对于范围,“ ===”运算符的作用类似于.match方法。

在我们的CLI应用程序中实现CRUD功能是我们要做的最后一件事。 我们的游戏允许您通过用户名登录,并保存了您玩过的每个游戏的信息以及用户统计信息。 用户还可以更改其名称或完全删除其帐户。 将我们的CRUD功能代码添加到应用程序的过程非常简单。 我们使用了ActiveRecord gem,这使得为数据库编写查询变得非常简单。 我们以前也曾写过评论,作为占位符,以说明CRUD功能代码需要去的地方。