[Python] 纯文本查看 复制代码
import pygame
import random
import sys
# 游戏设置
WIDTH, HEIGHT = 800, 600
CELL_SIZE = 20
MAZE_WIDTH = WIDTH // CELL_SIZE
MAZE_HEIGHT = HEIGHT // CELL_SIZE
FPS = 15 # 每秒帧数
# 颜色定义
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)
YELLOW = (255, 255, 0)
# 初始化pygame
pygame.init()
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("迷宫游戏")
clock = pygame.time.Clock()
class Player:
def __init__(self):
self.x, self.y = 1, 1
self.score = 0
def move(self, dx, dy, maze):
if maze[self.y + dy][self.x + dx] == 0:
self.x += dx
self.y += dy
class Enemy:
def __init__(self, x, y):
self.x, self.y = x, y
def move(self, player_pos, maze):
dx, dy = 0, 0
if self.x < player_pos[0]:
dx = 1
elif self.x > player_pos[0]:
dx = -1
if self.y < player_pos[1]:
dy = 1
elif self.y > player_pos[1]:
dy = -1
# 移动,确保进入的单元是通路
if maze[self.y + dy][self.x + dx] == 0:
self.x += dx
self.y += dy
def generate_maze(width, height):
maze = [[1] * width for _ in range(height)]
for x in range(1, width, 2):
for y in range(1, height, 2):
maze[y][x] = 0
for y in range(1, height - 1, 2):
for x in range(1, width - 1, 2):
direction = random.choice([(1, 0), (0, 1)])
if direction == (1, 0): # Horizontal
maze[y][x + 1] = 0
else: # Vertical
maze[y + 1][x] = 0
# 添加随机障碍物
for _ in range(random.randint(10, 30)):
x, y = random.randint(1, width - 2), random.randint(1, height - 2)
if maze[y][x] == 0:
maze[y][x] = 1
return maze
def draw_maze(maze, player, enemies, items):
screen.fill(WHITE)
for y in range(len(maze)):
for x in range(len(maze[y])):
color = BLACK if maze[y][x] == 1 else WHITE
pygame.draw.rect(screen, color, (x * CELL_SIZE,
y * CELL_SIZE, CELL_SIZE, CELL_SIZE))
pygame.draw.rect(screen, GREEN, (player.x * CELL_SIZE,
player.y * CELL_SIZE, CELL_SIZE, CELL_SIZE)) # 玩家
for enemy in enemies:
pygame.draw.rect(screen, RED, (enemy.x * CELL_SIZE,
enemy.y * CELL_SIZE, CELL_SIZE, CELL_SIZE)) # 敌人
for item in items:
pygame.draw.rect(
screen, BLUE, (item[0] * CELL_SIZE, item[1] * CELL_SIZE, CELL_SIZE, CELL_SIZE)) # 物品
def main():
maze = generate_maze(MAZE_WIDTH, MAZE_HEIGHT)
player = Player()
enemies = [Enemy(random.randint(1, MAZE_WIDTH - 2),
random.randint(1, MAZE_HEIGHT - 2)) for _ in range(3)]
# 生成物品
items = []
while len(items) < 5:
item = (random.randint(1, MAZE_WIDTH - 2),
random.randint(1, MAZE_HEIGHT - 2))
if item not in items and maze[item[1]][item[0]] == 0:
items.append(item)
exit_pos = (MAZE_WIDTH - 2, MAZE_HEIGHT - 2)
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
player.move(-1, 0, maze)
if keys[pygame.K_RIGHT]:
player.move(1, 0, maze)
if keys[pygame.K_UP]:
player.move(0, -1, maze)
if keys[pygame.K_DOWN]:
player.move(0, 1, maze)
# 敌人移动
for enemy in enemies:
enemy.move((player.x, player.y), maze)
# 检查玩家是否被抓住
for enemy in enemies:
if (player.x, player.y) == (enemy.x, enemy.y):
print(f"游戏结束!你的得分: {player.score}")
pygame.quit()
sys.exit()
# 收集物品
items = [item for item in items if item != (player.x, player.y)]
player.score += (5 - len(items)) * 10 # 每收集一个物品得10分
# 绘制迷宫
draw_maze(maze, player, enemies, items)
# 检查是否到达出口
if (player.x, player.y) == exit_pos:
print(f"恭喜!你成功逃脱,得分: {player.score}")
pygame.quit()
sys.exit()
pygame.display.flip()
clock.tick(FPS)
if __name__ == '__main__':
main()