pygame2

作者: Rain师兄 | 来源:发表于2021-03-04 00:54 被阅读0次

    ```python

    import sys  # 用以退出程序

    import pygame  # import库

    from pygame.sprite import Group

    bg_color = 230,230,230

    class Ship:

        def __init__(self,screen):

            self.screen = screen

            self.image = pygame.image.load('images/ship.bmp').convert_alpha()

            self.rect = self.image.get_rect()

            self.screen_rect = screen.get_rect()

            self.rect.midbottom = self.screen_rect.midbottom

            self.moving_right = False

            self.center_x = float(self.rect.centerx)

            self.center_y = float(self.rect.centerx)

            self.ship_speed_factor = 5

            self.bullets_allowed = 10

        def blitme(self):

            self.screen.blit(self.image,self.rect)

        def update(self):

            if self.moving_right and self.rect.right < self.screen_rect.right:

                self.center_x += self.ship_speed_factor

                self.rect.centerx = self.center_x

    class Bullet(pygame.sprite.Sprite):                    

        def __init__(self,screen,ship):

     pygame.sprite.Sprite.__init__(self)            # 初始化

            self.screen = screen

            self.bullet_width = 3

            self.bullet_height = 10

            self.bullet_color = 6,60,160

            self.speed_factor = 10  # 设置速度

    self.rect = pygame.Rect(0, 0, self.bullet_width, self.bullet_height) # 创建一个矩形实例,括号里是子弹的大小,和初始位置

    self.rect.top = ship.rect.top                                                                           # 将子弹与飞船的头部位置重叠在一起

            self.rect.centerx = ship.rect.centerx

            self.y = float(self.rect.y)

        def update(self):

            self.y -= self.speed_factor

            self.rect.centery = self.y

        def draw_bullet(self):                                                                                        # 绘制子弹

            pygame.draw.rect(self.screen,self.bullet_color,self.rect)

    def remove_bullet(bullets):                    # 用来删除消失在界面的子弹。

        for i in bullets.copy():                    

            if i.rect.bottom <= 0:

                bullets.remove(i)

    def run_game():

        pygame.init()  # 初始化

        screen = pygame.display.set_mode((1000, 800))  # 返回一个屏幕 此时出现一个窗口

        pygame.display.set_caption("ship")  # 设置窗口的标题

        bullets = Group()                        # 一个子弹组

        flyboat = Ship(screen)

        while True:  # 死循环

            for event in pygame.event.get():  # 检测用户的键盘鼠标等输入

                if event.type == pygame.QUIT:  # 此处仅检测是否退出

                    sys.exit()  # 退出

                elif event.type == pygame.KEYDOWN:

                    if event.key == pygame.K_RIGHT:

                        flyboat.moving_right = True

                    elif event.key == pygame.K_SPACE:

                        if len(bullets) < flyboat.bullets_allowed:                  # 将子弹组里的子弹数与飞船限制的子弹数量做对比,

                            new_bullet = Bullet(screen, flyboat)                    # 创建bullet实例,创建一个子弹。

                            bullets.add(new_bullet)                                       #  把实例添加到bullets组里面去

                elif event.type == pygame.KEYUP:  # key up

                    if event.key == pygame.K_RIGHT:

                        flyboat.moving_right = False

            screen.fill(bg_color)

            flyboat.blitme()

            for i in bullets:

                i.draw_bullet()

                i.update()

            remove_bullet(bullets)

            pygame.display.flip()  # 绘制一个新屏幕 并擦去旧屏幕 以形成平滑移动

    run_game()

    1.创建出屏幕

    2.绘制飞机

    3.让飞机射出子弹

    相关文章

      网友评论

          本文标题:pygame2

          本文链接:https://www.haomeiwen.com/subject/alrhqltx.html