Python贪吃蛇 (完整代码+详细注释)

贪吃蛇游戏实现思路

1. 游戏初始化

  • 导入必要的库:使用 pygame 库来处理图形和事件,使用 random 库来生成食物的位置。
  • 初始化 pygame:调用 pygame.init() 初始化所有 pygame 模块。
  • 定义颜色常量:定义常用的颜色(如白色、绿色、红色和黑色)以便于后续使用。
  • 设置屏幕大小:定义屏幕宽度和高度,并创建一个显示窗口。
  • 设置其他参数常量:包括单元格大小、蛇的移动方向和每秒帧数等。

2. 设计贪吃蛇类

  • 初始化蛇身和方向

    • 蛇由多个单元格组成,初始状态下蛇的身体是一个固定长度的直线。
    • 使用列表来存储蛇的每个单元格位置。
    • 定义蛇的初始方向(如右方向)。
  • 移动蛇身

    • 根据当前方向计算新头部的位置。
    • 将新头部插入蛇身列表的开头,并移除列表末尾的最后一个单元格,模拟蛇的移动。
  • 让蛇增长

    • 获取蛇尾和倒数第二个单元格的位置。
    • 计算新的尾部位置并添加到蛇身列表的末尾,使蛇增长一个单元格。
  • 检查蛇是否碰到自己

    • 判断蛇头是否与身体的其他部分重叠,如果重叠则表示蛇碰到了自己。
  • 检查蛇是否碰到食物

    • 判断蛇头是否与食物的位置重叠ÿ
以下是Python实现贪吃蛇的代码及注释: ```python import pygame import random # 定义颜色 black = (0, 0, 0) white = (255, 255, 255) red = (255, 0, 0) green = (0, 255, 0) # 初始化pygame pygame.init() # 设置屏幕大小 screen_width = 800 screen_height = 600 screen = pygame.display.set_mode([screen_width, screen_height]) # 设置字体 font = pygame.font.SysFont(None, 25) # 设置标题 pygame.display.set_caption('Snake Game') # 设置时钟 clock = pygame.time.Clock() # 设置方块大小 block_size = 10 # 定义函数,用于显示消息 def message_to_screen(msg, color): screen_text = font.render(msg, True, color) screen.blit(screen_text, [screen_width / 2, screen_height / 2]) # 定义函数,用于显示贪吃蛇 def draw_snake(block_size, snake_list): for x in snake_list: pygame.draw.rect(screen, green, [x[0], x[1], block_size, block_size]) # 定义主函数 def gameLoop(): gameExit = False gameOver = False # 初始化贪吃蛇位置和长度 lead_x = screen_width / 2 lead_y = screen_height / 2 lead_x_change = 0 lead_y_change = 0 snake_list = [] snake_length = 1 # 初始化食物位置 randAppleX = round(random.randrange(0, screen_width - block_size) / 10.0) * 10.0 randAppleY = round(random.randrange(0, screen_height - block_size) / 10.0) * 10.0 # 游戏循环 while not gameExit: # 游戏结束循环 while gameOver == True: screen.fill(white) message_to_screen("Game over, press C to continue or Q to quit", red) pygame.display.update() # 监听事件 for event in pygame.event.get(): if event.type == pygame.QUIT: gameExit = True gameOver = False if event.type == pygame.KEYDOWN: if event.key == pygame.K_q: gameExit = True gameOver = False if event.key == pygame.K_c: gameLoop() # 监听事件 for event in pygame.event.get(): if event.type == pygame.QUIT: gameExit = True if event.type == pygame.KEYDOWN: if event.key == pygame.K_LEFT: lead_x_change = -block_size lead_y_change = 0 elif event.key == pygame.K_RIGHT: lead_x_change = block_size lead_y_change = 0 elif event.key == pygame.K_UP: lead_y_change = -block_size lead_x_change = 0 elif event.key == pygame.K_DOWN: lead_y_change = block_size lead_x_change = 0 # 判断是否撞墙 if lead_x >= screen_width or lead_x < 0 or lead_y >= screen_height or lead_y < 0: gameOver = True # 移动贪吃蛇 lead_x += lead_x_change lead_y += lead_y_change # 画出背景 screen.fill(white) # 画出食物 pygame.draw.rect(screen, red, [randAppleX, randAppleY, block_size, block_size]) # 将贪吃蛇头部的位置添加到贪吃蛇列表中 snake_head = [] snake_head.append(lead_x) snake_head.append(lead_y) snake_list.append(snake_head) # 判断贪吃蛇长度是否达到指定值 if len(snake_list) > snake_length: del snake_list[0] # 判断是否吃到食物 for eachSegment in snake_list[:-1]: if eachSegment == snake_head: gameOver = True # 画出贪吃蛇 draw_snake(block_size, snake_list) # 更新分数 score = snake_length - 1 score_text = font.render("Score: " + str(score), True, black) screen.blit(score_text, [0, 0]) # 更新屏幕 pygame.display.update() # 判断是否吃到食物 if lead_x == randAppleX and lead_y == randAppleY: randAppleX = round(random.randrange(0, screen_width - block_size) / 10.0) * 10.0 randAppleY = round(random.randrange(0, screen_height - block_size) / 10.0) * 10.0 snake_length += 1 # 设置游戏帧率 clock.tick(20) # 退出pygame pygame.quit() # 退出程序 quit() # 运行游戏 gameLoop() ``` 以上是Python实现贪吃蛇的代码及注释,希望对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HJX—

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值