习题 50: 你的第一项工作任务

现在我将为你分配一项工作任务,就跟给专业程序员分配工作任务一样。这个任务将是一个 小游戏,假设我是客户,我把要求一一列给你,你把这个游戏写出来,如果你完成的不错, 我也许会买你的游戏。你要把我的一些模糊的描述变成一样真正能用的东西。

这节练习的目的是看你是否已经掌握了你学过的所有概念。还有两节练习这本书就结束了, 这节习题是你的最后一个代码练习作业。

回顾你学过的内容

到现在为止,你应该已经学会了下面的东西:

  • 创建“类(class)”,用类实现房间的构建。
  • 抛出异常(Throw/Raise Exceptions)。
  • 使用函数(function)、变量(variable)、字典(dictionary)、列表(list)、以及元组(tuple)。
  • 使用词汇扫描器,将用户的输入转换为元组列表。
  • 使用解析器(parser)将元组列表转换为一个句子(Sentence)对象。

你在任务中会用到这些知识,因此你要确认学会了这些东西。

功能列表的实现

软件工作中特征性的一种情况,就是有人给你一份模糊不清前后矛盾的功能需求。实话实说,这种事情很挫。一般人没有能力可以清晰地构想出他的需求来,说到描述需求的能力,那就更差了。

作为一个程序员,你的任务就是接受这些模糊的描述,利用这些描述创造出他们想要的东西来。其实有的时候,连你自己都说不清你需要什么。

实现功能列表的最好的方法,就是照着下面的样板流程来:

  • 让别人把所有的关于需求的想法都告诉你,整个过程中不要去评判这些想法。
  • 一边倾听,一边把所有这些东西写下来,你可以放到表单里,也可以写在索引卡上。
  • 休息一会,把所有的功能需求整理到一起,为它们设立优先等级,一种是“必须有”的功能, 一种是“有了比较好”的功能。
  • 将列表的内容归类排序,将“必须功能”和“可选功能”区分开。
  • 选择一个必须功能,开始将其实现。
  • 过大约一个星期以后,把你写的软件展示给提出需求的人看,得到他们的反馈信息,依据 他们的反馈修改功能列表,并重复前面的步骤。
  • 在各种各样的“编程方法论”中,你都可以看到这个样板流程的身影。

    接下来我会给你一份功能列表,你需要在游戏中实现它们。我给它们的优先度都是“必须”, 你的任务是花一个星期实现这份列表上提到的所有功能。

    功能列表

    • 这个游戏的发生地点是外星人的宇宙飞船。
    • 游戏中应该有一个人类英雄,他的任务是逃离外星人的奴役。
    • 这因该是一个文字类的冒险游戏,和我们的“熊和阔剑”的游戏类似。我就喜欢这样的游戏。
    • 哦,激光。激光武器是必不可少的。
    • 激光武器也不能太厉害了。游戏的难度应该比较高才对。
    • 不过也不能太难了,不然大家就没兴趣了嘛。你懂的,《魔兽世界》你知道吧,听说这游戏的开发商可赚钱了。
    • 飞船一开始应该有大约 10 个房间,接下来我们还要扩展它们。
    • 我想随便修改房间的描述,可我又不想改代码,这个你能做吗?
    • 有朋友告诉我农场游戏很流行,你就做一个有农场的场景出来吧。
    • 外星人应该有类似黑手党的性质,这年头黑手党也是流行话题,是吧?
    • 我应该可以使用句子在游戏中移动位置,例如“go north”、“open door”等。
    • 在代码中设计好房间和路径是没问题的,不过玩家需要一份打印出来的地图,你的游戏能提供地图查询吗?
    • 游戏应该有个故事背景,最好是爱情相关的。
    • 最好包含点 geek 文化在里边,不过别提《星际迷航(Star Trek)》!好了,我承认第一季不错,但后面都是垃圾。
    • 我要在我的电脑上安装这个游戏,你能不能让它通过 setup.py 安装起来呢?这样以后打包发行也比较容易。

    完成任务列表的小技巧

  • 先在纸上设计出地图、人物角色、以及故事主线。
  • 撰写单元测试,这样你后面就无需手动检查代码了。
  • 设计你的游戏引擎,让它便于测试。
  • 每隔一段时间,自己亲自玩一下你写的游戏。
  • 如果遇到疑惑,就向别人寻求帮助,并把你的代码给别人看。
  • 祝你好运,下周评审游戏时再见。

    Project Versions

    Table Of Contents

    • 习题 50: 你的第一项工作任务
      • 回顾你学过的内容
      • 功能列表的实现
      • 功能列表
      • 完成任务列表的小技巧

    Previous topic

    习题 49: 创建句子

    Next topic

    习题 51: 评审你的游戏

    This Page

    • Show Source

    Quick search

    Enter search terms or a module, class or function name.