diff --git a/scene.py b/scene.py new file mode 100644 index 0000000..83c184b --- /dev/null +++ b/scene.py @@ -0,0 +1,88 @@ +''' +定义场景元素(地板, 云等) +''' +import pygame + + +'''地板''' +class Ground(pygame.sprite.Sprite): + def __init__(self, imagepath, position, **kwargs): + pygame.sprite.Sprite.__init__(self) + # 导入图片 + self.image_0 = pygame.image.load(imagepath) + self.rect_0 = self.image_0.get_rect() + self.rect_0.left, self.rect_0.bottom = position + self.image_1 = pygame.image.load(imagepath) + self.rect_1 = self.image_1.get_rect() + self.rect_1.left, self.rect_1.bottom = self.rect_0.right, self.rect_0.bottom + # 定义一些必要的参数 + self.speed = -10 + '''更新地板''' + def update(self): + self.rect_0.left += self.speed + self.rect_1.left += self.speed + if self.rect_0.right < 0: + self.rect_0.left = self.rect_1.right + if self.rect_1.right < 0: + self.rect_1.left = self.rect_0.right + '''将地板画到屏幕''' + def draw(self, screen): + screen.blit(self.image_0, self.rect_0) + screen.blit(self.image_1, self.rect_1) + + +'''云''' +class Cloud(pygame.sprite.Sprite): + def __init__(self, imagepath, position, **kwargs): + pygame.sprite.Sprite.__init__(self) + # 导入图片 + self.image = pygame.image.load(imagepath) + self.rect = self.image.get_rect() + self.rect.left, self.rect.top = position + # 定义一些必要的参数 + self.speed = -1 + '''将云画到屏幕上''' + def draw(self, screen): + screen.blit(self.image, self.rect) + '''更新云''' + def update(self): + self.rect = self.rect.move([self.speed, 0]) + if self.rect.right < 0: + self.kill() + + +'''记分板''' +class Scoreboard(pygame.sprite.Sprite): + def __init__(self, imagepath, position, size=(11, 13), is_highest=False, bg_color=None, **kwargs): + pygame.sprite.Sprite.__init__(self) + # 导入图片 + self.images = [] + image = pygame.image.load(imagepath) + for i in range(12): + self.images.append(pygame.transform.scale(image.subsurface((i*20, 0), (20, 24)), size)) + if is_highest: + self.image = pygame.Surface((size[0]*8, size[1])) + else: + self.image = pygame.Surface((size[0]*5, size[1])) + self.rect = self.image.get_rect() + self.rect.left, self.rect.top = position + # 一些必要的变量 + self.is_highest = is_highest + self.bg_color = bg_color + self.score = '00000' + '''设置得分''' + def set(self, score): + self.score = str(score).zfill(5) + '''画到屏幕上''' + def draw(self, screen): + self.image.fill(self.bg_color) + for idx, digital in enumerate(list(self.score)): + digital_image = self.images[int(digital)] + if self.is_highest: + self.image.blit(digital_image, ((idx+3)*digital_image.get_rect().width, 0)) + else: + self.image.blit(digital_image, (idx*digital_image.get_rect().width, 0)) + if self.is_highest: + self.image.blit(self.images[-2], (0, 0)) + self.image.blit(self.images[-1], (digital_image.get_rect().width, 0)) + screen.blit(self.image, self.rect) \ No newline at end of file