项目53:简易贪吃蛇【源代码】 — 《跟着小王学Python·新手》

《跟着小王学Python》 是一套精心设计的Python学习教程,适合各个层次的学习者。本教程从基础语法入手,逐步深入到高级应用,以实例驱动的方式,帮助学习者逐步掌握Python的核心概念。通过开发游戏、构建Web应用、编写网络爬虫、制作桌面软件等多样化项目,学习者可以深入理解并实践Python知识。每周更新1至2篇内容,旨在助力学习者成长为全栈工程师。

作为课程作业或者毕设参考也是不错的选择


文章目录

  • 项目53:简易贪吃蛇【源代码】 --- 《跟着小王学Python·新手》
  • 目标
  • 功能
  • 设计
  • 游戏界面
  • 蛇的控制
  • 食物的生成
  • 游戏逻辑
  • 实现步骤
  • 代码实现
  • 测试
  • 注意事项
  • 小结


项目53:简易贪吃蛇【源代码】 --- 《跟着小王学Python·新手》_python

目标

通过实现一个简易的贪吃蛇游戏,帮助Python新手熟悉基本的编程概念,如循环、条件判断、列表操作等,并掌握使用Pygame库进行图形界面编程的方法。

项目53:简易贪吃蛇【源代码】 --- 《跟着小王学Python·新手》_python_02

功能

  • 贪吃蛇能够自由移动,吃到食物后长度增加
  • 碰到墙壁或自身时游戏结束
  • 游戏过程中可以实时显示当前得分
  • 提供重新开始游戏的功能

设计

游戏界面

  • 使用Pygame库创建一个矩形窗口作为游戏界面
  • 界面背景色设置为黑色,蛇和食物的颜色分别为绿色和红色
  • 在窗口顶部显示得分信息,字体颜色为白色

蛇的控制

  • 蛇由一系列坐标点组成,初始时为一个长度为3的蛇
  • 使用方向键控制蛇的移动方向,每次移动时蛇头移动到新的位置,蛇尾的最后一个点被移除
  • 当蛇吃到食物时,蛇尾增加一个点,长度增加

食物的生成

  • 食物的初始位置随机生成在游戏界面内
  • 当蛇吃到食物后,重新随机生成一个新的食物位置

游戏逻辑

  • 判断蛇是否碰到墙壁或自身,若是则游戏结束
  • 计算蛇的长度作为得分,并实时更新显示
  • 提供重新开始游戏的功能,重置蛇的初始状态和得分

实现步骤

  1. 安装Pygame库
  2. 创建游戏窗口和设置背景
  3. 定义蛇和食物的类,并初始化
  4. 实现蛇的移动控制和碰撞检测
  5. 实现食物的生成和蛇吃食物的逻辑
  6. 显示得分信息
  7. 添加重新开始游戏的功能
  8. 运行游戏并进行测试

代码实现

import pygame
import random# 初始化Pygame
pygame.init()# 设置窗口大小
window_width = 400
window_height = 400
window = pygame.display.set_mode((window_width, window_height))# 设置颜色
black = (0, 0, 0)
green = (0, 255, 0)
red = (255, 0, 0)
white = (255, 255, 255)# 设置字体
font = pygame.font.SysFont(None, 36)# 蛇类
class Snake:def __init__(self):self.body = [(100, 100), (80, 100), (60, 100)]self.direction = 'RIGHT'def move(self):head_x, head_y = self.body[0]if self.direction == 'RIGHT':head_x += 20elif self.direction == 'LEFT':head_x -= 20elif self.direction == 'UP':head_y -= 20elif self.direction == 'DOWN':head_y += 20self.body.insert(0, (head_x, head_y))self.body.pop()def grow(self):tail_x, tail_y = self.body[-1]if self.direction == 'RIGHT':tail_x -= 20elif self.direction == 'LEFT':tail_x += 20elif self.direction == 'UP':tail_y += 20elif self.direction == 'DOWN':tail_y -= 20self.body.append((tail_x, tail_y))def change_direction(self, new_direction):if (self.direction == 'RIGHT' and new_direction != 'LEFT') or \(self.direction == 'LEFT' and new_direction != 'RIGHT') or \(self.direction == 'UP' and new_direction != 'DOWN') or \(self.direction == 'DOWN' and new_direction != 'UP'):self.direction = new_directiondef check_collision(self):head_x, head_y = self.body[0]if head_x < 0 or head_x >= window_width or head_y < 0 or head_y >= window_height:return Truefor segment in self.body[1:]:if segment == self.body[0]:return Truereturn False# 食物类
class Food:def __init__(self):self.position = (random.randint(0, window_width // 20 - 1) * 20, random.randint(0, window_height // 20 - 1) * 20)def generate(self):self.position = (random.randint(0, window_width // 20 - 1) * 20, random.randint(0, window_height // 20 - 1) * 20)# 初始化蛇和食物
snake = Snake()
food = Food()# 游戏主循环
running = True
score = 0
clock = pygame.time.Clock()while running:for event in pygame.event.get():if event.type == pygame.QUIT:running = Falseelif event.type == pygame.KEYDOWN:if event.key == pygame.K_UP:snake.change_direction('UP')elif event.key == pygame.K_DOWN:snake.change_direction('DOWN')elif event.key == pygame.K_LEFT:snake.change_direction('LEFT')elif event.key == pygame.K_RIGHT:snake.change_direction('RIGHT')elif event.key == pygame.K_r:snake = Snake()food = Food()score = 0snake.move()if snake.body[0] == food.position:snake.grow()food.generate()score += 1if snake.check_collision():running = Falsewindow.fill(black)for segment in snake.body:pygame.draw.rect(window, green, pygame.Rect(segment[0], segment[1], 20, 20))pygame.draw.rect(window, red, pygame.Rect(food.position[0], food.position[1], 20, 20))score_text = font.render('Score: ' + str(score), True, white)window.blit(score_text, (10, 10))pygame.display.update()clock.tick(10)pygame.quit()

测试

  • 运行代码,检查游戏窗口是否正常显示
  • 使用方向键控制蛇移动,观察蛇的移动是否流畅
  • 当蛇吃到食物时,检查蛇的长度是否增加,得分是否更新
  • 当蛇碰到墙壁或自身时,检查游戏是否结束
  • 按下“R”键,检查游戏是否能够重新开始

注意事项

  • 确保安装了Pygame库,否则代码无法正常运行
  • 在游戏主循环中,合理设置时钟的tick值,以控制蛇的移动速度
  • 在蛇的移动控制中,注意防止蛇反向移动到自身上
  • 在重新开始游戏时,确保重置蛇的初始状态和得分

小结

通过实现这个简易的贪吃蛇游戏,我们学习了如何使用Pygame库进行图形界面编程,掌握了蛇的移动控制、食物的生成以及碰撞检测等基本逻辑。希望这篇文章能帮助Python新手更好地理解和掌握编程知识,为后续的学习打下坚实的基础。