2024-06-27
Python
00

目录

功能需求分析
游戏元素
游戏逻辑
完整代码示例

功能需求分析

  1. 控制方向:通过键盘的上、下、左、右 方向键控制贪吃蛇的方向;
  2. 游戏结束条件:触碰到自身则游戏结束;
  3. 食物处理:当贪吃蛇头部接触到食物时,食物消失并且贪吃蛇身体变长。
  4. 游戏结束显示:死亡后显示贪吃蛇最终的长度。

游戏元素

我们需要以下几个主要元素:

  • 贪吃蛇:由一系列方块(身体)组成,每个方块有自己的位置。
  • 食物:随机出现在游戏界面上的一个位置。
  • 游戏界面:游戏的可视化界面,使用Python的GUI库来实现,我们使用 pygame 库来实现。

游戏逻辑

  1. 初始化:设置游戏界面、贪吃蛇初始位置和长度,随机生成食物位置。
  2. 游戏循环:不断更新贪吃蛇的位置,检测按键事件(控制方向)、检测碰撞(自身和边界)、处理食物逻辑(吃到食物后身体变长),更新游戏界面。
  3. 碰撞检测:检测贪吃蛇头部是否与身体的其他部分或者边界碰撞,如果是,则游戏结束。
  4. 食物逻辑:当贪吃蛇头部与食物位置重合时,食物消失,贪吃蛇身体增加一节,生成新的食物位置。
  5. 游戏结束:显示贪吃蛇最终的长度,并提供重新开始游戏的选项。

完整代码示例

python
# 导入第三方游戏制作库 pygame 安装命令: pip install pygame import pygame import random import copy # 定义蛇的位置 snake_list = [[10, 10]] # 定义移动方向,一开始向上移动 move_up = True move_down = False move_left = False move_right = False # 定义食物的位置,随机的位置 food_point = [random.randint(10, 490), random.randint(10, 490)] random.randint(5, 10) """初始化游戏""" pygame.init() # fps 刷新帧率 clock = pygame.time.Clock() # 设置屏幕大小 screen = pygame.display.set_mode((500, 500)) # 制作标题 pygame.display.set_caption('贪吃蛇小游戏') """进入游戏,玩游戏""" # 设置游戏开关 running = True while running: # 设置fps为20帧 clock.tick(20) # 绘制屏幕为白色的 screen.fill([255, 255, 255]) # 用键盘控制移动方向 for event in pygame.event.get(): # 先判断按键是否按下 if event.type == pygame.KEYDOWN: # 再判断按键是什么类型的 if event.key == pygame.K_UP: move_up = True move_down = False move_left = False move_right = False if event.key == pygame.K_DOWN: move_up = False move_down = True move_left = False move_right = False if event.key == pygame.K_LEFT: move_up = False move_down = False move_left = True move_right = False if event.key == pygame.K_RIGHT: move_up = False move_down = False move_left = False move_right = True # 绘制食物 pygame.draw.circle 绘制圆点的方法 food_rect = pygame.draw.circle(screen, [255, 0, 0], food_point, 15, 0) # snake_rect 绘制蛇的身子 snake_rect = [] # 遍历蛇身子的每一个点 for snake_point in snake_list: snake_rect_point = pygame.draw.circle(screen, [255, 0, 0], snake_point, 5, 0) snake_rect.append(snake_rect_point) # 检测碰撞 吃食物 if food_rect.collidepoint(snake_point): # 蛇吃掉食物,增加一个点 snake_list.append(food_point) # 重新绘制食物 food_point = [random.randint(10, 490), random.randint(10, 490)] food_rect = pygame.draw.circle(screen, [255, 0, 0], food_point, 15, 0) break """让蛇动起来""" # 获取蛇身的长度 snake_len = len(snake_list) - 1 # 移动身子 while snake_len > 0: # 把后面的一个点往前移动 snake_list[snake_len] = copy.deepcopy(snake_list[snake_len - 1]) snake_len -= 1 # 更改蛇头位置,向上移动 if move_up: snake_list[snake_len][1] -= 10 if snake_list[snake_len][1] < 0: snake_list[snake_len][1] = 500 # 向下移动 if move_down: snake_list[snake_len][1] += 10 if snake_list[snake_len][1] > 500: snake_list[snake_len][1] = 0 # 向左移动 if move_left: snake_list[snake_len][0] -= 10 if snake_list[snake_len][0] < 0: snake_list[snake_len][0] = 500 # 向右移动 if move_right: snake_list[snake_len][0] += 10 if snake_list[snake_len][0] > 500: snake_list[snake_len][0] = 0 # 如果蛇撞到自己 结束游戏 head_rect = snake_rect[0] count = len(snake_rect) while count > 1: if head_rect.colliderect(snake_rect[count - 1]): # 如果蛇撞到自己 游戏结束 running = False count -= 1 # 将绘制的内容显示出来 pygame.display.update() print('游戏结束,你的最终长度为', len(snake_list)) pygame.quit()

本文作者:柯南

本文链接:

版权声明:©2024 柯南 All rights reserved.