美文网首页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使用测试(四)

    使用OPP 面向对象的编程方式,创建类,来复用代码。 1. 创建玩家类 class Player(pygame.s...

  • Pygame使用测试(五)

    在本节中介绍 Sprite 分组、碰撞检测、用户事件和其他一些功能。 1. 增加速度配置 self.rect.mo...

  • Pygame使用测试(六)

    在本节中,我们将介绍背景、声音、字体和评分系统。这些都是游戏中需要的重要功能,以使其成为完整的产品。 完整代码如下...

  • Pygame使用测试(三)

    使用帧数 计算机的速度非常快,可以在一秒钟内完成数百万个循环周期。现在显然,这对我们人类来说有点快。作为参考,电影...

  • Pygame使用测试(一)

    最近因为孩子在学习使用Pygame做游戏编程,遇到问题咨询我,不得不对Pygame 做一个初步的了解使用。 官网有...

  • Pygame使用测试(二)

    1. Pygame 事件对象 当用户执行特定操作(例如单击鼠标或按下键盘按钮)时,会发生“事件”。Pygame 记...

  • python----pygame图形接口(太全了,收了)

    pygame图形接口 使用pygame.image模块,可以对图像进行读取和保存。 使用pygame.image....

  • Pygame-hello world

    使用pygame 模块名功能pygame.cdrom访问光驱pygame.cursors加载光标pygame.di...

  • 2020 无人驾驶(5)之车道线检测

    这里使用 pygame 来显示图片,有关 pygame 使用方法还是比较简单,pygame.init()初始化 p...

  • pygame图形移动、反弹、翻转

    pygame使用(01)

网友评论

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

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