手把手教你使用Python写贪吃蛇游戏(pygame,附源码)

您所在的位置:网站首页 贪吃蛇代码bat 手把手教你使用Python写贪吃蛇游戏(pygame,附源码)

手把手教你使用Python写贪吃蛇游戏(pygame,附源码)

2023-06-24 22:53| 来源: 网络整理| 查看: 265

贪吃蛇游戏是有史以来最受欢迎的街机游戏之一。在这个游戏中,玩家的主要目标是在不撞墙或不撞墙的情况下抓住最大数量的水果。在学习 Python 或 Pygame 时,可以将创建蛇游戏视为一项挑战。这是每个新手程序员都应该接受的最好的初学者友好项目之一。学习构建视频游戏是一种有趣而有趣的学习。

我们将使用Pygame来创建这个蛇游戏。Pygame是一个开源库,专为制作视频游戏而设计。它具有内置的图形和声音库。它也是初学者友好的和跨平台的。

公众号:每日治愈系列,获取更多相关资源!

在pygame有几个对象比较重要,分别是pygame.display—设置场景显示,包括页面大小,页面标题,页面更新(刷新)等; pygame.time–设置一切与时间相关的设置,游戏的帧频,游戏的持续时间等; pygame.event–设置与事件相关的处理,比如鼠标点击事件,键盘按下事件等; pygame.draw–绘制图形到界面上。

步骤分别是: 1.搭建初始框架,以及绘制场景

要做贪吃蛇游戏,首先第一步就是搭建一个初始界面,具体包括设置界面的size,设置关闭界面事件,设置帧频以及页面背景渲染和更新页面等,具体代码如下所示:

# 游戏初始化 pygame.init() # 游戏窗口大小 window_width = 800 window_height = 600 # 颜色定义 white = (255, 255, 255) black = (0, 0, 0) red = (255, 0, 0) green = (0, 255, 0) # 设置游戏窗口 window = pygame.display.set_mode((window_width, window_height)) pygame.display.set_caption('贪吃蛇') 2.绘制蛇头,食物以及蛇身的位置

简单来说就是把蛇头以及食物的位置确定出来,代码如下:

# 蛇头坐标 snake_x = window_width / 2 snake_y = window_height / 2 # 蛇身列表 snake_body = [[snake_x, snake_y]] # 食物坐标 food_x = round(random.randrange(0, window_width - 20) / 20) * 20 food_y = round(random.randrange(0, window_height - 20) / 20) * 20

3.创建一个函数来显示玩家的得分。 在这个函数中,首先我们要创建一个字体对象,即字体颜色会出现在这里。然后我们使用渲染来创建一个背景表面,每当我们的分数更新时,我们就会改变它。为文本表面对象创建一个矩形对象(文本将在此处刷新) score = 0 # 游戏结束标志 game_over = False # 游戏时钟 clock = pygame.time.Clock() # 游戏循环 while not game_over: for event in pygame.event.get(): if event.type == pygame.QUIT: game_over = True if event.type == pygame.KEYDOWN: if event.key == pygame.K_LEFT: direction = 'LEFT' elif event.key == pygame.K_RIGHT: direction = 'RIGHT' elif event.key == pygame.K_UP: direction = 'UP' elif event.key == pygame.K_DOWN: direction = 'DOWN' if direction == 'LEFT': snake_x -= snake_speed elif direction == 'RIGHT': snake_x += snake_speed elif direction == 'UP': snake_y -= snake_speed elif direction == 'DOWN': snake_y += snake_speed 4.此外就是游戏进入循环,不断地更新蛇身,以及分数

代码如下:

# 绘制背景 window.fill(black) # 绘制蛇身 for segment in snake_body: pygame.draw.rect(window, green, [segment[0], segment[1], 20, 20]) # 绘制食物 pygame.draw.rect(window, red, [food_x, food_y, 20, 20]) # 更新蛇身 snake_head = [snake_x, snake_y] snake_body.append(snake_head) if len(snake_body) > score + 1: del snake_body[0] # 检测蛇与食物的碰撞 if snake_x == food_x and snake_y == food_y: score += 1 food_x = round(random.randrange(0, window_width - 20) / 20) * 20 food_y = round(random.randrange(0, window_height - 20) / 20) * 20 # 检测蛇头与蛇身的碰撞 for segment in snake_body[:-1]: if segment == snake_head: game_over = True # 检测蛇是否超出边界 if snake_x >= window_width or snake_x < 0 or snake_y >= window_height or snake_y < 0: game_over = True # 刷新游戏窗口 pygame.display.update() 5.我也不多说了,完整代码如下: import pygame import random # 游戏初始化 pygame.init() # 游戏窗口大小 window_width = 800 window_height = 600 # 颜色定义 white = (255, 255, 255) black = (0, 0, 0) red = (255, 0, 0) green = (0, 255, 0) # 设置游戏窗口 window = pygame.display.set_mode((window_width, window_height)) pygame.display.set_caption('贪吃蛇') # 蛇头坐标 snake_x = window_width / 2 snake_y = window_height / 2 # 蛇身列表 snake_body = [[snake_x, snake_y]] # 食物坐标 food_x = round(random.randrange(0, window_width - 20) / 20) * 20 food_y = round(random.randrange(0, window_height - 20) / 20) * 20 # 蛇移动速度 snake_speed = 20 # 方向 direction = 'RIGHT' # 分数 score = 0 # 游戏结束标志 game_over = False # 游戏时钟 clock = pygame.time.Clock() # 游戏循环 while not game_over: for event in pygame.event.get(): if event.type == pygame.QUIT: game_over = True if event.type == pygame.KEYDOWN: if event.key == pygame.K_LEFT: direction = 'LEFT' elif event.key == pygame.K_RIGHT: direction = 'RIGHT' elif event.key == pygame.K_UP: direction = 'UP' elif event.key == pygame.K_DOWN: direction = 'DOWN' if direction == 'LEFT': snake_x -= snake_speed elif direction == 'RIGHT': snake_x += snake_speed elif direction == 'UP': snake_y -= snake_speed elif direction == 'DOWN': snake_y += snake_speed # 绘制背景 window.fill(black) # 绘制蛇身 for segment in snake_body: pygame.draw.rect(window, green, [segment[0], segment[1], 20, 20]) # 绘制食物 pygame.draw.rect(window, red, [food_x, food_y, 20, 20]) # 更新蛇身 snake_head = [snake_x, snake_y] snake_body.append(snake_head) if len(snake_body) > score + 1: del snake_body[0] # 检测蛇与食物的碰撞 if snake_x == food_x and snake_y == food_y: score += 1 food_x = round(random.randrange(0, window_width - 20) / 20) * 20 food_y = round(random.randrange(0, window_height - 20) / 20) * 20 # 检测蛇头与蛇身的碰撞 for segment in snake_body[:-1]: if segment == snake_head: game_over = True # 检测蛇是否超出边界 if snake_x >= window_width or snake_x < 0 or snake_y >= window_height or snake_y < 0: game_over = True # 刷新游戏窗口 pygame.display.update() # 控制游戏帧率 clock.tick(10) # 游戏结束,退出 pygame.quit() 公众号:每日治愈系列,获取更多相关资源!包含多种编程小游戏以及讲解1


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3