Python游戏项目:100行代码编写飞机大战游戏

飞机大战游戏总结

整个项目是在UP主麦叔编程的视频学习的,加上自己的一些思考和总结。视频,源码和素材的地址在最下方。

项目整个开发流程

效果图

飞机大战效果图.png

项目需求

  1. 实现飞机的左右移动,并发射子弹同时有发射声音。

  2. 敌机随机移动

  3. 子弹可以击中敌机,并消失,同时有爆炸声音

  4. 集中敌机,更新相应的分数

  5. 当敌机越过飞机的位置,则游戏结束

项目素材

飞机,敌机,爆炸声,背景图片,背景音乐,子弹,icon,字体

2020/02/20  20:03           235,294 bg.png
2020/02/20  20:03         4,847,674 bg.wav
2020/02/20  20:03             1,057 bullet.png
2020/02/20  20:03             1,597 enemy.png
2020/02/20  20:03           336,406 exp.wav
2021/12/13  00:54             5,059 fly.py
2020/02/20  20:03            34,252 laser.wav
2020/02/20  20:03             2,799 player.png
2021/12/13  00:25              ttf
2020/02/20  20:03             1,030 ufo.png

其中ttf是字体文件包,可以在电脑中搜索字体,一般路径是:C:\Windows\Fonts

2018/04/12  07:34           980,756 arialbd.ttf

项目涉及的第三方包

核心包:pygame

需要使用到pygame 的display,mixer,font,event,image

  • display:显示

  • mixer:混频器

  • font:字体

  • event:事件

  • image:图片

代码:

#display:显示
    pygame.init()
    pygame.display.init()
    screen = pygame.display.set_mode((800,600))


#mixer:混频器
    #加载背景音乐
    pygame.mixer.music.load('bg.wav')
    #-1循环播放
    pygame.mixer.music.play(-1)
    #爆炸声音
    pung_music = pygame.mixer.Sound('exp.wav')
    #播放爆炸的声音
    pung_music.play()

#font:字体
    score_font =pygame.font.Font('ttf/arialbd.ttf',32)
    font =score_font.render(f'Score:{score}',True,(0,255,255))
    screen.blit(font,(10,10))

#event:事件
    #获取事件
    events = pygame.event.get()
    for event in events:
        #判断事件是否是退出,窗口的X 按钮
        if event.type == pygame.QUIT:
            print('游戏关闭……')
            win_close_flag =False
        if event.type == pygame.KEYDOWN:
            #print('按下按键……',event)
            #
            if event.key ==pygame.K_RIGHT:
                playerStep = 5
            elif event.key ==pygame.K_LEFT:
                playerStep = -5
            elif event.key == pygame.K_SPACE:#按空格键
                bullets.append(Bullet(playerx+15,playery-10))
                #播放发射的声音
                shoot_music.play()

        if event.type == pygame.KEYUP:
            #print('松开按键……')
            playerStep =0
#image:图片
    bg_image = pygame.image.load('bg.png')
    screen.blit(bg_image,(0,0))

#设置icon
    icon = pygame.image.load('ufo.png')
    pygame.display.set_icon(icon)

#设置标题
    pygame.display.set_caption('飞机大作战')

项目难点

  1. 理解pygame的坐标体系:它的坐标体系是左上角为原点(0,0),X轴方向是从左往右,Y轴方向是从上往下

  2. event的理解:事件包括event.type和event.key两个种数据,type是指鼠标移动/按下/松开,按键按下/松开,窗口上方的关闭按钮X等等,key是指具体的哪个按键,如:up,down,right,left,A,W,D,S等等

  3. 边界计算:当一个物体碰到边界时,如果是左边碰到边界,那么计算物体的x=边界的X,如果是右边碰到边界,那么是物体的x+物体的宽度 = 边界的x;同理上方和下方的边界是Y的计算

  4. 计算什么情况下击中敌机

    欧几里德(Euclid)定理:sqrt(x*x + y*y)

    计算敌机的坐标与子弹的坐标的距离,这个距离应该小于或等于敌机图片的对角线的长度

    如下图:

计算子弹与敌人的距离.png
  1. 文字的显示

    字体的显示和图片的显示是有区别的。图片分为创建,显示,而它分为创建,渲染,显示。

    #创建   参数1:字体的相对路径;参数2:字体的大小
    font =pygame.font.Font('alix.fft',32)
    #screen 窗口
    screen = pygame.display.set_mode(600,800)
    #渲染  参数1:文本;参数2:antialias反锯齿显示;参数2:rgb颜色
    font_text = font.rander('hello world',True,(255,255,255))
    #显示  参数1:文本surface;参数2:显示的坐标
    screen.blit(font_text,(20,30))
    
    

项目测试点

  1. 飞机和敌机是否能移出screen

  2. 飞机能否左右移动,并且按键事件能相应

  3. 子弹能否击中敌机,发出声音同时分数更新

  4. 敌机能否随机移动

  5. 游戏是否能结束

从项目中学到了什么

以前学习编程有一个误区,总觉得要一口吃成一个胖子,没有循序渐进的思想,罗马不是一天建成的,这句话很重要!

在新手学习完基础后,就需要用一个一个的小项目去鼓励自己,别人能做到,自己也能做到。

出来混什么最总要,是义气!

不是,是出来

那么学习编程什么最重要,是学习!

不!是思考+实践

附件

素材和代码上传至gitee中,仅供学习使用,地址:飞机大战

学习视频地址:麦叔编程飞机大战

注:python版本:3.8以上

你可能感兴趣的:(Python游戏项目:100行代码编写飞机大战游戏)