用Python做个打飞机小游戏超详细教程

我知道你们一定想先看效果如何

00 目录

  • 整体框架
  • 开始之前-精灵类Sprite
  • 子弹类class Bullet
  • 玩家飞机类class Player
  • 敌机类class Enemy
  • 游戏主体循环以及帧率设置
  • 让子弹飞
  • 刷出敌机 打怪
  • 把飞机敌机子弹都画出来
  • 处理键盘事件
  • 分数显示 和 GameOver
  • 最终代码

如果你依然在编程的世界里迷茫,可以加入我们的Python学习扣qun:784758214,看看前辈们是如何学习的!交流经验!自己是一名高级python开发工程师,从基础的python脚本到web开发、爬虫、django、数据挖掘等,零基础到项目实战的资料都有整理。送给每一位python的小伙伴!分享一些学习的方法和需要注意的小细节,点击加入我们的 python学习者聚集地

01 前言

这次还是用python的pygame库来做的游戏。关于这个库的内容,读者可以上网了解一下。本文只讲解用到的知识。代码参考自网上,自己也做了一点代码简化。**尽量把最核心的方面用最简单的方式呈现给大家,让大家尽快掌握这个游戏的框架。**至于那些华丽的功能,大家在弄懂了核心知识以后,再去添加也是非常easy的。

02 整体框架

这个游戏设计用到了面向对象的编程思想。 游戏主体划分为三个主要的类:

  • 子弹类class Bullet
  • 玩家类class Player
  • 敌机类class Enemy

在屏幕上可见的也就是这三个东西了。自己的飞机、敌人的飞机、子弹。因此整个游戏的核心就是:

  • 把这三个东西的图像呈现在屏幕上。
  • 判断和处理子弹撞击敌机和敌机撞击玩家这两种情况。

下面我们会展开为大家一一讲解。

03 开始之前-精灵类Sprite

在下面的代码中,你们会大量见到这个pygame.sprite模块。这里就给大家介绍一下。“sprite”,中文翻译“精灵”,在游戏动画一般是指一个独立运动的画面元素,在pygame中,就可以是一个带有图像(Surface)和大小位置(Rect)的对象。 简单来说是一个会动图片。它的两个成员变量

  • self.image=要显示图片的Surface
  • self.rect = 显示Surface的区域

对于self.rect,常用的设置rect的方法:**self.rect = self.image.get_rect()。**然后设定self.rect.topleft=(0,0)来设定左上角的位置,从而设定这个精灵在屏幕上的显示位置。精灵特别适合用在OO语言中,比如Python。

pygame.sprite.Sprite是pygame精灵的基类,一般来说,你总是需要写一个自己的精灵类继承一下它然后加入自己的代码。

关于此类的其他函数,咱们用到的时候会详细跟大家说的。

04 子弹类class Bullet

先来看代码吧。

1# 子弹类
 2class Bullet(pygame.sprite.Sprite):
 3    def __init__(self, bullet_img, init_pos):
 4        pygame.sprite.Sprite.__init__(self)
 5        self.image = bullet_img
 6        self.rect = self.image.get_rect()
 7        self.rect.midbottom = init_pos
 8        self.speed = 10
 9
10    def move(self):
11        self.rect.top -= self.speed

子弹类继承于pygame.sprite.Sprite, 成员主要是子弹的图片对象和子弹刷出来的位置,当然,还有移动速度。一个方法就是移动,从发出位置直线往屏幕上方移动。

05 玩家飞机类class Player

老样子。先看代码

 1# 玩家飞机类
 2class Player(pygame.sprite.Sprite):
 3    def __init__(self, plane_img, player_rect, init_pos):
 4        pygame.sprite.Sprite.__init__(self)
 5        self.image = []                                 # 用来存储玩家飞机图片的列表
 6        for i in range(len(player_rect)):
 7            self.image.append(plane_img.subsurface(player_rect[i]).convert_alpha())
 8        self.rect = player_rect[0]                      # 初始化图片所在的矩形
 9        self.rect.topleft = init_pos                    # 初始化矩形的左上角坐标
10        self.speed = 8                                  # 初始化玩家飞机速度,这里是一个确定的值
11        self.bullets = pygame.sprite.Group()            # 玩家飞机所发射的子弹的集合
12        self.is_hit = False                             # 玩家是否被击中
13
14    # 发射子弹
15    def shoot(self, bullet_img):
16        bullet = Bullet(bullet_img, self.rect.m
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值