• 一、利用Python编写飞机大战游戏-面向对象设计思想


    相信大家看到过网上很多关于飞机大战的项目,但是对其中的模块方法,以及使用和游戏工作原理都不了解,看的也是一脸懵逼,根本看不下去。下面我做个详细讲解,在做此游戏需要用到pygame模块,所以这一章先进行pygame入门讲解--设置游戏窗口,绘制游戏背景,绘制战机图片,绘制战机移动动画(后面利用面向对象重新设计整个项目)

    1、先看看游戏屏幕样式及工作原理

    2、再看看动画工作原理

    3、分析完了,上代码,所有说明注释写的很清楚

    #!/usr/bin/env python
    # coding=utf-8
    # author:刘仲
    # datetime:2018/7/11 9:58
    # software: PyCharm
    
    import pygame
    
    pygame.init()  # 加载pygame中的所有模块,这是一句固定的代码
    screen = pygame.display.set_mode((480, 700))  # 创建一个游戏窗口,屏幕大小480*700,这里一般背景图片多大,屏幕就设置多大
    
    """绘制背景图片步骤:1、图片一般事先存在本地磁盘里,所以我们把需要的图片先加载到内存中
                        2、将加载到内存的图片绘制到屏幕指定的位置
                        3、刷新屏幕显示,否则绘制的图片无法显示
       制作动画:动画就是将多张静止的图片快速的播放,这里就涉及到帧数的问题,一般每秒60刷新60次就能制作高品质的动画。
                 所以,pygame中提供了一个时钟类,可以调用tick()方法控制帧数
    """
    bg = pygame.image.load('./images/background.png')  # 加载背景图片到内存
    im = pygame.image.load('./images/me1.png')  # 加载战机到内存
    enemy1 = pygame.image.load('./images/enemy1.png')  # 加载敌机到内存
    clock = pygame.time.Clock()  # 创建时钟对象
    hero = pygame.Rect(200, 500, 102, 126)  # 创建一个和战机大小相等的矩形对象
                                      # rect方法可以创建一个矩形对象,参数(x,y,weight,height),xy是原点位置,weight和height是矩形宽和高
    
    enemy_1 = pygame.Rect(200, 100, 57, 43)  # 创建一个和敌机大小的矩形对象
    
    #  如何让游戏屏幕一直显示,这就叫游戏循环,把所有更新图片位置,刷新帧数,监听事件都写在游戏循环里
    while True:
        clock.tick(60)  # 每秒刷新60次
        for event in pygame.event.get():  # 监听用户做的各种操作,pygame.event.get()返回来的是一个用户操作的动作列表
            if event.type == pygame.QUIT:  # 判断用户是否点击退出按钮,即游戏窗口的叉叉
                print('游戏退出...')
                pygame.quit()  # 卸载所有pygame的模块
                exit()  # 退出整个系统
        hero.y -= 2  # 战机以2的速度向上移动
        enemy_1.y += 1  # 敌机以1的速度乡下移动
        screen.blit(bg, (0, 0))  # 将背景图片绘制到屏幕,绘制就调用屏幕对象的blit方法
                                 # (疑问:屏幕图像不是固定的吗,也没有去改变y值,
                                 #  为何放在循环里?这是因为每次循环都需要重新绘制一遍屏幕,再将飞机的图片绘制到新的屏幕上,这样就不会出现飞机残影)
    
        screen.blit(im, hero)  # 将战机绘制到屏幕
        screen.blit(enemy1, enemy_1)  # 将敌机绘制到屏幕
        pygame.display.update()  # 这句也是固定代码,更新屏幕显示,否则无法显示绘制好的图片
    pygame.quit()  # 游戏退出

    4、运行效果如下,我截取的是图片,实际是在一个向上移动一个向移动的动画效果

    这个只是入门,制作简单的,晚上或明天会继续更新,利用面向对象实现完整的屏幕背景滚动,飞机发射子弹,碰撞检测的代码

  • 相关阅读:
    网络七层
    微信小程序开发工具 常用快捷键
    BZOJ 1026 windy数 (数位DP)
    BZOJ 1026 windy数 (数位DP)
    CodeForces 55D Beautiful numbers (SPOJ JZPEXT 数位DP)
    CodeForces 55D Beautiful numbers (SPOJ JZPEXT 数位DP)
    HDU 3709 Balanced Number (数位DP)
    HDU 3709 Balanced Number (数位DP)
    UVA 11361 Investigating Div-Sum Property (数位DP)
    UVA 11361 Investigating Div-Sum Property (数位DP)
  • 原文地址:https://www.cnblogs.com/lz-tester/p/9305698.html
Copyright © 2020-2023  润新知