这节课我们来试试开发一个简单的命令行小游戏,来完整的体验一次所谓的“开发过程”。
游戏设定是这样的:
这是一种棋盘类游戏,我们来猜测敌人战舰的位置,只要命中数发就可以击沉它们。
我们给这些战舰贴点标签……比如各种网站吧?所以,这就成了一个攻击网站的程序……捂脸。
游戏目标
我们要玩家以最少的次数攻击网站,把它击垮。然后我们根据玩家的猜测次数来进行评分。
大致设计
我们画一个7*7的网格来代表棋盘,然后在网格上安排随即的三个网站,每个网站占连续的三格,然后要求玩家猜测网站的坐标。
由于我们暂时不接触图形设计,所以我们要求用户输入比如说 A5这样的坐标,我们用字母代表纵坐标,数字代表横坐标。然后我们设定三种状态,分别是“没打中”、“打中!”以及“干掉它了!”
当玩家全部干掉棋盘上的网站,我们就计算玩家的得分情况。
游戏的流程图设计
我们需要类和方法来搞定这个游戏,但是具体都要哪些方法哪些类?恐怕在这之前我们还得先理顺一下游戏的流程问题:
好吧,我瞎划拉的东西实在是太让人难以读懂了,不过没关系,请领会精神。
第一个版本
看来我们可以使用 Game 和 WebSite 两个类。首先,我们先来个简单一点的,我们只用一维地图,也就是在一个长条里猜网站的位置——这样更易于理解和实现,现在我们尝试用伪代码来写出这个程序。
什么是伪代码?
伪代码不是代码,它是你用更接近自然的语言描述出来的代码模型,用来测试最简单的逻辑实现——在这个过程当中我们除了专注于设计本身外,也进一步注重了逻辑框架——但又避免了编程语言本身的语法困扰,让表达更加自然和迅速。
这里我们贴出一个伪代码的手写版本栗子给你:
下面我们再来一个用于辅助游戏主体的类:
1 2 3 4 5 6 7 8 9 10 |
class GameHelper { 一个返回 String 的方法 { 获取用户输入的坐标数据 } 返回给调用者 (目前为了演示创建过程我们一切从简) } |
最后,虽然我们说要尽量远离 main 文件,但这次为了方便,我们还是把游戏运行直接写在了入口里:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
main 生成GameHelper 实例 生成网站实例 创建一个保存用户猜测次数的属性 生成一个随机数 以随机数为基础创建一个长度为3的数组作为网站的主体 把这个主体传给网站的实例 (这里我们就生成一个网站) 创建一个保存网站是否存活的属性 如果网站存活就一直重复 { 获取用户输入的坐标 让网站自检是否被击中 记录猜测次数 根据返回的结果如果干掉网站则存活属性改为 false } 游戏结束显示最后的文本信息 |
好吧我承认WebSite 类并不是完全写出来的,因为屏幕要截图,篇幅等问题我只是写了自检这一个方法,不过没关系,主要在于让你领会写伪代码这个过程。
根据伪代码写出真正的代码
好了,再三演算了伪代码的逻辑过程,确定没有什么问题之后,就可以用真正的代码来实现它了:
由于没有 GUI 界面,所以看起来也不会怎么高大上……但我们通过这个简单的版本走了一遍完整的开发流程。
记住:
在实际开发当中,你写好的伪代码是什么样子,那么就要把代码写成什么样子——我相信你的灵光乍现绝对值得关注——但你还是找个小本子先写下来为妙。如果你真的顺手就在你的代码里增加了其他并没有预计的功能,那最终实现出来的代码可能就有了奇奇怪怪的 bug。
所以说,一步一个脚印——先写出伪代码的实现,原始目的达成,再进行下一步——添加更多一个新功能……这样会让你的代码健壮很多。
本文由 落格博客 原创撰写:落格博客 » 不是你想的那样:一个攻击网站的程序
转载请保留出处和原文链接:https://www.logcg.com/archives/1113.html
Comments