Mar-02-2022, 08:44 PM
Bricks and BricksB are identical.
I would change BRICKS_FILES to be this:
With all the image files there's not much reason for an image dictionary. I would modify the code so each Brick has their own images. This will also make it easy to write text on the bricks.
Note: I have not run any of this code.
I thought you wanted to put names on the bricks. Do you still need help with that? I noticed your code does not have the create_image() function that lets you write text on the sprite.
I would change BRICKS_FILES to be this:
BRICK_FILES = (("brick0.png", "brick1.png", "brick2.png"), ("bbrick0.png", "bbrick1.png", "bbrick2.png"))Bricks can randomly pick a group of image files.
With all the image files there's not much reason for an image dictionary. I would modify the code so each Brick has their own images. This will also make it easy to write text on the bricks.
class Brick(EnhancedSprite): """ A target for the ball. After I take some number of hits I die. Number of hits I can take is in range 1 to 3. Hits is randomly selected if not specified. Specify brick color using (R, G, B) format. If color not specified a color is selected based on the row. image """ group = pygame.sprite.Group() def __init__(self, x, y, color=None, hits=None, image_files=None): color = color or random.choice(BRICK_COLORS) hits = hits or random.choice((1, 1, 1, 2, 2, 3)) hits = max(0, min(len(image_files, hits))) self.value = self.hits = hits image_files = image_files or random.choice(BRICK_FILES) self.images = [create_image(image_file, color) for image_file in image_files] super().__init__(self.images[self.hits-1], self.group) self.at(x, y) def __len__(self): """Return how many bricks remaining""" return len(self.group) def hit(self): """ I was hit! Update my appearance or die based on my hit total. Return score based on being hit. """ self.hits -= 1 if self.hits > 0: self.image = self.images[self.hits-1] return 0 self.kill() return self.valueThis simplifies the brick creation. The main function doesn't do anything special for bricks.
while len(lives) > 0: for coords in BRICK_COORDS: Brick(*coords) allsprites.add(Brick.group)And I modified the coordinates too.
BRICK_COORDS = ( (32, 32), (32, 64), (32, 96), (32, 128), (32, 160), (32, 192), (64, 64), (96, 96), (128, 64), (160, 32), (160, 64), (160, 96), (160, 128), (160, 160), (160, 192), (224, 32), (224, 64), (224, 96), (224, 128), (224, 160), (224, 192), (256, 32), (256, 128), (288, 32), (288, 64), (288, 96), (288, 128), (288, 160), (288, 192), (352, 32), (352, 64), (352, 96), (352, 128), (352, 160), (352, 192), (384, 32), (384, 96), (384, 128), (416, 32), (416, 64), (416, 96), (416, 160), (448, 192), (512, 32), (512, 64), (512, 96), (512, 128), (512, 160), (512, 192), (544, 32), (544, 192), (576, 32), (576, 192), (640, 32), (640, 64), (640, 96), (640, 128), (640, 160), (640, 192), (672, 32), (672, 192), (704, 32), (704, 192), (736, 32), (736, 64), (736, 96), (736, 128), (736, 160), (736, 192))You could, if you wanted, make a different brick coords list for each level. This will be cleaner if the list is at the top of the file instead of buried inside a method down near the bottom.
Note: I have not run any of this code.
I thought you wanted to put names on the bricks. Do you still need help with that? I noticed your code does not have the create_image() function that lets you write text on the sprite.