'''
定义场景元素(地板, 云等)
'''
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)