Python学习笔记(4)

Python学习笔记(4)

测试代码

  • Python标准库中的模块unittest提供了代码测试工具。单元测试用于核实函数的某个方面没有问题;测试用例是一组单元测试,这些单元测试一起核实函数在各种情况下的行为都符合要求。
  • 依照教材中的代码使用模块unittest进行测试时遇到的问题:
    • 在pycharm中运行时显示:"no tests were found"和"empty suite",而在命令行中则可以正常运行。
    • 解决方法:在unittest.main()前加if __name__ == '__main__':。对于很多编程语言来说,程序都必须要有一个入口,if __name__ == '__main__':就相当于是 Python 模拟的程序入口。
    • 在pycharm中运行失败及解决方案的详细解释:参考链接
  • 在测试代码中,如果多个测试方法中包含相同类型的实例,可以使用unittest.TestCase类中的setUp()方法在测试方法前创建相应的对象,使后续测试代码减少重复,也更加整洁。

项目练习

预先准备

  • 接下来将利用Pygame模块制作一个飞船射击类的小游戏。该模块可用于使用图形、动画以及声音,以达到设计游戏中绘制图像等任务。
  • 在Windows系统中安装Pygame:Pygame需要使用pip来进行安装,大多数新版本Python都自带pip,可以用python -m pip --version命令查看是否安装了pip。
  • 可以在链接中找到同Python版本相匹配的Pygame进行下载,也可以自行在网上搜索相关资源,移到项目文件夹下在命令行中执行python -m pip install pygame-1.9.6-cp38-cp38-win_amd64.whl即可安装Pygame。

创建Pygame窗口

  • pygame.init():初始化背景设置
  • pygame.display.set_mode():创建一个指定尺寸的显示窗口
  • pygame.display.set_caption():为窗口定义一个显示的名称
  • pygame.display.flip():命令Pygame让最近绘制的屏幕可见,以更新屏幕
  • 使用fill()方法来设置屏幕颜色(默认为黑色)
  • 使用while循环作为控制游戏进行的主循环;for循环作为监视键盘鼠标的事件循环;if语句检测并响应特定的事件。
  • 可以单独编写一个settings模块来存储所以的设置信息(如屏幕尺寸、背景颜色等),以免在代码中到处添加设置,也让后续修改游戏设置更加便捷。

在屏幕上绘制飞船

  • 先创建一个ship模块,其中包含Ship类:
    • pygame.image.load(): 加载图像
    • get_rect():获取图像的外接矩形
    • 设置rect对象的属性以指定矩形的位置
    • blit():将图像绘制到屏幕上

重构

  • 在大型项目中,经常需要在添加新代码前重构既有代码。重构旨在简化代码结构,增强其可拓展性,也可以避免主程序文件过长,使得程序逻辑更容易理解。
  • 在这个项目中,目前可以把监听事件和刷新屏幕的功能写成方法移到单独的一个模块中。这样主程序文件更加简洁,只需要调用相应的方法即可。

飞船驾驶功能

  • 响应按键:

    • 判断按键类型,根据不同的按键对飞船的运动方向进行不同的改变
    • 判断按键动作(按下-抬起),来决定飞船的运动状态
  • 到这里,其实需要按一下方向键飞船才动一下。要想实现飞船持续移动,需要修改Ship类:

    • 添加标记运动状态的属性,以及一个更新飞船位置的方法
    • 在主程序中调用这个更新飞船位置的方法
  • 还可以给飞船添加速度属性,以便于改变飞船的移动速度。

  • 为了防止飞船飞出屏幕,还应该在更新飞船位置的方法里添加位置判断,设定移动边界。

  • 随着功能的增加,重构分解出来的模块和函数也变得越来越长,所以也需要进一步重构:

    • 将处理飞船驾驶的按键响应功能分解出来,写在新的函数中

参考资料

原文地址:https://www.cnblogs.com/20145208cy/p/13166947.html