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    <DIR>          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)
            #<Event(768-KeyDown {'unicode': '', 'key': 1073741903, 'mod': 0, 'scancode': 79, 'window': None})>
            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以上

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,504评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,434评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,089评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,378评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,472评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,506评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,519评论 3 413
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,292评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,738评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,022评论 2 329
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,194评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,873评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,536评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,162评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,413评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,075评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,080评论 2 352

推荐阅读更多精彩内容