欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 明星 > Python-基于Pygame的小游戏(走迷宫)(一)

Python-基于Pygame的小游戏(走迷宫)(一)

2025/6/20 4:39:15 来源:https://blog.csdn.net/2401_83954530/article/details/144547261  浏览:    关键词:Python-基于Pygame的小游戏(走迷宫)(一)

前言:走迷宫游戏是一种经典的益智游戏,玩家需要在复杂的迷宫中找到出口。迷宫是随机生成的,因此随机生成的迷宫每次玩都会有不同的体验。玩家需要控制一个角色在迷宫中移动,找到迷宫的出口,从而获得游戏胜利。本此我们就一起来体验"走迷宫"的乐趣。

编程思路:本次编程我们将会用到pygame,random,sys等库。其中pygame库是Python的第三方库,需要我们自行下载(这里就不再过多缀述了,不懂的小白可以看我前几篇文章下载pygame的教程)。

第一步:准备图片

游戏的图片是需要我们自行准备的(包括玩家,出口等)

这里我给大家一些参考图片(注意:图片像素根据你设的CELL_SIZE决定,例如你设CELL_SIZE为20,则图片像素应为20x20)。

墙:

2d74d67f062a45bb95469c3f5212e37b.png

出口:

6916ab1bebc542858eba2a868a1c8bd1.png

玩家:

3dca30571e794f6ea3b009f5cc17fe31.png

第二步:完整代码展示

#导入库
import pygame
import sys
import random#设置窗口大小和单元格大小
WIDTH = 800
HEIGHT = 600
CELL_SIZE = 20
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)#迭代生成迷宫
def generate_maze(width, height):maze = [[1] * width for _ in range(height)]start_x, start_y = 1, 1end_x, end_y = width - 2, height - 2def visit(x, y):maze[y][x] = 0directions = [(1, 0), (-1, 0), (0, 1), (0, -1)]random.shuffle(directions)for dx, dy in directions:new_x, new_y = x + 2 * dx, y + 2 * dyif 0 <= new_x < width and 0 <= new_y < height and maze[new_y][new_x] == 1:maze[y + dy][x + dx] = 0visit(new_x, new_y)visit(start_x, start_y)maze[start_y][start_x] = 0maze[end_y][end_x] = 0return maze#玩家类
class Player(pygame.sprite.Sprite):def __init__(self, x, y):super().__init__()self.image = pygame.image.load('man.png').convert_alpha()self.rect = self.image.get_rect()self.rect.x = x * CELL_SIZEself.rect.y = y * CELL_SIZEdef move(self, dx, dy):new_x = self.rect.x + dx * CELL_SIZEnew_y = self.rect.y + dy * CELL_SIZEif 0 <= new_x < WIDTH and 0 <= new_y < HEIGHT:self.rect.x = new_xself.rect.y = new_ydef draw(self, screen):screen.blit(self.image, self.rect)#墙类
class Wall(pygame.sprite.Sprite):def __init__(self, x, y):super().__init__()self.image = pygame.image.load('wall.png').convert_alpha()self.rect = self.image.get_rect()self.rect.x = x * CELL_SIZEself.rect.y = y * CELL_SIZE#终点类
class End(pygame.sprite.Sprite):def __init__(self, x, y):super().__init__()self.image = pygame.image.load('exit.png').convert_alpha()self.rect = self.image.get_rect()self.rect.x = x * CELL_SIZEself.rect.y = y * CELL_SIZEdef draw(self, screen):screen.blit(self.image, self.rect)#游戏循环类
class MazeGame:def __init__(self):pygame.init()self.screen = pygame.display.set_mode((WIDTH, HEIGHT))pygame.display.set_caption('迷宫游戏')self.clock = pygame.time.Clock()self.maze = generate_maze(WIDTH // CELL_SIZE, HEIGHT // CELL_SIZE)self.player = Player(1, 1)self.walls = pygame.sprite.Group()self.end = End((WIDTH // CELL_SIZE) - 2, (HEIGHT // CELL_SIZE) - 2)self.create_walls()self.start_time = pygame.time.get_ticks()self.run_game()def create_walls(self):for y in range(len(self.maze)):for x in range(len(self.maze[y])):if self.maze[y][x] == 1:wall = Wall(x, y)self.walls.add(wall)def handle_events(self):for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()sys.exit()elif event.type == pygame.KEYDOWN:if event.key == pygame.K_UP:self.player.move(0, -1)elif event.key == pygame.K_DOWN:self.player.move(0, 1)elif event.key == pygame.K_LEFT:self.player.move(-1, 0)elif event.key == pygame.K_RIGHT:self.player.move(1, 0)def check_win(self):if pygame.sprite.collide_rect(self.player, self.end):end_time = pygame.time.get_ticks()elapsed_time = (end_time - self.start_time) // 1000print(f'You win! Time taken: 0.0599 seconds')pygame.quit()sys.exit()def draw(self):self.screen.fill(BLACK)self.walls.draw(self.screen)self.end.draw(self.screen)self.player.draw(self.screen)pygame.display.flip()def run_game(self):while True:self.clock.tick(60)self.handle_events()self.check_win()self.draw()#游戏主循环
if __name__ == '__main__':game = MazeGame()

第三步:运行效果展示

6d854512e9364e2aad910c0ce26b8de3.png

890c298f813a49f08ca877e8aa7c36db.png

677ab36dff94404f8b08d182a5f35eb4.png

第四步:游戏玩法

上,下,左,右方向键控制玩家的移动方向

(后续我还会持续更新哦)

 

 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词