上次我把Quoridor开发出来,到现在是已经上架了。
这期间,我除了不断想各种点子改进Quoridor的Ai以外,也开始做另一个应用——2048。
好吧,这是很简单的App,但是从标题上就可以看出来了,我觉得这次开发是非常失败的。其实早在我学习iOS开发之前,我就已经用VBA了一个2048游戏了。所以在一开始,这个项目只是作为我在Quoridor这个牛角尖上转移注意力,放松自己的小间隙,而且,我所想的更多是如何让它变得更有趣了。
于是,怎么有趣呢?还是按数字的加减实在有点无聊了。所以,我想到了图形的加减。把2048的数字变成这样一个图案。
如果你有那么无聊的去数的话,你会发现这里已经到4096了。是的,我自豪的说,我经常玩到4096,偶尔上9192.
好了。然后,我就开始发现,配色是个大问题。甚至,我开始想,能不能做到这些图形颜色任意改变呢?这样一来,应用就有了更多的扩展性。所以,我下了一个决定,我要全代码绘制这些图形。其实这并不会很难,有PaintCode嘛。
到这里一切都还是好的。虽然这导致我后来连个按钮的图形我都代码绘制(为了,保持,一贯性?),真是自作孽到不行了。
麻烦就麻烦在,我把游戏构建好的时候。忽然在想,我能不能把我以前做的小游戏。比如贪吃蛇这些也塞进去?都用这个符文风格,然后做个菜单,退出来后可以换个符文就换个游戏。做个小游戏大全嘛。
于是,我把自己甩坑里去了。
首先是类命名的问题。
我在一开始开发的时候,这个应用只有一个单界面。所以直接以GameController
这样不带有具体对象的名称命名,那么当游戏变成多个的时候,就得不断提醒自己,GameController就是最初的那个游戏啦。简直就好像程序里出现了let seven = 7
这样的参数一样让自己恶心。
然后是初始化加载的问题。
假如我有多个游戏,那么在程序刚开始的时候,有没有必要把每个游戏的游戏模型加载下来呢?没有,肯定没有是吧。但是……什么样的加载时机是好的呢?如果把游戏模型的加载放到视图控制器中,那在主菜单我要用到游戏模型当中的进度数据怎么办?如果一开始就全加载了那浪费的内存怎么办?
还有颜色风格问题。
以往我都是把颜色作为全局变量来处理的,这样的好处是,我可以在任何地方设置一个按钮,点一下,就换了一个颜色主题了。
那么现在有多个游戏,都一个色调?其实一个色调也没什么啦。主要是……我那些颜色的命名……我要在一个叫SnakeController
的类中用一个叫kMagicCircleColors
的颜色么……
其他
问题肯定是不止那么点的啦。包括由于多出来的代码导致原本清晰的文件结构变得凌乱等等……
告诫
当然,最终,我是把这个应用做好了。没有开源主要是因为觉得程序结构和代码太丑,不好意思。
写这篇文,主要是想告诫自己。
1.命名的规范应该要更有指向性以及完整一点,哪怕这个文件被我直接插入另一个App也不会冲突。
2.不要随便给做一半的项目添加需求。尤其是当这个需求几乎与当前项目没有任何关系的时候。(作孽啊,自己给自己当了一回古怪用户。)
3.非必要,还是不要用代码绘制图形了。
4.把全局变量写成单例吧。
5.No zuo no die.