宝哥软件园

用TypeScript重写的JavaScript坦克战游戏代码

编辑:宝哥软件园 来源:互联网 时间:2021-09-09

源代码下载

我已经上传了源代码到CSDN,没有资源。下载地址:http://download.csdn.net/detail/zgynhqf/8565873.

使用VS 2013 TypeScript 1.4开发源代码。打开后,显示如下图:

JsTankGame 1.0:用JS写的老坦克游戏。

JsTankGame 2.0:直接从TS翻译过来的新游戏。

JsTankGame:基于2.0的新游戏,重构类型后。

重建步骤

因为旧的JS游戏是由MS Ajax客户端库搭建,由OOD设计,TypeScript可以兼容所有JS代码。所以用TypeScript移植比较简单,主要是替换类型设计的代码:类、继承、接口等。

完成以上工作后,我们得到了TS编写的2.0版本。在这个过程中,我体会到了强类型语言的很多优点,当然,TS目前也有一些不完善的地方(后面会讨论)。

拿到强类型2.0版本后,还没有结束。为了体验强类型对重构的好处,我决定在这个版本的基础上重构代码结构。

使用强类型代码,我可以轻松分析每种类型、每种方法以及它在哪里使用。这样,我可以快速知道类型之间的依赖关系。不看不知道,吓一跳。之前一点一点写出来的代码觉得类型设计还不错,两者之间的耦合度应该不是很高。然而画完之后才发现,这几乎与想象相差甚远。这是直接写代码不画图的结果。请看下面两张图片:

可见不同精灵类型之间的关系比较混乱,双向依赖随处可见。(其实SpriteManager是画在另一幅画里的,所以没有更复杂混乱的关系。)

在此基础上,我画了一个新的关系图,然后根据这个关系重构了所有的代码。这为您提供了最新的3.0版本。

新版本的类型图如下:

分层:

精灵:

经理:

在代码层,精灵之间耦合的代码被移植到上层管理器。同时,为向导定义了事件,以便将向导与管理器分离。

TS第一次体验的优缺点

优点:Lambda很好的解决了这个指针的问题。Chrome和IE可以直接调试TypeScript!在这个过程中,我们还发现弱类型找不到。由于重命名,原始代码未被修改。(SpriteManager.js 98行)

缺点:开发环境-代码标注功能还没有集成,只能手动复制。开发环境-目前不支持代码片段。开发环境-不支持关键字代码生成:if、while、swith、括号匹配等。开发环境-不支持代码区域的定义。语法-不支持事件的定义。语法-尚不支持为类定义重载方法。请参见SpriteBase。是一种计数方法。

其他:

编译后的JS代码具有一定的冗余性。指挥空间尤为明显。在不提示的情况下重写基类方法。不能重写基类的属性获取器/设置器。无法区分哪些方法是虚拟方法。不能在接口中定义只读属性。还是有bug。(SpriteManager.ts第93行).如果您只是定义一个数字字段,默认值是NaN而不是0。

摘要

总的来说,经过试用,我觉得TS可以用于目前1.4版本之前的正式大型JS项目的开发。但是还有很多地方需要改进!

附Chrome、IE调试TS截图:

以上就是本文的全部内容,希望能帮助大家掌握打字稿。

更多资讯
游戏推荐
更多+