美文网首页Python
Pygame使用测试(四)

Pygame使用测试(四)

作者: Ritchie_Li | 来源:发表于2022-06-01 18:24 被阅读0次

    使用OPP 面向对象的编程方式,创建类,来复用代码。

    1. 创建玩家类

    class Player(pygame.sprite.Sprite):

        def __init__(self):

            super().__init__()

            self.image = pygame.image.load("Player.png")

            self.rect = self.image.get_rect()

            self.rect.center = (160, 520)

    其中image.load()函数,我们将图像的文件路径传递给该函数,加载玩家的图片。get_rect()函数来获取边界,self.rect.center定义了 Rect 的起始位置。

    2. 控制玩家移动的类

    def update(self):

        pressed_keys = pygame.key.get_pressed()

            #if pressed_keys[K_UP]:

             #self.rect.move_ip(0, -5)

              #if pressed_keys[K_DOWN]:

                #self.rect.move_ip(0,5)

            if self.rect.left > 0:

                  if pressed_keys[K_LEFT]:

                      self.rect.move_ip(-5, 0)

            if self.rect.left > 0:     

                  if pressed_keys[K_RIGHT]:

                      self.rect.move_ip(5, 0)

    LEFT键左移, RIGHT键右移。在这里不需要上下移动。

    3. 创建敌人类

    class Enemy(pygame.sprite.Sprite):

          def __init__(self):

            super().__init__()

            self.image = pygame.image.load("Enemy.png")

            self.rect = self.image.get_rect()

            self.rect.center = (random.randint(40,SCREEN_WIDTH-40), 0)

    唯一的变化是最后一行,我们在其中包含了随机起点。(如果敌人每次都从同一个位置出现,那就太无聊了)

    定义移动函数

    def move(self):

      self.rect.move_ip(0,10)

      if (self.rect.top > 600):

          self.rect.top = 0

          self.rect.center = (random.randint(30, 370), 0)

    它首先调用该move_ip()函数,将 Enemy 对象向下移动 10 个像素。接下来它会检查 Enemy 的顶部是否已经到达屏幕的末端。如果为 True,则将其重置回屏幕顶部和 X 轴上的随机位置。

    3. 创建类的对象

    P1.update()

    E1.move()

    Screen.fill(WHITE)

    P1.draw(Screen)

    E1.draw(Screen)

    pygame.display.update()

    FramePerSec.tick(FPS)

    完整代码如下:

    import pygame, sys

    from pygame.localsimport *

    import random

    pygame.init()

    FPS =60

    FramePerSec = pygame.time.Clock()

    BLUE = (0, 0, 255)

    RED = (255, 0, 0)

    GREEN = (0, 255, 0)

    BLACK = (0, 0, 0)

    WHITE = (255, 255, 255)

    SCREEN_WIDTH =400

    SCREEN_HEIGHT =600

    Screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))

    pygame.display.set_caption("Game")

    bg = pygame.image.load("bg.png")

    class Enemy(pygame.sprite.Sprite):

        def __init__(self):

            super().__init__()

            self.image = pygame.image.load("enemy1.png")

            self.rect =self.image.get_rect()

            self.rect.center = (random.randint(40, SCREEN_WIDTH -40), 0)

    def move(self):

            self.rect.move_ip(0, 10)

            if (self.rect.bottom >600):

                    self.rect.top =0

                    self.rect.center = (random.randint(30, 370), 0)

    def draw(self, surface):

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

    class Player(pygame.sprite.Sprite):

            def __init__(self):

                super().__init__()

                self.image = pygame.image.load("hero1.png")

                self.rect =self.image.get_rect()

                self.rect.center = (160, 520)

        def update(self):

                pressed_keys = pygame.key.get_pressed()

                # if pressed_keys[K_UP]:

                # self.rect.move_ip(0, -5)

                # if pressed_keys[K_DOWN]:

                # self.rect.move_ip(0,5)

            if self.rect.left >0:

                if pressed_keys[K_LEFT]:

                    self.rect.move_ip(-5, 0)

            if self.rect.right < SCREEN_WIDTH:

                if pressed_keys[K_RIGHT]:

                    self.rect.move_ip(5, 0)

    def draw(self, surface):

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

    # 实例化对象

    P1 = Player()

    E1 = Enemy()

    while True:

            Screen.blit(bg, (0, 0))

            for eventin pygame.event.get():

                    if event.type == QUIT:

                            pygame.quit()

                            sys.exit()

    P1.update()

    E1.move()

    # Screen.fill(WHITE)

     P1.draw(Screen)

    E1.draw(Screen)

    pygame.display.update()

    FramePerSec.tick(FPS)

    相关文章

      网友评论

        本文标题:Pygame使用测试(四)

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