zoukankan      html  css  js  c++  java
  • 一、利用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、运行效果如下,我截取的是图片,实际是在一个向上移动一个向移动的动画效果

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

  • 相关阅读:
    Javascript的IE和Firefox兼容性汇编(转)
    JSP里request变量列表
    C#中的接口(转)
    寒羽对帝国的理解(通向高手之路)(转)
    怎样获得Sqlserver 2000得实例列表和运行在一个实例上得数据库列表(转)
    jsp文件上传的处理(转)
    用户不上你的网站的50个原因
    慈勤强的JFolder1.0版代码(JSP)
    管理常用SQL语句
    .net 取得访问的url
  • 原文地址:https://www.cnblogs.com/lz-tester/p/9305698.html
Copyright © 2011-2022 走看看