diff --git a/25.02.2024./cheese.py b/25.02.2024./cheese.py new file mode 100644 index 0000000..2af6924 --- /dev/null +++ b/25.02.2024./cheese.py @@ -0,0 +1,123 @@ +import pygame +import random + +pygame.init() + +SCREEN_WIDTH = 800 +SCREEN_HEIGHT = 600 +WHITE = (255, 255, 255) +RED = (255, 0, 0) +BLACK = (0, 0, 0) +CELL_SIZE = 40 + +maze = [ + "XXXXXXXXXXXXXXXXXXXXX", + "X X X X X X", + "X XXXXX XXX X X X X X", + "X X X X X X X X", + "X XXX X X X X X X X X", + "X X X X X X X X", + "X X XXXXXX XXX XXX X X", + "X X X X X X", + "X XXX X XXXXXXXXX X X", + "X X X X X X", + "X X X XXXXXXXXX X X X", + "X X X X X X", + "X X XXX XXXXX X XXX X", + "X X X X X X", + "X XXXXX XXXXXXXXX X X", + "X X X X", + "XXXXX XXXXXXXXXXXXX X", + "X X X", + "XXXXXXXXXXXXXXXXXXXXX", +] + +screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT)) +pygame.display.set_caption("Cheese Maze") + +class Player(pygame.sprite.Sprite): + def __init__(self): + super().__init__() + self.image = pygame.Surface((CELL_SIZE, CELL_SIZE)) + self.image.fill(RED) + self.rect = self.image.get_rect() + self.rect.topleft = (CELL_SIZE, CELL_SIZE) + + def move(self, dx, dy): + if self.is_valid_move(dx, dy): + self.rect.x += dx + self.rect.y += dy + + def is_valid_move(self, dx, dy): + new_rect = self.rect.move(dx, dy) + for y, row in enumerate(maze): + for x, cell in enumerate(row): + if cell == "X" and new_rect.colliderect(pygame.Rect(x * CELL_SIZE, y * CELL_SIZE, CELL_SIZE, CELL_SIZE)): + return False + return True + +class Cheese(pygame.sprite.Sprite): + def __init__(self): + super().__init__() + self.image = pygame.Surface((CELL_SIZE // 2, CELL_SIZE // 2)) + self.image.fill((255, 255, 0)) + self.rect = self.image.get_rect() + self.generate_random_position() + + def generate_random_position(self): + while True: + x = random.randint(1, 18) + y = random.randint(1, 13) + if maze[y][x] != "X": + self.rect.topleft = (x * CELL_SIZE, y * CELL_SIZE) + break + +all_sprites = pygame.sprite.Group() +player = Player() +all_sprites.add(player) +cheeses = pygame.sprite.Group() +for _ in range(10): + cheese = Cheese() + all_sprites.add(cheese) + cheeses.add(cheese) + +running = True +clock = pygame.time.Clock() +while running: + + for event in pygame.event.get(): + if event.type == pygame.QUIT: + running = False + + keys = pygame.key.get_pressed() + dx, dy = 0, 0 + if keys[pygame.K_LEFT]: + dx = -CELL_SIZE + if keys[pygame.K_RIGHT]: + dx = CELL_SIZE + if keys[pygame.K_UP]: + dy = -CELL_SIZE + if keys[pygame.K_DOWN]: + dy = CELL_SIZE + player.move(dx, dy) + + collisions = pygame.sprite.spritecollide(player, cheeses, True) + for cheese in collisions: + print("You collected a cheese!") + + screen_x = max(0, min(player.rect.x - SCREEN_WIDTH // 2, (len(maze[0]) - 1) * CELL_SIZE - SCREEN_WIDTH)) + screen_y = max(0, min(player.rect.y - SCREEN_HEIGHT // 2, (len(maze) - 1) * CELL_SIZE - SCREEN_HEIGHT)) + screen_rect = pygame.Rect(screen_x, screen_y, SCREEN_WIDTH, SCREEN_HEIGHT) + + screen.fill(BLACK) + for y, row in enumerate(maze): + for x, cell in enumerate(row): + if cell == "X": + pygame.draw.rect(screen, WHITE, (x * CELL_SIZE - screen_x, y * CELL_SIZE - screen_y, CELL_SIZE, CELL_SIZE)) + for sprite in all_sprites: + screen.blit(sprite.image, sprite.rect.move(-screen_x, -screen_y)) + pygame.display.flip() + + clock.tick(10) + +pygame.quit() diff --git a/25.02.2024./cheese2.py b/25.02.2024./cheese2.py new file mode 100644 index 0000000..d45bbec --- /dev/null +++ b/25.02.2024./cheese2.py @@ -0,0 +1,179 @@ +import pygame +import random + +# 初始化Pygame +pygame.init() + +# 定义常量 +SCREEN_WIDTH = 800 +SCREEN_HEIGHT = 600 +WHITE = (255, 255, 255) +RED = (255, 0, 0) +GREEN = (0, 255, 0) +BLACK = (0, 0, 0) +CELL_SIZE = 40 + +# 迷宫地图 +maze = [ + "XXXXXXXXXXXXXXXXXXXX", + "X X X X X X", + "X XXXXX XXX X X X X X", + "X X X X X X X X", + "X XXX X X X X X X X X", + "X X X X X X X X", + "X X XXXXXX XXX XXX X X", + "X X X X X X", + "X XXX X XXXXXXXXX X X", + "X X X X X X", + "X X X XXXXXXXXX X X X", + "X X X X X X", + "X X XXX XXXXX X XXX X", + "X X X X X X", + "X XXXXX XXXXXXXXX X X", + "X X X X", + "XXXXX XXXXXXXXXXXXX X", + "X X X", + "XXXXXXXXXXXXXXXXXXXX", +] + +# 创建游戏窗口 +screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT)) +pygame.display.set_caption("Cheese Maze") + +# 定义角色类 +class Player(pygame.sprite.Sprite): + def __init__(self): + super().__init__() + self.image = pygame.Surface((CELL_SIZE, CELL_SIZE)) + self.image.fill(RED) + self.rect = self.image.get_rect() + self.rect.topleft = (CELL_SIZE, CELL_SIZE) + + def move(self, dx, dy): + if self.is_valid_move(dx, dy): + self.rect.x += dx + self.rect.y += dy + + def is_valid_move(self, dx, dy): + new_rect = self.rect.move(dx, dy) + for y, row in enumerate(maze): + for x, cell in enumerate(row): + if cell == "X" and new_rect.colliderect(pygame.Rect(x * CELL_SIZE, y * CELL_SIZE, CELL_SIZE, CELL_SIZE)): + return False + return True + +# 定义反派类 +class Villain(pygame.sprite.Sprite): + def __init__(self, player): + super().__init__() + self.image = pygame.Surface((CELL_SIZE, CELL_SIZE)) + self.image.fill(GREEN) + self.rect = self.image.get_rect() + self.player = player + self.generate_random_position() + + def generate_random_position(self): + while True: + x = random.randint(1, 18) + y = random.randint(1, 13) + if maze[y][x] != "X": + self.rect.topleft = (x * CELL_SIZE, y * CELL_SIZE) + break + + def move_towards_player(self): + dx = self.player.rect.x - self.rect.x + dy = self.player.rect.y - self.rect.y + if abs(dx) > abs(dy): + dx = dx // abs(dx) * CELL_SIZE + dy = 0 + else: + dx = 0 + dy = dy // abs(dy) * CELL_SIZE + if self.is_valid_move(dx, dy): + self.rect.x += dx + self.rect.y += dy + + def is_valid_move(self, dx, dy): + new_rect = self.rect.move(dx, dy) + for y, row in enumerate(maze): + for x, cell in enumerate(row): + if cell == "X" and new_rect.colliderect(pygame.Rect(x * CELL_SIZE, y * CELL_SIZE, CELL_SIZE, CELL_SIZE)): + return False + return True + +# 定义奶酪类 +class Cheese(pygame.sprite.Sprite): + def __init__(self): + super().__init__() + self.image = pygame.Surface((CELL_SIZE // 2, CELL_SIZE // 2)) + self.image.fill((255, 255, 0)) # 设置奶酪为黄色 + self.rect = self.image.get_rect() + self.generate_random_position() + + def generate_random_position(self): + while True: + x = random.randint(1, 18) + y = random.randint(1, 13) + if maze[y][x] != "X": + self.rect.topleft = (x * CELL_SIZE, y * CELL_SIZE) + break + +# 创建玩家、奶酪和反派组 +all_sprites = pygame.sprite.Group() +player = Player() +all_sprites.add(player) +cheeses = pygame.sprite.Group() +for _ in range(10): # 创建10个奶酪 + cheese = Cheese() + all_sprites.add(cheese) + cheeses.add(cheese) +villain = Villain(player) +all_sprites.add(villain) + +# 游戏循环 +running = True +clock = pygame.time.Clock() +while running: + # 事件处理 + for event in pygame.event.get(): + if event.type == pygame.QUIT: + running = False + + # 玩家控制 + keys = pygame.key.get_pressed() + dx, dy = 0, 0 + if keys[pygame.K_LEFT]: + dx = -CELL_SIZE + if keys[pygame.K_RIGHT]: + dx = CELL_SIZE + if keys[pygame.K_UP]: + dy = -CELL_SIZE + if keys[pygame.K_DOWN]: + dy = CELL_SIZE + player.move(dx, dy) + + # 反派追击玩家 + villain.move_towards_player() + + # 检测反派和玩家的碰撞 + if pygame.sprite.collide_rect(player, villain): + print("Game Over!") + running = False + + # 绘制迷宫和角色 + screen.fill(BLACK) + for y, row in enumerate(maze): + for x, cell in enumerate(row): + if cell == "X": + pygame.draw.rect(screen, WHITE, (x * CELL_SIZE, y * CELL_SIZE, CELL_SIZE, CELL_SIZE)) + all_sprites.draw(screen) + + # 刷新屏幕 + pygame.display.flip() + + # 控制帧率 + clock.tick(10) + +# 退出Pygame +pygame.quit() +