飞机大战优化续篇7:第一版全流程模块化调用优化完成

自从上文提及的实现多关卡独立控制后,游戏主文件的代码量随着关卡的增多,成倍的增长,这带来了很多潜在的问题,比如:

1
2
3
4
1:某相同功能(比如:敌方飞机的某特性)需要批量调整时,需要进三个关卡分别进行修改,耗时耗力,还容易出错;
2:代码量越来越多,可阅读性越来越差;
3、本来实现相同功能的代码,在复制与修改过程中,可能发生了变动,无法直观的看到,可维护性差;
... ...

这一周就寻思着,能不能将各种功能进行模块化,通过调用实现功能,最大限度实现代码复用,通过前期用小的功能模块进行尝试,发现可行,于是逐渐深入解耦,直到今天晚上终于完成了整个游戏主程序的代码重构。
在代码重构过程中,有几点感触:

1
2
3
4
5
1:重构过程中,发现了很多以前代码隐藏的BUG,如果不经历这个过程,估计都很难发现(比如:通过Failed Screen调用重玩一局游戏时,对方BOSS还隐身在上一次对战结束时的位置,让我方飞机发生遇到“空气”坠机事件、每个STAGE的主游戏LOOP里面都发现了有两处都在同时控制SWITCH_IMAGE参数,一处是1帧取反一次,一次是10帧取反一次,导致游戏的一些动画显示效果不明显...);
2、从各STAGE合并相同功能部分进行调用,就涉及很多原来的局部变量变成了全部变量的问题,这也是模块化重构过程遇到的比较多的情况,最后通过统一调用重置模块完成了问题解决;
3、模块化后,3个关卡的STAGE主游戏LOOP完全就变成了一个空壳的舞台,只需要调用各位演员(功能函数)上台表演即可,代码可阅读性提升非常显著;
4、由于各种功能函数的职能清晰,哪里有问题上哪里解决,后续的游戏扩展性与可维护性都提升非常显著;
5、模块化的过程,就是不断进行代码复用的过程,主游戏文件原来有3500行左右的代码,模块化完成后,整体缩减成2000行左右,代码优化效果非常显著;

模块化完成后,试玩了两局,第一感觉没什么问题了,明天再进行完全的测试,如果功能与BUG测试OK,就可以进行如下工作了:

1
2
3
1:游戏难度与可玩性调试:通过设置不同的背景图片滚动速度来控制每个关卡的游戏时间、设置每个难度增加的敌机数量来控制游戏的困难程度等,调试出一个大众能接受的游戏难度与节奏;
2、了解PY to EXE的文件封装方法,并尝试进行封装;
3、了解跨平台封装的方法,看从PC直接跨到手机端的可行性;

其实本次模块化,还留有一个不影响游戏运行的“小尾巴”还没完美解决,问题描述如下,后续在考虑下:

1
2
3
4
问题描述:
游戏暂停功能里面,当点击了“暂停”后,原来的‘PAUSE’并没有消失,而是叠在了‘PLAY’的下面,导致显示效果不佳,但是功能性未受影响。
可能的问题溯源:
当鼠标点击了‘PAUSE’按钮的同一帧,程序让全局变量self.pause赋值为True,这次游戏直接不再进入主游戏LOOP,跳过主游戏LOOP直接调用UI_FIXED_SIGH函数进行暂停按钮绘制,此时的按钮变量仍为‘PAUSE’按钮,到下一帧,捕获了鼠标移动时间,按钮变量变为‘PLAY’,跳过主游戏LOOP进行按钮绘制,因为游戏背景不再刷新,在让‘PLAY’按钮直接绘制在了‘PAUSE’按钮的上方。

好了,这两天解耦重构的挺辛苦的,费脑费力,感觉有了这次的模块化框架后,后续的游戏开发将容易太多,毕竟重构耗费的精力,有时比重写一次还多。
上床睡觉了,可以睡个好觉了,晚安~