使用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)
网友评论